缓存

上次更新:

在使用广告前先缓存可以减少加载时间,改善用户体验,让您在使用 Chartboost 时有更大自由度。


目录


概述

在显示广告前先缓存 (预加载) 是帮助改善游戏用户体验的最佳实践。广告预先缓存到设备后,请求显示会快速得多,您还可以在决定是否显示前验证是否有广告可用。

每种广告类型和命名位置都有自己的缓存,所以您可以同时在不同位置缓存多个广告。(在此了解使用命名位置的详情。)


缓存广告

插页式广告、“更多应用”页面激励式视频广告可以通过如下方法先缓存后显示 (以 CBLocationHomeScreen 为示例命名位置):

iOS
[Chartboost cacheInterstitial:CBLocationHomeScreen];
[Chartboost cacheRewardedVideo:CBLocationHomeScreen];
[Chartboost cacheMoreApps:CBLocationHomeScreen];
Android
Chartboost.cacheInterstitial(CBLocation.LOCATION_HOME_SCREEN);
Chartboost.cacheRewardedVideo(CBLocation.LOCATION_HOME_SCREEN);
Chartboost.cacheMoreApps(CBLocation.LOCATION_HOME_SCREEN);
Unity
Chartboost.cacheInterstitial(CBLocation.HomeScreen);
Chartboost.cacheRewardedVideo(CBLocation.HomeScreen);
Chartboost.cacheMoreApps(CBLocation.HomeScreen);
Adobe AIR
Chartboost.getInstance().cacheInterstitial(CBLocation.HOME_SCREEN);
Chartboost.getInstance().cacheRewardedVideo(CBLocation.HOME_SCREEN);
Chartboost.getInstance().cacheMoreApps(CBLocation.HOME_SCREEN);

注: 虽然“更多应用”方法要求位置参数,但在“更多应用”请求中具体位置往往被忽略并视作“默认”。


检查已缓存广告

缓存有一项有用功能,即在试图显示前测试是否有广告已预先加载。作为最佳实践,如果未有广告缓存,您应该利用该机会缓存一下。

iOS
if([Chartboost hasInterstitial:CBLocationHomeScreen] == YES) {
 [Chartboost showInterstitial:CBLocationHomeScreen];
}
else {
 [Chartboost cacheInterstitial:CBLocationHomeScreen];
}
Android
if (Chartboost.hasInterstitial(CBLocation.LOCATION_HOME_SCREEN)) {
 Chartboost.showInterstitial(CBLocation.LOCATION_HOME_SCREEN);
}
else {
 Chartboost.cacheInterstitial(CBLocation.LOCATION_HOME_SCREEN);
}
Unity
if (Chartboost.hasInterstitial(CBLocation.HomeScreen)) {
 Chartboost.showInterstitial(CBLocation.HomeScreen);
}
else {
 Chartboost.cacheInterstitial(CBLocation.HomeScreen);
}
Adobe AIR
if (Chartboost.getInstance().hasInterstitial(CBLocation.HOME_SCREEN)) {
 Chartboost.getInstance().showInterstitial(CBLocation.HOME_SCREEN)
} 
else {
 Chartboost.getInstance().cacheInterstitial(CBLocation.HOME_SCREEN)
} 

按照如下方法实施可选委托方法后,当广告成功缓存是,您还可以从 SDK 收到通知 (SDK 会传输已缓存广告的命名位置):

iOS
- (void)didCacheInterstitial:(CBLocation)location
- (void)didCacheRewardedVideo:(CBLocation)location
- (void)didCacheMoreApps:(CBLocation)location
Android
public void didCacheInterstitial(String location)
public void didCacheRewardedVideo(String location)
public void didCacheMoreApps(String location)
Unity
void didCacheInterstitial(CBLocation location)
void didCacheRewardedVideo(CBLocation location)
void didCacheMoreApps(CBLocation location)
Adobe AIR
public static const DID_CACHE_INTERSTITIAL:String = "didCacheInterstitial";
public static const DID_CACHE_MORE_APPS:String = "didCacheMoreApps";
public static const DID_CACHE_REWARDED_VIDEO:String = "didCacheRewardedVideo";

相反,如果缓存调用失败,didFailToLoadInterstitial 委托方法会触发 (当您调用 showInterstitial 而广告无法显示时,该委托方法也会触发):

iOS
- (void)didFailToLoadInterstitial:(CBLocation)location withError:(CBLoadError)error
- (void)didFailToLoadRewardedVideo:(CBLocation)location withError:(CBLoadError)error
- (void)didFailToLoadMoreApps:(CBLocation)location withError:(CBLoadError)error
Android
public void didFailToLoadInterstitial(String location, CBImpressionError error)
public void didFailToLoadRewardedVideo(String location, CBImpressionError error)
public void didFailToLoadMoreApps(String location, CBImpressionError error)
Unity
void didFailToLoadInterstitial(CBLocation location, CBImpressionError error)
void didFailToLoadRewardedVideo(CBLocation location, CBImpressionError error)
void didFailToLoadMoreApps(CBLocation location, CBImpressionError error)
Adobe AIR
Chartboost.getInstance().addDelegate(ChartboostEvent.DID_FAIL_TO_LOAD_INTERSTITIAL, function (location:String))
Chartboost.getInstance().addDelegate(ChartboostEvent.DID_FAIL_TO_LOAD_MOREAPPS, function(location:String))
Chartboost.getInstance().addDelegate(ChartboostEvent.DID_FAIL_TO_LOAD_REWARDED_VIDEO, function(location:String))

自动缓存

Chartboost SDKs v4.4+ 包括广告在命名位置成功显示后自动缓存行为。然而,在启动时或需要显示广告的其他逻辑点手动缓存广告仍是最佳实践 (在自动缓存之余)。

自动缓存不会导致无谓的网络请求,因为任何缓存调用 (自动或手动) 仅当指定位置缓存为空时才会发送网络请求。该方法只是在成功显示 showInterstitial() 调用后立即处理 cacheInterstitial() 调用。

您可以使用如下 SDK 方法切换自动缓存行为:

iOS
[Chartboost setAutoCacheAds:BOOLEAN];
Android
Chartboost.setAutoCacheAds(boolean);
Unity
Chartboost.setAutoCacheAds(boolean);
Adobe AIR
Chartboost.getInstance().setAutoCacheAds(shouldCache:Boolean);

关于缓存的说明

  • [Chartboost showInterstitial:CBLocationHomeScreen]; 用以显示已缓存插页式广告 (如有)。否则会从服务器请求插页式广告。
  • 推荐使用缓存以获取最佳性能,不过仍请注意用户的数据流量
  • 已缓存的插页式广告会在 24 小时后自动过期
  • 缓存请求是异步的。如果您在加载其他应用数据时缓存大量插页式广告,请谨记这点。