横幅广告

横幅广告是占据应用部分布局的矩形广告。当用户与应用互动时,横幅广告会停留在屏幕上(锚定在屏幕顶部或底部),或在用户滚动时内嵌于内容中。横幅广告可在一段时间后自动刷新。如需了解详情,请参阅横幅广告概览

本指南介绍了如何开始使用锚定型自适应横幅广告。这种广告会使用您指定的广告宽度针对每台设备优化广告尺寸,从而最大限度地提升广告效果。

锚定型自适应横幅广告是固定宽高比广告,而不是常规的固定尺寸广告。宽高比与 320x50 行业标准相似。您指定可用的全宽后,系统会返回与该宽度相匹配的最佳高度的广告。来自同一设备的请求中的最佳高度不会发生变化,并且在广告刷新时,周围的视图无需移动。

前提条件

务必用测试广告进行测试

在构建和测试应用时,请确保使用的是测试广告,而不是实际投放的广告。否则,可能会导致您的账号被中止。

对于 Android 横幅广告,加载测试广告最简便的方法就是使用下面的专用测试广告单元 ID:

ca-app-pub-3940256099942544/9214589741

该测试广告单元 ID 已经过专门配置,可确保每个请求返回的都是测试广告。您可以在自己应用的编码、测试和调试过程中使用该测试广告单元 ID。只需确保您会在发布应用前用自己的广告单元 ID 替换该测试广告单元 ID 即可。

如需详细了解移动广告 SDK 的测试广告如何运作,请参阅测试广告

将 AdView 添加到布局中

您可以通过确定广告尺寸来制作横幅。请完成以下步骤:

  1. 创建全宽锚定自适应广告尺寸:

    Java

    // Get the ad size with screen width.
    public AdSize getAdSize() {
      DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
      int adWidthPixels = displayMetrics.widthPixels;
    
      if (VERSION.SDK_INT >= VERSION_CODES.R) {
        WindowMetrics windowMetrics = this.getWindowManager().getCurrentWindowMetrics();
        adWidthPixels = windowMetrics.getBounds().width();
      }
    
      float density = displayMetrics.density;
      int adWidth = (int) (adWidthPixels / density);
      return AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, adWidth);
    }
    

    Kotlin

    // Get the ad size with screen width.
    private val adSize: AdSize
      get() {
        val displayMetrics = resources.displayMetrics
        val adWidthPixels =
          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
            val windowMetrics: WindowMetrics = this.windowManager.currentWindowMetrics
            windowMetrics.bounds.width()
          } else {
            displayMetrics.widthPixels
          }
        val density = displayMetrics.density
        val adWidth = (adWidthPixels / density).toInt()
        return AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, adWidth)
      }
    
    
  2. 使用广告尺寸创建 AdView,并将其添加到应用的布局中:

    Java

    // Create a new ad view.
    adView = new AdView(this);
    adView.setAdUnitId(AD_UNIT_ID);
    adView.setAdSize(getAdSize());
    
    // Replace ad container with new ad view.
    adContainerView.removeAllViews();
    adContainerView.addView(adView);
    

    Kotlin

    // Create a new ad view.
    val adView = AdView(this)
    adView.adUnitId = AD_UNIT_ID
    adView.setAdSize(adSize)
    this.adView = adView
    
    // Replace ad container with new ad view.
    binding.adViewContainer.removeAllViews()
    binding.adViewContainer.addView(adView)
    

加载广告

AdView 放置好后,下一步是加载广告。广告加载是使用 AdView 类中的 loadAd() 方法完成的。此方法需要一个 AdRequest 参数,该参数中包含关于单个广告请求的运行时信息(如定位信息)。

以下示例展示了如何加载广告:

Java

// Start loading the ad in the background.
AdRequest adRequest = new AdRequest.Builder().build();
adView.loadAd(adRequest);

Kotlin

// Start loading the ad in the background.
val adRequest = AdRequest.Builder().build()
adView.loadAd(adRequest)

