iOS 8.1.x 升级

初始化

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;
}
插屏和激励视频广告

我们将向您介绍新的类 CHBInterstitialCHBRewarded 来取代旧版本里 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代理函数。
  • 旧的模式里,强行展示一个未缓存成功的广告会导致失败。广告对象在下一次缓存成功前会一直处于等待状态。新版本完全不需要考虑类似的问题。

如何处理广告缓存未完成的状况:

    1. 在调用 showFromViewController:  方法展示广告前先检查缓存是否成功。

       if (self.rewardedAd.isCached) {
      [self.rewardedAd showFromViewController:self];
      } else {
      // ad is not ready to be shown!
      }

    2. 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!
      }
      }

广告代理方法

我们上面已经介绍了创建、缓存和展示广告对象。为了获取使用广告过程中的相关通知,您需要实现 CHBInterstitialDelegateCHBRewardedDelegate 方法,对应的也就是旧版本里的 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:]