开屏广告是一种广告格式,适合希望通过应用加载屏幕变现的发布商。用户可以随时关闭开屏广告。当用户将您的应用切换到前台时,请展示开屏广告。
如需了解详情,请参阅 开屏广告指南。本指南介绍了如何将开屏广告植入到 Android 应用中。
准备工作
在继续之前,请执行以下操作:
- 设置 GMA Next-Gen SDK。
- 使用测试开屏广告单元 ID
ca-app-pub-3940256099942544/9257395921。- 在构建和测试应用时,请确保使用的是测试广告,而不是实际投放的广告。如果您不使用测试广告单元 ID,Google 可能会暂停您的账号。
- 在发布应用之前,请将此 ID 替换为您的广告单元 ID。
- 如需详细了解 GMA Next-Gen SDK 测试广告,请参阅 启用测试广告。
了解广告预加载(Beta 版)
GMA Next-Gen SDK 中的广告预加载(Beta 版)功能可自动执行广告加载和缓存操作。
广告预加载具有以下优势:
- 引用管理:在广告展示之前维护引用。
- 自动重新加载:从缓存中检索到广告后,加载新广告。
- 托管重试:在广告加载失败时加载新广告。
- 到期处理:在广告到期之前刷新广告。
- 缓存优化:优化缓存顺序,以投放优先级最高的 广告。
开始广告预加载
如需开始预加载广告,请在应用启动时调用一次 startPreload() 方法。调用 startPreload() 方法后,
GMA Next-Gen SDK 会自动预加载广告,并重试
预加载配置的失败请求。
以下示例展示了如何开始预加载广告:
Kotlin
Java
请将 AD_UNIT_ID 替换为您的广告单元 ID。
上一个示例展示了如何将广告单元 ID 用作预加载 ID。预加载 ID 是您创建的字符串标识符,用于标识广告预加载配置。如果您的应用需要为同一广告单元 ID 使用多个定位配置,请传递自定义字符串标识符。
获取并展示预加载的广告
当您想要展示广告时,请调用 pollAd() 方法。
GMA Next-Gen SDK 会检索可用广告,并在后台自动预加载下一个广告
。如果没有可用广告,GMA Next-Gen SDK 不会返回任何广告。
show 方法来展示广告。
以下示例展示了如何检索和展示预加载的广告:
Kotlin
Java
在准备好展示广告之前,请避免调用 pollAd() 方法。如需在不展示广告的情况下读取广告响应信息,
请参阅读取响应信息。
监听广告事件
在展示广告之前,请监听广告事件。以下示例注册了广告事件的回调:
Kotlin
private fun listenToAdEvents() { // Listen for ad events. val ad = appOpenAd if (ad == null) { Log.e(TAG, "App open ad is not ready yet.") return } ad.adEventCallback = object : AppOpenAdEventCallback { override fun onAdShowedFullScreenContent() { // App open ad did show. } override fun onAdDismissedFullScreenContent() { // App open ad did dismiss. appOpenAd = null } override fun onAdFailedToShowFullScreenContent( fullScreenContentError: FullScreenContentError ) { // App open ad failed to show. Log.e(TAG, "App open ad failed to show: ${fullScreenContentError.message}") } override fun onAdImpression() { // App open ad did record an impression. } override fun onAdClicked() { // App open ad did record a click. } } }
Java
private void listenToAdEvents() { // Listen for ad events. if (appOpenAd == null) { Log.e(TAG, "App open ad is not ready yet."); return; } appOpenAd.setAdEventCallback( new AppOpenAdEventCallback() { @Override public void onAdShowedFullScreenContent() { // App open ad did show. } @Override public void onAdDismissedFullScreenContent() { // App open ad did dismiss. appOpenAd = null; } @Override public void onAdFailedToShowFullScreenContent( @NonNull FullScreenContentError fullScreenContentError) { // App open ad failed to show. Log.e(TAG, "App open ad failed to show: " + fullScreenContentError.getMessage()); } @Override public void onAdImpression() { // App open ad did record an impression. } @Override public void onAdClicked() { // App open ad did record a click. } }); }
可选:监听预加载事件
开始预加载广告后,请注册预加载事件,以便在广告预加载成功、预加载失败或广告缓存耗尽时收到通知。
以下示例展示了如何注册预加载广告事件:
Kotlin
val preloadCallback = object : PreloadCallback { override fun onAdFailedToPreload(preloadId: String, adError: LoadAdError) { Log.d(TAG, "App open preload ad $preloadId failed to load with error: ${adError.message}") } override fun onAdsExhausted(preloadId: String) { Log.i(TAG, "App open preload ad $preloadId is not available") } override fun onAdPreloaded(preloadId: String, responseInfo: ResponseInfo) { Log.i(TAG, "App open preload ad $preloadId is available") } } val adRequest = AdRequest.Builder(adUnitId).build() val preloadConfig = PreloadConfiguration(adRequest) AppOpenAdPreloader.start(adUnitId, preloadConfig, preloadCallback)
Java
PreloadCallback preloadCallback = new PreloadCallback() { @Override public void onAdFailedToPreload(@NonNull String preloadId, @NonNull LoadAdError adError) { Log.d( TAG, String.format( "App open preload ad %s failed to load with error: %s", preloadId, adError.getMessage())); } @Override public void onAdsExhausted(@NonNull String preloadId) { Log.i(TAG, String.format("App open preload ad %s is not available", preloadId)); } @Override public void onAdPreloaded(@NonNull String preloadId, @NonNull ResponseInfo responseInfo) { Log.i(TAG, String.format("App open preload ad %s is available", preloadId)); } }; AdRequest adRequest = new AdRequest.Builder(adUnitId).build(); PreloadConfiguration preloadConfig = new PreloadConfiguration(adRequest); AppOpenAdPreloader.start(adUnitId, preloadConfig, preloadCallback);
当广告加载失败时,GMA Next-Gen SDK 会自动预加载广告,并重试 预加载配置的失败请求。
可选:检查广告可用性
如果您需要了解广告是否可用,请检查广告可用性。以下示例检查了预加载的广告是否可用:
Kotlin
private fun isAdAvailable(adUnitId: String): Boolean { return AppOpenAdPreloader.isAdAvailable(adUnitId) }
Java
private boolean isAdAvailable(String adUnitId) { return AppOpenAdPreloader.isAdAvailable(adUnitId); }
可选:设置缓冲区空间
缓冲区大小用于控制内存中预加载的广告数量。默认情况下,Google 会优化缓冲区大小,以平衡内存消耗和广告投放延迟时间。您可以设置自定义缓冲区空间,以增加内存中保留的广告数量。我们建议将缓冲区空间大小设置为两个预加载的广告。
以下示例展示了如何设置缓冲区空间:
Kotlin
val adRequest = AdRequest.Builder(adUnitId).build() // Define a PreloadConfiguration and set the buffer size to 2 preloaded ads. val preloadConfig = PreloadConfiguration(adRequest, bufferSize = 2) AppOpenAdPreloader.start(adUnitId, preloadConfig)
Java
AdRequest adRequest = new AdRequest.Builder(adUnitId).build(); // Define a PreloadConfiguration and set the buffer size to 2 preloaded ads. PreloadConfiguration preloadConfig = new PreloadConfiguration(adRequest, 2); AppOpenAdPreloader.start(adUnitId, preloadConfig);
预加载缓存限制
GMA Next-Gen SDK 对所有广告单元和预加载 ID 的预加载广告总数强制执行应用级限制:
- 默认限制:Google 在内存中最多保留六个预加载的广告。此限制适用于所有格式和预加载 ID。
- 我们建议为每个预加载 ID 保留两个缓冲区的缓冲区空间。
可选:停止预加载广告
如果您不需要在会话中再次展示特定预加载 ID 的广告,可以停止预加载广告。如需停止加载特定预加载 ID 的广告,请使用预加载 ID 调用 destroy() 方法。调用 destroy() 方法会从缓存中移除与预加载 ID 关联的所有预加载广告。
以下示例展示了如何停止预加载广告:
Kotlin
private fun stopPreloading(adUnitId: String) { // Stops the preloading and destroy preloaded ads. AppOpenAdPreloader.destroy(adUnitId) }
Java
private void stopPreloading(String adUnitId) { // Stops the preloading and destroy preloaded ads. AppOpenAdPreloader.destroy(adUnitId); }
可选:读取响应信息
读取下一个预加载广告的响应信息,而无需从缓存中移除广告。
以下示例展示了如何读取下一个预加载广告的响应信息:
Kotlin
val responseInfo = AppOpenAdPreloader.peekAdResponseInfo(preloadId) if (responseInfo == null) { Log.e(TAG, "Failed to peek ad response info.") return } Log.d(TAG, "Peeked ad response ID: ${responseInfo.responseId}")
Java
ResponseInfo responseInfo = AppOpenAdPreloader.peekAdResponseInfo(preloadId); if (responseInfo == null) { Log.e(TAG, "Failed to peek ad response info."); return; } Log.d(TAG, "Peeked ad response ID: " + responseInfo.getResponseId());
处理冷启动和加载屏幕
冷启动是指从磁盘启动应用,而温启动是指从内存中重新打开应用。在冷启动期间,您没有预加载的广告可立即展示。在温启动期间,您可能仍有预加载的广告可供展示。
在冷启动期间,用户可能会在应用加载并展示广告之前与应用互动。为避免用户体验不佳,请在应用资源加载期间,严格从加载屏幕展示冷启动时的开屏广告。如果资源加载完成且用户在广告加载之前已看到主要内容,请不要展示广告。
建议
对于开屏广告,请遵循以下建议:
- 请勿在首次启动应用时展示开屏广告。
- 如果加载屏幕在广告展示期间加载完毕,请在广告关闭回调方法中关闭加载屏幕。
- 开屏广告会在加载后四小时到期。请勿展示已加载超过四小时的开屏广告。