如果成功,您的应用就可以展示横幅广告了。

刷新广告

如果您已将广告单元配置为定期刷新,则在广告加载失败时无需请求其他广告。Google 移动广告 SDK 会按照您在 AdMob 界面中指定的频率进行刷新。如果您尚未启用刷新,请发出新的请求。如需详细了解广告单元刷新(例如设置刷新率),请参阅为横幅广告使用自动刷新功能

广告事件

您可以监听广告生命周期中的多种事件,包括加载、广告展示和点击,以及广告打开和关闭事件。建议在加载横幅之前设置回调。

Java

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(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.
    }
});

Kotlin

adView.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.
    }
}

AdListener 中每种可替换的方法均对应广告生命周期内的一个事件。

可替换的方法
onAdClicked() 系统为广告记录点击次数时,会调用 onAdClicked() 方法。
onAdClosed() 用户查看了广告的目标网址并返回应用时,系统会调用 onAdClosed() 方法。应用可以使用此方法恢复暂停的 activity,或执行任何其他必要的操作,以做好互动准备。 如需了解 Android API Demo 应用中的广告监听器方法是如何实现的,请参阅 AdMob AdListener 示例
onAdFailedToLoad() onAdFailedToLoad() 是唯一包含参数的方法。类型为 LoadAdError 的 error 参数用于描述发生了什么错误。如需了解详情,请参阅“调试广告加载错误”文档
onAdImpression() 系统为广告记录一次展示时,会调用 onAdImpression() 方法。
onAdLoaded() 广告加载完成后,系统会执行 onAdLoaded() 方法。如果您想推迟给 activity 或 fragment 添加 AdView 的操作,例如推迟到您确定广告会加载时,可以在此处进行。
onAdOpened() 广告打开覆盖屏幕的叠加层时,系统会调用 onAdOpened() 方法。

针对视频广告启用硬件加速

为了确保视频广告在横幅广告视图中成功展示,必须启用硬件加速

硬件加速默认处于启用状态,但有些应用可能会选择将其停用。如果您的应用停用了硬件加速,我们建议您为使用广告的 Activity 类启用硬件加速。

启用硬件加速

如果您的应用在全局级别启用硬件加速时无法正常运行,您也可以针对个别 activity 启用或停用硬件加速。如需启用或停用硬件加速,您可以为 AndroidManifest.xml 中的 <application><activity> 元素使用 android:hardwareAccelerated 属性。以下示例展示了如何为整个应用启用硬件加速,但为一个 activity 停用硬件加速:

<application android:hardwareAccelerated="true">
    <!-- For activities that use ads, hardwareAcceleration should be true. -->
    <activity android:hardwareAccelerated="true" />
    <!-- For activities that don't use ads, hardwareAcceleration can be false. -->
    <activity android:hardwareAccelerated="false" />
</application>

如需详细了解用于控制硬件加速的选项,请参阅硬件加速指南。请注意,如果针对 activity 停用了硬件加速,那么将无法针对单个广告视图启用,因此必须针对 activity 本身启用硬件加速。

其他资源

GitHub 上的示例

  • 锚定自适应横幅广告示例:Java | Kotlin

后续步骤

折叠式横幅广告

可折叠的横幅广告是一种横幅广告,最初以较大的叠加层形式呈现,并带有一个可将广告收起为较小尺寸的按钮。不妨考虑使用该工具进一步优化效果。如需了解详情,请参阅折叠式横幅广告

内嵌自适应横幅广告

与锚定自适应横幅广告相比,内嵌自适应横幅广告是一种更大、更高的横幅广告。这种广告的高度可调整,最高可与设备屏幕一样高。对于在可滚动内容中放置横幅广告的应用,建议使用内嵌自适应横幅广告,而不是锚定自适应横幅广告。如需了解详情,请参阅内嵌自适应横幅广告

浏览其他主题