Skip to main content

iOS 插屏广告接入

加载广告并注册回调#

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

插屏请求参数类名参数参数说明
KLNInterstitialAdRequestposId广告位置Id,初始化函数initWithPosId:必填参数

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

@interface ViewController ()<KLNFullScreenContentDelegate>
@property(nonatomic, strong) KLNInterstitialAd *interstitialAd;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
KLNInterstitialAdRequest *req = [[KLNInterstitialAdRequest alloc] initWithPosId:@"37062"];
[KLNInterstitialAd loadWithRequest:req completionHandler:^(KLNInterstitialAd *ad, NSError *error) {
if (error) {
NSLog(@"Failed to load interstitial ad with error: %@", [error localizedDescription]);
return;
}
self.interstitialAd = ad;
self.interstitialAd.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.interstitialAd) {
// TODO:
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.interstitialAd) {
// TODO: 预加载下一个插屏广告
return;
}
}

展示广告#

下例演示了如何在 UIViewController 的其中一个操作方法中完成插屏广告展示操作:

- (void)showInterstitialAd {
if (self.interstitialAd) {
UIViewController *viewController = self;
NSError *error;
if ([self.interstitialAd canPresentFromRootViewController:viewController error:&error]) {
[self.interstitialAd presentFromRootViewController:viewController];
} else {
//something went wrong.
NSLog(@"interstitial can not show : code = %i, error = %@", error.code, [error localizedDescription]);
}
} else {
NSLog(@"Ad wasn't ready");
}
}

主要API#

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