横幅广告

横幅广告是占据应用部分布局的矩形广告。他们 当用户与应用互动时停留在屏幕上(锚定在 或在用户滚动屏幕时内嵌到屏幕的顶部或底部。横幅 广告可以在一段时间后自动刷新。查看横幅广告概览

本指南介绍了如何开始使用锚定广告 自适应横幅广告 该功能可针对每种设备优化广告尺寸 指定广告宽度

锚定自适应横幅广告是宽高比固定的广告,而非常规的 固定尺寸广告。宽高比类似于业界标准的 320x50。一次 您指定了可用的全宽,系统会为您返回 高度。无论从哪个请求发送, 广告,并且当广告展示时,周围的视图无需移动 刷新。

前提条件

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

在构建和测试应用时,请务必使用测试广告, 实际投放的广告。否则,可能会导致您的账号被暂停。

要加载测试广告,最简便的方法就是使用我们的专用测试广告单元 ID Android 横幅广告:

/6499/example/adaptive-banner

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

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

将 AdManagerAdView 添加到布局中

要展示横幅广告,首先要将 AdManagerAdView 放置 在您想要显示内容的 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.
  AdManagerAdView adView = new AdManagerAdView(this);
  adView.setAdSizes(getAdSize());
  adView.setAdUnitId("/6499/example/adaptive-banner");

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

  // Start loading the ad in the background.
  AdManagerAdRequest adRequest = new AdManagerAdRequest.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 = AdManagerAdView(this)
  adView.adSizes = adSize
  adView.adUnitId = "/6499/example/adaptive-banner"

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

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

加载广告

AdManagerAdView 准备就绪之后,下一步是 加载广告。您可以使用 loadAd() 方法。AdManagerAdView需要 AdManagerAdRequest 参数,其中包含运行时信息,如定位信息、 发出一个广告请求。

下例显示了如何通过onCreate() Activity:

Java

private void loadBanner() {
  // Create a new ad view.
  adView = new AdManagerAdView(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.
  AdManagerAdRequest adRequest = new AdManagerAdRequest.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 = AdManagerAdRequest.Builder().build()

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

如果您的广告加载失败,您无需再明确请求另一个广告,因为 但前提是您已将广告单元配置为刷新Google 移动广告 SDK 采用您在 Ad Manager 中指定的任何刷新率 网页界面如果您尚未启用刷新,则需要 请求。

大功告成!您的应用现在就可以展示横幅广告了。

广告事件

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

Java

AdManagerAdView.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

AdManagerAdView.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() 方法。 目标网址应用可以使用此方法恢复暂停的活动,或 执行任何其他必要的操作,以做好互动准备。
onAdFailedToLoad() onAdFailedToLoad() 是唯一包含参数的方法。类型的错误参数 LoadAdError 描述了发生了什么错误。如需更多信息 有关调试广告加载错误,请参阅调试广告加载错误 文档
onAdImpression() onAdImpression() 方法。
onAdLoaded() onAdLoaded() 方法。如果您想推迟 添加 AdManagerAdView 直到确定广告会加载为止 您可以在此处执行此操作。
onAdOpened() onAdOpened() 方法。

适用于视频广告的硬件加速

要想让视频广告在横幅广告视图中成功展示,硬件 加速必须 。

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

启用硬件加速

如果您的应用在启用硬件加速时无法正常运行 也可以针对单个活动进行控制要启用或 停用硬件加速,则可以使用 android:hardwareAccelerated 属性 <application><activity> AndroidManifest.xml 中的一些元素。以下示例将启用硬件 加速,但对一个 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 本身必须启用硬件加速。

手动统计展示

手动展示次数统计仅适用于直销型和自家广告系列 包含直接在 Ad Manager 中投放的广告素材的广告系列。不应 用于补余广告或第三方广告联盟广告。有关详情,请参阅计数 展示次数和点击次数

如果您有特殊的广告请求,可以手动向 Ad Manager 发送展示 ping 应记录展示的条件。为此,请启用 AdManagerAdRequest(适用于加载广告之前的手动展示次数):

Java

AdManagerAdRequest adRequest = new AdManagerAdRequest.Builder()
    .setManualImpressionsEnabled(true)
    .build();

Kotlin

val adRequest = AdManagerAdRequest.Builder()
    .setManualImpressionsEnabled(true)
    .build()

当您确定某个广告已成功返回并展示在屏幕上时 您可以手动记录展示次数:

Java

{ ad_view }.recordManualImpression();

Kotlin

AdManagerAdView.recordManualImpression()

应用事件

借助应用事件,您可以制作能够向应用代码发送消息的广告。应用 然后根据这些消息采取相应措施

您可以使用 AppEventListener 监听 Ad Manager 所特有的应用事件。 这些事件可能会发生在广告生命周期内的任何时间,甚至是在 调用 onAdLoaded()

Java

public interface AppEventListener {
  void onAppEvent(String name, String info);
}

Kotlin

interface AppEventListener {
    fun onAppEvent(name: String, info: String)
}

当发生应用事件时,系统会调用 void onAppEvent(String name, String info) 。此接口可由您的 activity 或任何其他应用实现 对象:

Java

import com.google.android.gms.ads.admanager.*;

public class BannerExample extends Activity implements AppEventListener {
}

Kotlin

import com.google.android.gms.ads.admanager.*

class BannerExample : Activity(), AppEventListener {
}

然后传递给 AdManagerAdView

Java

AdManagerAdView.setAppEventListener(this);

Kotlin

AdManagerAdView.appEventListener = this

以下示例展示了如何更改应用的背景颜色 具体取决于具有颜色名称的应用事件:

Java

@Override
public void onAppEvent(String name, String info) {
  if ("color".equals(name)) {
    if ("green".equals(info)) {
      // Set background color to green.
    } else if ("blue".equals(info)) {
      // Set background color to blue.
    } else {
      // Set background color to black.
    }
  }
}

Kotlin

override fun onAppEvent(name: String?, info: String?) {
    if (name == "color") {
        when (info) {
            "green" -> {
                // Set background color to green.
            }
            "blue" -> {
                // Set background color to blue.
            }
            else -> {
                // Set background color to black.
            }
        }
    }
}

另外,以下是向 监听器:

<html>
<head>
  <script src="//www.gstatic.com/afma/api/v1/google_mobile_app_ads.js"></script>
  <script>
    document.addEventListener("DOMContentLoaded", function() {
      // Send a color=green event when ad loads.
      admob.events.dispatchAppEvent("color", "green");

      document.getElementById("ad").addEventListener("click", function() {
        // Send a color=blue event when ad is clicked.
        admob.events.dispatchAppEvent("color", "blue");
      });
    });
  </script>
  <style>
    #ad {
      width: 320px;
      height: 50px;
      top: 0px;
      left: 0px;
      font-size: 24pt;
      font-weight: bold;
      position: absolute;
      background: black;
      color: white;
      text-align: center;
    }
  </style>
</head>
<body>
  <div id="ad">Carpe diem!</div>
</body>
</html>

有关应用事件的实现方式,请参阅 Ad Manager 应用事件示例 API 演示版应用。

Java Kotlin

其他资源

GitHub 上的示例

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

后续步骤

折叠式横幅广告

折叠式横幅广告是一种横幅广告,初始展示时采用较大的 叠加层,以及一个可将广告合拢为较小尺寸的按钮。考虑使用 进一步优化广告效果如需了解详情,请参阅折叠式横幅广告

内嵌自适应横幅广告

与锚定自适应横幅广告相比,内嵌自适应横幅广告是一种更大、更高的横幅广告 横幅广告。它们的高度可以调整,可以达到设备屏幕的高度。 对于以下情况,我们建议采用内嵌自适应横幅广告(而非锚定自适应横幅广告) 在可滚动内容中投放横幅广告的应用。请参阅内联自适应 横幅

浏览其他主题