横幅广告

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

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

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

前提条件

始终使用测试广告进行测试

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

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

ca-app-pub-3940256099942544/9214589741

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

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

将 AdView 添加到布局

要展示横幅广告,首先要将 AdView 放置到您希望用于展示广告的 ActivityFragment 的布局中:

Java

private AdSize getAdSize() {
  // Determine the screen width (less decorations) to use for the ad width.
  Display display = getWindowManager().getDefaultDisplay();
  DisplayMetrics outMetrics = new DisplayMetrics();
  display.getMetrics(outMetrics);

  float density = outMetrics.density;

  float adWidthPixels = adContainerView.getWidth();

  // If the ad hasn't been laid out, default to the full screen width.
  if (adWidthPixels == 0) {
    adWidthPixels = outMetrics.widthPixels;
  }

  int adWidth = (int) (adWidthPixels / density);
  return AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, adWidth);
}

private void loadBanner() {
  
  // Create a new ad view.
  AdView adView = new AdView(this);
  adView.setAdSizes(getAdSize());
  adView.setAdUnitId("ca-app-pub-3940256099942544/9214589741");

  // Replace ad container with new ad view.
  adContainerView.removeAllViews();
  adContainerView.addView(adView);

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

Kotlin


// Determine the screen width (less decorations) to use for the ad width.
// If the ad hasn't been laid out, default to the full screen width.
private val adSize: AdSize
  get() {
    val display = windowManager.defaultDisplay
    val outMetrics = DisplayMetrics()
    display.getMetrics(outMetrics)

    val density = outMetrics.density

    var adWidthPixels = binding.adViewContainer.width.toFloat()
    if (adWidthPixels == 0f) {
      adWidthPixels = outMetrics.widthPixels.toFloat()
    }

    val adWidth = (adWidthPixels / density).toInt()
    return AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, adWidth)
  }

private fun loadBanner() {
  
  // Create a new ad view.
  val adView = AdView(this)
  adView.adSizes = adSize
  adView.adUnitId = "ca-app-pub-3940256099942544/9214589741"

  // Create an ad request.
  val adRequest = AdRequest.Builder().build()

  // Start loading the ad in the background.
  adView.loadAd(adRequest)
}

加载广告

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

下例展示了如何通过 ActivityonCreate() 方法加载广告:

Java

private void loadBanner() {
  // Create a new ad view.
  adView = new AdView(this);
  adView.setAdUnitId(AD_UNIT);
  adView.setAdSize(getAdSize());
  
  // Replace ad container with new ad view.
  adContainerView.removeAllViews();
  adContainerView.addView(adView);

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

Kotlin

private fun loadBanner() {
  // This is an ad unit ID for a test ad. Replace with your own banner ad unit ID.
  adView.adUnitId = "/6499/example/banner"
  adView.setAdSize(adSize)
  
  // Create an ad request.
  val adRequest = AdRequest.Builder().build()

  // Start loading the ad in the background.
  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() 方法。应用可以使用此方法恢复暂停的活动,或执行任何其他必要的操作,以做好互动准备。 有关 Android API Demo 应用中广告监听器方法的实现方式,请参阅 AdMob AdListener 示例
onAdFailedToLoad() onAdFailedToLoad() 是唯一包含参数的方法。LoadAdError 类型的错误参数描述了发生的错误。如需了解详情,请参阅调试广告加载错误文档
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

后续步骤

折叠式横幅广告

折叠式横幅广告是一种横幅广告,最初以较大的叠加层形式展示,并带有一个可将广告收起为较小尺寸的按钮。请考虑使用它进一步优化您的性能。如需了解详情,请参阅折叠式横幅广告

内嵌自适应横幅广告

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

浏览其他主题