迁移到 iOS 的奖励广告单元 API
通过初始化广告单元、设置委托和处理广告事件,在 iOS app 中实现奖励视频广告单元。
阅读时间9 分钟最后更新于 2 天前
本指南介绍如何从 SDK 9.0.0 版本开始集成 LevelPlay API,使用广告单元 ID 作为瀑布流标识符来加载和显示奖励广告服务。
在 LevelPlay 平台中找到广告单元 ID
要加载和显示奖励广告服务,需要使用 LevelPlay 聚合平台中的广告单元 ID:
- 在 LevelPlay 帐户中,导航到 Setup > Ad Units。
- 复制奖励的广告单元 ID 并将其集成到代码中。
初始化 LevelPlay SDK
要初始化 LevelPlay SDK,请执行以下步骤:
- 定义完成处理程序的成功和失败。
- 定义要在会话中初始化的广告格式列表。这应包括要使用非多个广告单元 API 的所有广告格式。
- 使用 appKey、广告格式和用户 ID(如果相关)调用 LevelPlay init API。
// 使用 app 密钥创建请求构建器。添加 User ID(如果有)LPMInitRequestBuilder *requestBuilder = [[LPMInitRequestBuilder alloc] initWithAppKey:@"appKey"];[requestBuilder withUserId:@"UserId"];// 构建初始请求LPMInitRequest *initRequest = [requestBuilder 构建];// 使用准备好的请求初始化 LevelPlay[LevelPlay initWithRequest:initRequest 完成:^(LPMConfiguration *_Nullable 配置,NSError *_Nullable 报错){ 报错 { // 初始化时报错。采取必要的操作或重试 } else { // 初始化成功。现在可以加载横幅广告或执行其他任务 }}];
初始化结果
Success:初始化成功完成时触发。收到此指示后,您可以创建和加载广告。
报错:未成功检索配置,无法加载广告服务。建议稍后尝试并初始化 LevelPlay SDK(当互联网连接可用或故障原因得到解决时)
组件 | 旧版 | 广告单元(新) |
|---|---|---|
| API | IronSource.initWithAppKey | LevelPlay.initWithRequest |
| 初始化结果 | onInitializationComplete | 完成 |
| – | error |
创建奖励广告
必须在收到完成结果后才能创建奖励广告对象。
该对象是可重用的实例,可以处理多个加载并在整个会话中显示。创建后,应使用 来加载和展示同一广告单元的广告服务。
对于更高级的实现,如有必要,您可以创建多个奖励广告对象。
// 创建奖励广告self.rewardedAd = [[LPMRewardedAd alloc] initWithAdUnitId:@"adUnitId"];
实现奖励委托
为创建的奖励广告单元实现 LPMRewardedAdDelegate,从而了解广告投放情况。
- 建议在加载奖励广告之前设置监听器。
- 每个奖励广告都应有自己的监听器实现。
- 回调在主线程上运行。
// 创建奖励广告self.rewardedAd = [[LPMRewardedAd alloc] initWithAdUnitId:@"adUnitId"]; // 实现委托self.rewardedAd.delegate = self;#pragma mark - LPMRewardedAdDelegate 方法- (void)didLoadAdWithAdInfo:(LPMAdInfo *)adInfo {}- (void)didFailToLoadAdWithAdUnitId:(NSString *)adUnitId error:(NSError *)error {}- (void)didChangeAdInfo:(LPMAdInfo *)adInfo {}- (void)didDisplayAdWithAdInfo:(LPMAdInfo *)adInfo {- (void)didFailToDisplayAdWithAdInfo:(LPMAdInfo *)adInfo 报错:(NSError *)报错 {- (void)didClickAdWithAdInfo:(LPMAdInfo *)adInfo {}- (void)didCloseAdWithAdInfo:(LPMAdInfo *)adInfo {}- (void)didRewardAdWithAdInfo:(LPMAdInfo *)adInfo 奖励:(LPMReward *)奖励{
LevelPlay 奖励广告事件
didLoadAd:成功加载广告时提供。
didFailToLoadAd:在广告加载失败时提供。包含广告单元信息。
didDisplayAd:在显示广告时提供。这相当于展示。
didFailToDisplayAd:广告无法显示时提供。
didRewardAd:在广告获得奖励时提供。其中包含广告单元信息和奖励信息。
didClickAd(可选):在用户点击广告时提供。
didCloseAd:在广告关闭时提供。
didChangeAdInfo(可选):在更新广告信息时提供。加载另一个广告后可用,并且包含更高的 CPM/速率。
组件 | 旧版 | 广告单元(新) |
|---|---|---|
| 委托 | LevelPlayRewardedAdDelegate | LPMRewardedAdDelegate |
| 事件 | onAdReady | didLoadAd |
| onAdLoadFailed | didFailToLoadAd | |
| onAdOpened | didDisplayAd | |
| onAdClosed | didCloseAd | |
| onAdShowFailed | didFailToDisplayAd | |
| onAdRewarded | didRewardAd | |
| onAdClicked | didClickAd | |
| onAdShowSucceeded | –(已弃用) | |
| – | didChangeAdInfo |
加载奖励广告
收到 onInitSuccess 回调后,即可加载奖励广告。应使用 方法执行此操作:
// 加载或重新加载广告[self.rewardedAd loadAd];
显示奖励广告
您可以在收到 onAdLoaded 回调后使用 showAd API 展示奖励广告。
如果使用广告位,请将广告位名称作为 API 的一部分共享,如下所示。
// 显示而不放置/位置 [self.rewardedAd showAdWithViewController:self placementName:nil];// 显示与放置/位置 [self.rewardedAd showAdWithViewController:self placementName:placementName];
检查 Ad is Ready
为了避免展示失败,并确保广告可以正确展示,建议在调用 showAd API 之前使用以下 API。
isAdReady:如果广告已成功加载且广告单元未设置上限,则返回 true,否则返回 false。
isPlacementCapped:限制有效放置/位置时返回 true。如果放置/位置无效或未设置上限,此 API 将返回 false。
// 检查广告是否已准备就绪并且放置/位置未设置上限 if ([self.rewardedAd isAdReady] && ![LPMRewardedAd isPlacementCapped:placementName]) { [self.rewardedAd showAdWithViewController:self placementName:placementName];}
当广告成功展示给玩家时,您可以加载另一个广告,重复加载奖励广告步骤。一时间加载单个广告时,无需创建新的广告实体。
奖励用户
LevelPlay SDK 将在用户每次成功完成视频时触发 didRewardAd。
didRewardAd 和 didCloseAd 是异步的。确保设置监听器以提供奖励,即使 didRewardAd 在 didCloseAd 之后被触发也是如此。
- (void)didRewardAdWithAdInfo:(LPMAdInfo *)adInfo 奖励:(LPMReward *)奖励 { // 实现向用户授予奖励的逻辑 NSString *name = reward.name; NSInteger *amount = reward.amount;}
多个广告单元奖励 API
旧版 | 广告单元(新) | |
|---|---|---|
| 类 | IronSource | LPMRewardedAd |
| API | loadRewardedVideo | loadAd |
| showRewardedVideo | showAd | |
| isRewardedVideoPlacementCapped | isPlacementCapped | |
| isRewardedVideoAvailable | isAdReady | |
| placement.getRewardName | reward.name | |
| placement.getRewardAmount | reward.amount |
奖励广告的完整实现示例
NS_ASSUME_NONNULL_BEGIN@interface RewardedAdViewController () <LPMRewardedAdDelegate>@property(nonatomic, strong) LPMRewardedAd *rewardedAd;@end@implementation RewardedAdViewController- (void)createRewardedAd { self.rewardedAd = [[LPMRewardedAd alloc] initWithAdUnitId:@"adUnitId"]; self.rewardedAd.delegate = self;}- (void)loadRewardedAd { // 加载或重新加载广告 [self.rewardedAd loadAd];}- (void)showRewardedAd { if ([self.rewardedAd isAdReady]) { [self.rewardedAd showAdWithViewController:self placementName:NULL]; }}- (void)showRewardedAdWithPlacementName:(NSString *)placementName { } // 检查广告是否已准备就绪并且放置/位置未设置上限 if ([self.rewardedAd isAdReady] && ![LPMRewardedAd isPlacementCapped:placementName]) { [self.rewardedAd showAdWithViewController:self placementName:placementName]; }}#pragma mark - LPMRewardedAdDelegate 方法- (void)didLoadAdWithAdInfo:(LPMAdInfo *)adInfo {}- (void)didFailToLoadAdWithAdUnitId:(NSString *)adUnitId error:(NSError *)error {}- (void)didChangeAdInfo:(LPMAdInfo *)adInfo {}- (void)didDisplayAdWithAdInfo:(LPMAdInfo *)adInfo {- (void)didFailToDisplayAdWithAdInfo:(LPMAdInfo *)adInfo 报错:(NSError *)报错 {- (void)didClickAdWithAdInfo:(LPMAdInfo *)adInfo {}- (void)didCloseAdWithAdInfo:(LPMAdInfo *)adInfo {}- (void)didRewardAdWithAdInfo:(LPMAdInfo *)adInfo 奖励:(LPMReward *)奖励{@endNS_ASSUME_NONNULL_END