Skip to main content

iOS 激励视频广告接入

加载广告并注册回调#

激励广告加载是通过调用KLNRewardedAd类的静态方法loadWithRequest: completionHandler:完成的。该方法需要两个参数,一是KLNRewardedAdRequest对象,二是加载成功或者失败的回调Block。加载成功得到KLNRewardedAd实例后,注册代理对象,KLNFullScreenContentDelegate 协议会在广告成功展示或展示失败,以及广告关闭时处理回调。

激励广告请求参数类名参数参数说明
KLNRewardedAdRequestposId广告位置Id,初始化函数initWithPosId:必填参数
autoMute激励视频播放是否自动静音
不设置,默认非静音播放
rewardTrigger触发的激励类型,1:复活;2:签到;3:道具;4:虚拟货币;5:其他
不设置,默认为5
rewardTime激励卡秒时长
默认为视频时长/赋值大于视频时长或者为非正数时,SDK以视频时长为准

以下示例展示了如何在 ViewController 类中加载 KLNRewardedAd :

@interface ViewController ()<KLNFullScreenContentDelegate>
@property(nonatomic, strong) KLNRewardedAd *rewardedAd;
@end
@implementation ViewController
- (void)loadRewardedAd {
KLNRewardedAdRequest *req = [[KLNRewardedAdRequest alloc] initWithPosId:@"37061"];
req.autoMute = NO;
req.rewardTrigger = 2;
req.rewardTime = 10;
[KLNRewardedAd loadWithRequest:req completionHandler:^(KLNRewardedAd *rewardedAd, NSError *error) {
if (error) {
NSLog(@"Failed to load reward ad with error: %@", [error localizedDescription]);
return;
}
self.rewardedAd = rewardedAd;
self.rewardedAd.fullScreenContentDelegate = self;
}];
}
#pragma mark - KLNFullScreenContentDelegate
- (void)adDidRecordImpression:(nonnull id<KLNFullScreenPresentingAd>)ad {
NSLog(@"广告曝光上报打点成功:%s", __FUNCTION__);
// TODO: 业务可以通过这个回调方法,上报广告曝光计数事件,与游可赢后台数据对账
}
- (void)ad:(nonnull id<KLNFullScreenPresentingAd>)ad
didFailToPresentFullScreenContentWithError:(nonnull NSError *)error {
NSLog(@"广告展示失败:%li, %@", error.code, error.localizedDescription);
// TODO: 业务方可以通过实现该方法,处理广告展示失败事件;比如重新拉取广告
if (ad == self.rewardedAd) {
// TODO: 请根据具体的错误码来做出响应的操作
[self loadRewardedAd];
return;
}
}
- (void)adDidPresentFullScreenContent:(nonnull id<KLNFullScreenPresentingAd>)ad {
NSLog(@"%s", __FUNCTION__);
// TODO: 业务方可以通过实现该方法,暂停业务视图上的动画/计时器等UI操作
}
- (void)adDidDismissFullScreenContent:(nonnull id<KLNFullScreenPresentingAd>)ad {
NSLog(@"%s", __FUNCTION__);
// TODO: 业务方可以通过实现该方法,恢复业务视图上的动画等UI操作
// MARK: 也可以在广告结束曝光后,预加载下一个广告
if (ad == self.rewardedAd) {
// TODO: 预加载下一个激励广告
[self loadRewardedAd];
return;
}
}

展示广告并处理奖励事件#

展示广告时,您必须提供 KLNAdUserDidEarnRewardHandler 对象,用于处理用户奖励。 以下代码演示了展示激励广告的最佳方法:

- (void)showRewardAd {
if (self.rewardedAd) {
UIViewController *viewController = self;
NSError *error;
if ([self.rewardedAd canPresentFromRootViewController:viewController error:&error]) {
[self.rewardedAd presentFromRootViewController:viewController
userDidEarnRewardHandler:^{
KLNAdReward *reward =
self.rewardedAd.adReward;
// TODO: Reward the user!
}];
} else {
//something went wrong.
NSLog(@"reward ad can not show : code = %i, error = %@", error.code, [error localizedDescription]);
}
} else {
NSLog(@"Ad wasn't ready");
}
}

视频边拉边播能力#

为了满足开发者对激励广告短时间实时加载和展示的需求,SDK v2.1版本新增了请求广告接口(旧接口完全兼容,逻辑不变):

/// 加载激励广告方法
/// @param request 激励广告请求对象
/// @param adLoadedCallback 激励广告信息加载成功回调(视频素材未下载完成),此时调用播放会触发边拉边播体验
/// @param completionHandler  广告加载结果回调(成功/失败)
+ (void)loadWithRequest:(KLNRewardedAdRequest *)request
adDidLoadHandler:(nullable KLNRewardedAdDidLoadCallback)adLoadedCallback
completionHandler:(KLNRewardedAdLoadCompletionHandler)completionHandler;

接口的使用可以参考 Demo工程。

主要API#

类名API方法API方法说明
KLNRewardedAdfullScreenContentDelegate广告行为回调代理,可以监听广告的曝光、展示、错误、dismiss等。
请注意:从V2.8.0版本开始,增加adDidCloseOtherController:interactionType:方法回调,该方法在广告跳转到其他控制器时,控制器被关闭时调用。interactionType参数:KLNInteractionType枚举类型,包括Appstore/网页/视频详情页等。
promotedType返回广告的推广类型:2=下载广告; 3=网页推广广告【2.10.1版本新增】
requestId广告请求ID
请注意:从V2.11版本新增该字段,接入方可以拼接requestId和creativeID唯一标记一个广告
creativeID广告创意ID
请注意:从V2.11版本新增该字段,接入方可以拼接requestId和creativeID唯一标记一个广告
+loadWithRequest:
completionHandler:
加载激励广告入口,在回调block里返回广告实体对象,错误信息用NSError对象存储
+loadWithRequest:
adDidLoadHandler:
completionHandler:
v2.1版本新增边拉边播接口回调。
在adDidLoadHandler回调中返回广告实体信息,此时触发广告展示,视频会边拉边播。
而completionHandler回调里,返回adDidLoadHandler中的广告对象则意味视频文件已经完整缓存在本地。若广告加载出错,则返回错误信息NSError对象
canPresentFromRootViewController:
error:
可以在展示前判断是否符合展示条件,错误信息用NSError对象返回
presentFromRootViewController展示激励广告,如发生错误通过代理方法返回