请选择平台:
Android
Android
iOS
Unity
Flutter
横幅广告是占据应用部分版面的矩形广告。锚定自适应横幅广告是固定宽高比广告,当用户与应用互动时,这种广告会停留在屏幕上(锚定在屏幕顶部或底部)。
本指南介绍了如何将锚定自适应横幅广告加载到 Android 应用中。
前提条件
设置 Google Mobile Ads SDK。
可选:如需查看横幅广告植入示例,请选择以下任一示例应用:
Java、Kotlin 或 Jetpack Compose 锚定自适应横幅广告示例。
Java 或 Kotlin 高级功能演示。
务必用测试广告进行测试
在构建和测试应用时,请确保使用的是测试广告,而不是实际投放的广告。否则,可能会导致您的账号被中止。
对于 Android 横幅广告,加载测试广告最简便的方法就是使用我们的专用测试广告单元 ID:
ca-app-pub-3940256099942544/9214589741
该测试广告单元 ID 已经过专门配置,可确保每个请求返回的都是测试广告。您可以在自己应用的编码、测试和调试过程中使用该测试广告单元 ID。需要注意的一点是,请务必在发布应用前用您的广告单元 ID 替换该测试广告单元 ID。
如需详细了解 Google Mobile Ads SDK 测试广告如何运作,请参阅启用测试广告。
定义广告视图
XML 布局向布局 XML 文件中添加一个视图,用作锚定自适应横幅广告的容器:
android:id="@+id/ad_view_container" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerInParent="true" android:layout_alignParentBottom="true" /> Jetpack Compose 添加 JetpackCompose Utilities 文件夹。此文件夹包含用于组合 AdView 对象和素材资源的辅助程序。 组合 AdView: // Place the ad view at the bottom of the screen. Column(modifier = modifier.fillMaxSize(), verticalArrangement = Arrangement.Bottom) { Box(modifier = modifier.fillMaxWidth()) { BannerAd(adView, modifier) } }BannerScreen.kt 设置广告尺寸 大型自适应横幅广告采用更大的格式,专为不可滚动的版式而设计。与标准锚定自适应横幅广告相比,此类横幅广告支持的高度上限更高(最高可达屏幕高度的 20%,介于 50-150 dp 之间)。这一更大的空间已针对视频内容进行了优化。 将 AdSize 设置为具有指定宽度的锚定自适应横幅广告类型: Java // Request a large anchored adaptive banner with a width of 360. adView.setAdSize(AdSize.getLargeAnchoredAdaptiveBannerAdSize(this, 360));MyActivity.java Kotlin // Request a large anchored adaptive banner with a width of 360. adView.setAdSize(AdSize.getLargeAnchoredAdaptiveBannerAdSize(this, 360))MainActivity.kt Jetpack Compose // Set a large anchored adaptive banner ad size with a given width. val adSize = AdSize.getLargeAnchoredAdaptiveBannerAdSize(LocalContext.current, 360) adView.setAdSize(adSize)BannerScreen.kt 向布局中添加 AdView 使用广告尺寸创建一个 AdView,以添加到应用的布局中: Java // Create a new ad view. adView = new AdView(this); adView.setAdUnitId(AD_UNIT_ID); // Request a large anchored adaptive banner with a width of 360. adView.setAdSize(AdSize.getLargeAnchoredAdaptiveBannerAdSize(this, 360)); // Replace ad container with new ad view. adContainerView.removeAllViews(); adContainerView.addView(adView);MyActivity.java Kotlin // Create a new ad view. val adView = AdView(this) adView.adUnitId = AD_UNIT_ID // Request a large anchored adaptive banner with a width of 360. adView.setAdSize(AdSize.getLargeAnchoredAdaptiveBannerAdSize(this, 360)) this.adView = adView // Replace ad container with new ad view. binding.adViewContainer.removeAllViews() binding.adViewContainer.addView(adView)MainActivity.kt Jetpack Compose val adView = remember { AdView(context) } // Setup and load the adview. // Set the unique ID for this specific ad unit. adView.adUnitId = BANNER_AD_UNIT_ID // Set a large anchored adaptive banner ad size with a given width. val adSize = AdSize.getLargeAnchoredAdaptiveBannerAdSize(LocalContext.current, 360) adView.setAdSize(adSize) // Place the ad view at the bottom of the screen. Column(modifier = modifier.fillMaxSize(), verticalArrangement = Arrangement.Bottom) { Box(modifier = modifier.fillMaxWidth()) { BannerAd(adView, modifier) } }BannerScreen.kt 加载广告 以下示例会将一个宽度为 360 的锚定自适应横幅广告加载到 AdView 对象中: 重要注意事项:loadAd() 方法必须在主线程中调用。 JavaAdRequest adRequest = new AdRequest.Builder().build(); adView.loadAd(adRequest);MyActivity.java Kotlinval adRequest = AdRequest.Builder().build() adView.loadAd(adRequest)MainActivity.kt 刷新广告 如果您已为广告单元配置刷新功能,则在广告加载失败时无需再请求另一个广告。Google Mobile Ads SDK 会按照您在 AdMob 界面中指定的任何频率进行刷新。如果您尚未启用刷新功能,则需发出新的请求。如需详细了解广告单元刷新(例如如何设置刷新频率),请参阅为横幅广告使用自动刷新功能。 注意:如果您在 AdMob 界面中设置了刷新频率,只有当横幅广告在屏幕上显示时,才会发生自动刷新。 释放广告资源 使用完横幅广告后,您可以释放横幅广告占用的资源。 如需释放广告占用的资源,请从视图层次结构中移除该广告并删除对它的所有引用: Javapublic void destroyBanner() { // Remove banner from view hierarchy. if (adView != null) { View parentView = (View) adView.getParent(); if (parentView instanceof ViewGroup) { ((ViewGroup) parentView).removeView(adView); } // Destroy the banner ad resources. adView.destroy(); } // Drop reference to the banner ad. adView = null; } BannerSnippets.java Kotlinfun destroyBanner() { // Remove banner from view hierarchy. val parentView = adView?.parent if (parentView is ViewGroup) { parentView.removeView(adView) } // Destroy the banner ad resources. adView?.destroy() // Drop reference to the banner ad. adView = null } BannerSnippets.kt 广告事件 您可以监听广告生命周期中的多种事件,包括加载、广告展示、点击,以及广告打开和关闭事件。建议在加载横幅广告之前先设置好回调函数。 Javaif (adView != null) { adView.setAdListener( new AdListener() { @Override public void onAdClicked() { // Code to be executed when the user clicks on an ad. } @Override public void onAdClosed() { // Code to be executed when the user is about to return // to the app after tapping on an ad. } @Override public void onAdFailedToLoad(@NonNull LoadAdError adError) { // Code to be executed when an ad request fails. } @Override public void onAdImpression() { // Code to be executed when an impression is recorded // for an ad. } @Override public void onAdLoaded() { // Code to be executed when an ad finishes loading. } @Override public void onAdOpened() { // Code to be executed when an ad opens an overlay that // covers the screen. } }); }BannerSnippets.java KotlinadView?.adListener = object : AdListener() { override fun onAdClicked() { // Code to be executed when the user clicks on an ad. } override fun onAdClosed() { // Code to be executed when the user is about to return // to the app after tapping on an ad. } override fun onAdFailedToLoad(adError: LoadAdError) { // Code to be executed when an ad request fails. } override fun onAdImpression() { // Code to be executed when an impression is recorded // for an ad. } override fun onAdLoaded() { // Code to be executed when an ad finishes loading. } override fun onAdOpened() { // Code to be executed when an ad opens an overlay that // covers the screen. } }BannerSnippets.kt AdListener 中每个可重写的方法分别对应着广告生命周期内的一个事件。 可替换的方法 onAdClicked() 记录了广告获得的点击时,系统会调用 onAdClicked() 方法。 onAdClosed() 用户在查看广告的目标网址后返回应用时,系统会调用 onAdClosed() 方法。应用可以使用此方法恢复暂停的 activity,或执行任何其他必要的操作,为用户互动做好准备。如需了解 Android API 演示版应用中的广告监听器方法是如何实现的,请参阅 AdMob AdListener 示例。 onAdFailedToLoad() onAdFailedToLoad() 是唯一包含参数的方法。LoadAdError 类型的错误参数描述了发生的错误。如需了解详情,请参阅“调试广告加载错误”文档。 onAdImpression() 记录了广告获得的展示时,系统会调用 onAdImpression() 方法。 onAdLoaded() 广告加载完成时,系统会执行 onAdLoaded() 方法。例如,如果您想等到确定会有广告加载时,再将 AdView 添加到 activity 或 fragment,就可以使用此方法。 onAdOpened() 广告打开覆盖屏幕的叠加层时,系统会调用 onAdOpened() 方法。 针对视频广告启用硬件加速 为了确保视频广告在横幅广告视图中成功展示,必须启用硬件加速。 硬件加速默认处于启用状态,但有些应用可能会选择将其停用。如果您的应用停用了硬件加速,我们建议您为使用广告的 Activity 类启用硬件加速。 启用硬件加速 如果您的应用在全局启用硬件加速时无法正常运行,您也可以针对个别 activity 启用或停用硬件加速。如需启用或停用硬件加速,您可以在 AndroidManifest.xml 中为 如需详细了解用于控制硬件加速的选项,请参阅硬件加速指南。请注意,如果 activity 停用了硬件加速,则无法针对具体广告视图启用该功能;因此,必须为 activity 本身启用硬件加速。 后续步骤 折叠式横幅广告 折叠式横幅广告最初会以较大的叠加层形式展示,并提供一个可将广告折叠为较小尺寸的按钮。您可以考虑使用这种横幅广告来进一步提升效果。如需了解详情,请参阅折叠式横幅广告。 内嵌自适应横幅广告 与锚定自适应横幅广告相比,内嵌自适应横幅广告更大、更高。这种广告的高度可变,最高可达设备屏幕的高度。对于需要在可滚动内容中放置横幅广告的应用,建议使用内嵌自适应横幅广告,而不是锚定自适应横幅广告。如需了解更多详情,请参阅内嵌自适应横幅广告。 探索其他主题 用户隐私 优化 SDK 初始化和广告加载(Beta 版)