初始化
Chartboost 初始化方法:
startWithAppId:appSignature:delegate:
替换为:
startWithAppId:appSignature:completion:
之前的版本您需要通过实现 -[ChartboostDelegate didInitialize:] 来获取初始化成功后的通知。如今您只需传递一个代码区块作为参数即可:
旧版本:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [Chartboost startWithAppId:YOUR_CHARTBOOST_APP_ID appSignature:YOUR_CHARTBOOST_APP_SIG delegate:self]; return YES; } - (void)didInitialize:(BOOL)status { // Chartboost finished initializing! }
替换为:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [Chartboost startWithAppId:YOUR_CHARTBOOST_APP_ID appSignature:YOUR_CHARTBOOST_APP_SIG< completion:^(BOOL success) { // Chartboost finished initializing! }]; return YES; }
插屏和激励视频广告
我们将向您介绍新的类 CHBInterstitial 和 CHBRewarded 来取代旧版本里 Chartboost.h and ChartboostDelegate.h 文件里广告相关的功能。
在旧版本里,您需要用下面的方法缓存插屏广告:
[Chartboost cacheInterstitial:CBLocationDefault]; // ... if ([Chartboost hasInterstitial]) { [Chartboost showInterstitial:CBLocationDefault]; }
在新版本里,采用 CHBInterstitial 类的方法如下:
CHBInterstitial *interstitial = [[CHBInterstitial alloc] initWithLocation:CBLocationDefault delegate:self]; [interstitial cache]; // ... if (interstitial.isCached) { [interstitial showFromViewController:self]; }
新旧两个版本调用广告 API 的区别是:
- 对于您创建的插屏或者激励视频广告,在您销毁它们之前,它们在代码里使用强引用调用。意味着您可以将它们作为属性指派给任意视图对象或者其他对象。
- 每个新建的广告都能有它自己独立的代理函数,它们无需共享同一个 ChartboostDelegate代理函数。
- 旧的模式里,强行展示一个未缓存成功的广告会导致失败。广告对象在下一次缓存成功前会一直处于等待状态。新版本完全不需要考虑类似的问题。
如何处理广告缓存未完成的状况:
-
- 在调用 showFromViewController: 方法展示广告前先检查缓存是否成功。
if (self.rewardedAd.isCached) { [self.rewardedAd showFromViewController:self]; } else { // ad is not ready to be shown! }
- 在 didShowAd:error: 代理方法里实现对错误代码 CHBShowErrorCodeNoCachedAd的处理。错误代码:
// ... [self.rewardedAd showFromViewController:self]; } - (void)didShowAd:(CHBShowEvent *)event error:(CHBShowError *)error { if (error.code == CHBShowErrorCodeNoCachedAd) { // ad is not ready to be shown! } }
- 在调用 showFromViewController: 方法展示广告前先检查缓存是否成功。
广告代理方法
我们上面已经介绍了创建、缓存和展示广告对象。为了获取使用广告过程中的相关通知,您需要实现 CHBInterstitialDelegate 和 CHBRewardedDelegate 方法,对应的也就是旧版本里的 ChartboostDelegate 代理方法。
以下表格是 新旧版本代理方法 的对应及比较
ChartboostDelegate | CHBInterstitialDelegate / CHBRewardedDelegate | |
---|---|---|
customAgeGateView | 无对应方法 | |
shouldRequestInterstitial: | 无对应方法。避免提前加载的方式就是不执行缓存相关的方法。 | |
shouldDisplayInterstitial: shouldDisplayRewardedVideo: | 无对应方法。避免提前展示广告的方式就是不执行展示相关的方法。 | |
didDisplayInterstitial: didDisplayRewardedVideo: | didShowAd:error: (with a nil error). | |
didCacheInterstitial: didCacheRewardedVideo: | didCacheAd:error (with a nil error). | |
didFailToLoadInterstitial:withError: didFailToLoadRewardedVideo:withError: | didCacheAd:error (with a non-nil error) 或者 didShowAd:error: (with a non-nil error) 任意一个。取决于你需要缓存或者展示广告 | |
didFailToRecordClick:withError: | didClickAd:error: (with a non-nil error) | |
didDismissInterstitial: didDismissRewardedVideo: | didDismissAd: | |
didCloseInterstitial: didCloseRewardedVideo: | 无对应方法。使用 didDismissAd: 即可 | |
didClickInterstitial: didClickRewardedVideo: | didClickAd:error: (with a nil error) | |
didCompleteRewardedVideo:withReward: | didEarnReward: | |
willDisplayInterstitial: willDisplayVideo: | willShowAd: | |
didCompleteAppStoreSheetFlow | 无对应方法。 didFinishHandlingClick:error: 是一个更为通用的回调函数,它会在用户点击广告后返回 App 时执行 | |
didPauseClickForConfirmation | shouldConfirmClick:confirmationHandler: 详情请参考本文下面部分的解释 |
点击确认 / 年龄限制
在旧版本的 Chartboost API 里,要想实现年龄限制,需要用下面的方法,在用户点击后实现二次确认:
- 打开点击后二次确认的开关:
[Chartboost setShouldPauseClickForConfirmation:YES];
- 用 ChartboostDelegate 代理方法控制展示年龄确认的对话框:
- (void)didPauseClickForConfirmation { // 显示年龄确认对话框的逻辑 }
- 调用
[Chartboost didPassAgeGate:passed];
方法来处理年龄确认是否通过
在新版本的 API 里,您只需通过 CHBAdDelegate 方法来实现年龄二次确认的逻辑。 (没有此方法则表示无需二次确认):
- (BOOL)shouldConfirmClick:(CHBClickEvent *)event confirmationHandler:(void(^)(BOOL))confirmationHandler { if (YOU_WANT_TO_ENABLE_AGE_GATE) { // 展示年龄确认的对话框逻辑 // 当取得用户的确认许可时,调用下面的方法: // confirmationHandler(AGE_GATE_PASSED); return YES; } else { return NO; } }
自动缓存
旧版本会默认启用自动缓存。
需要用下面的方式关闭:
+[Chartboost setAutoCacheAds:]
新版本的 API 不再提供次方法。如果您想实现类似的逻辑,需要在广告关闭时,将下面的逻辑放到 CHBAdDelegate 函数里:
- (void)didDismissAd:(CHBDismissEvent *)event {
[event.ad cache];
}
在 SDK 启动后立即请求插屏广告
旧版本 SDK 中的方法:
+[Chartboost setShouldRequestInterstitialsInFirstSession:]
新版本 SDK 将不再支持此特性。如果您需要实现类似的功能,需要手动在 Chartboost SDK初始化以后调用相关的方法。
广告中介平台适配器
当你希望自己编写广告适配器时,旧版 SDK 使用下面的方法向广告中介平台传递版本参数:
+[Chartboost setMediation:withLibraryVersion:adapterVersion:]
在新版 SDK 里,可以直接通过 Chartboost+Mediation.h 文件里的自定义初始化函数来实现:
-[CHBInterstitial initWithLocation:mediation:delegate:]
-[CHBRewarded initWithLocation:mediation:delegate:]
-[CHBBanner initWithSize:location:mediation:delegate:]
Last Updated on 4月 29, 2020