横幅广告

入门指南中,您了解了如何部署 SDK 和展示测试横幅广告。本指南将详细介绍可以对横幅广告进行的自定义设置。

要了解如何对横幅广告实现这些自定义设置,请下载 Android API Demo 应用。

下载 API Demo

支持的广告格式包括:

尺寸(宽 x 高) 说明 适用设备 AdSize 常量
320x50 标准横幅广告 手机和平板电脑 BANNER
320x100 大型横幅广告 手机和平板电脑 LARGE_BANNER
300x250 IAB 中矩形 手机和平板电脑 MEDIUM_RECTANGLE
468x60 IAB 全尺寸横幅广告 平板电脑 FULL_BANNER
728x90 IAB 页首横幅广告 平板电脑 LEADERBOARD
屏幕宽度 x 32|50|90 智能横幅广告 手机和平板电脑 SMART_BANNER

SDK 会请求系统传回请求方 PublisherAdView 实例化时所用的尺寸。如果设备的屏幕大小不足以展示广告,则不会展示任何内容。

智能横幅广告

智能横幅广告是一种广告单元,可在任意尺寸的各种设备上展示与屏幕等宽的横幅广告,无论设备屏幕是横向还是纵向都没问题。智能横幅广告可“智能”地检测手机处于当前屏幕方向时的宽度,并据此设置尺寸合适的广告视图,从而解决不同设备间屏幕尺寸不同的问题。

智能横幅广告可实现三种广告高度(以“与密度无关的像素 [dp]”为单位):

  • 32:设备屏幕高度 <= 400
  • 50400 < 设备屏幕高度 <= 720
  • 90:设备屏幕高度 > 720

对于手机等某些设备来说,设备的高度会因屏幕方向而异。通常情况下,当手机屏幕为纵向时,智能横幅广告尺寸为“完整宽度 x 50dp”;当手机屏幕为横向时,广告尺寸为“完整宽度 x 32dp”;在平板电脑上,不论屏幕方向为纵向还是横向,广告尺寸均为“完整宽度 x 90dp”。

当图片广告不足以占据所分配的整个空间时,我们会将图片居中放置,然后填充两侧剩余的空间。

要使用智能横幅广告,请为广告尺寸指定常量 SMART_BANNER

PublisherAdView adView = new PublisherAdView(this);
adView.setAdSizes(AdSize.SMART_BANNER);

自定义广告尺寸

除了标准 AdMob 广告单元之外,DFP 广告管理系统(以下简称 DFP)允许您在应用中投放任意尺寸的广告单元。为广告请求设定的广告尺寸(宽度、高度)必须与应用中所展示的广告视图(下例中的 PublisherAdView)的尺寸相匹配。

示例:

// Define custom AdSize of 250x250 for PublisherAdView

AdSize customAdSize = new AdSize(250, 250);
PublisherAdView adView = new PublisherAdView(this);
adView.setAdSizes(customAdSize);

有关 Android API Demo 应用中自定义广告尺寸的实现方式,请参阅 DFP 多广告尺寸示例

多广告尺寸

DFP 允许您指定可能适合投放到 PublisherAdView 的多个广告尺寸。在 SDK 中实现此功能之前,请创建一个订单项,定位到关联了多个不同尺寸广告素材的同一广告单元。

在您的应用中,只需将多个 AdSize 参数传递到 setAdSizes 即可:

PublisherAdView adView = new PublisherAdView(this);
adView.setAdSizes(AdSize.BANNER, new AdSize(120, 20), new AdSize(250, 250));

如果 PublisherAdView 在刷新时改变了尺寸,您的布局应该能够自动适应新的尺寸。

只需使用新的尺寸列表调用 setAdSizes,即可在应用中的任意位置更改支持的广告尺寸。

// Drop support for 120x20 ad size.
adView.setAdSizes(new AdSize(250, 250), AdSize.BANNER);

PublisherAdView 将默认采用传入第一个参数的尺寸,直到返回下一个广告。

有关 Android API Demo 应用中多广告尺寸的实现方式,请参阅 DFP 多广告尺寸示例

手动展示次数统计

如果您针对应在何时记录展示次数设置了特殊条件,则可以手动向 DFP 发送展示 ping。为此,请在加载广告之前为手动展示启用 PublisherAdRequest

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

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

PublisherAdView.recordManualImpression();

应用事件

借助应用事件,您可以在制作广告时加入向应用代码发送消息的功能,以便应用基于这些消息进行操作。

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

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

当广告中发生应用事件时,系统会调用 void onAppEvent(String name, String info)

您的活动或任何其他对象都可以实现此接口:

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

public class BannerExample extends Activity implements AppEventListener {
}

然后传递给 PublisherAdView

adView.setAppEventListener(this);

下面的示例显示了如何根据带颜色名称的应用事件更改应用的背景颜色:

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

另外,下面是向监听器发送颜色应用事件消息的相应广告素材:

<html>
<head>
  <script src="//media.admob.com/api/v1/google_mobile_app_ads.js"></script>
  <script>
    // Send a color=green event when ad loads.
    admob.events.dispatchAppEvent("color", "green");

    handleClick = 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" onClick="handleClick()">Carpe diem!</div>
</body>
</html>

有关 Android API Demo 应用中应用事件的实现方式,请参阅 DFP 应用事件示例

广告生命周期事件回调

您可以选择跟踪请求失败或“点击”等广告生命周期事件,方法是向 PublisherAdView.setAdListener 传递一个对象来扩展 com.google.android.gms.ads.AdListener

public abstract class AdListener {
  public void onAdLoaded();
  public void onAdFailedToLoad(int errorCode);
  public void onAdOpened();
  public void onAdClosed();
  public void onAdLeftApplication();
}

您可以单独定义一个类来扩展 AdListener,也可以选择内嵌 AdListener 对象:

adView.setAdListener(new AdListener() {
  @Override
  public void onAdOpened() {
    // Save app state before going to the ad overlay.
  }
});

AdListener 为其所有广告生命周期事件都提供了默认的空实现方案。您只需覆盖您要实现的广告事件即可。

public void onAdLoaded()
在收到广告时调用。
public void onAdFailedToLoad(int errorCode)

在广告请求失败时调用。通常采用以下某一错误代码:

  • AdRequest.ERROR_CODE_INTERNAL_ERROR
  • AdRequest.ERROR_CODE_INVALID_REQUEST
  • AdRequest.ERROR_CODE_NETWORK_ERROR
  • AdRequest.ERROR_CODE_NO_FILL
public void onAdOpened()

在广告打开覆盖屏幕的叠加层时调用。

public void onAdClosed()

在用户点击广告后即将返回应用时调用。

public void onAdLeftApplication()

在广告退出应用(如转至浏览器)时调用。

有关 Android API Demo 应用中广告监听器方法的实现方式,请参阅广告监听器示例

后续操作

发送以下问题的反馈:

此网页
SDK for DFP Users on Android
需要帮助?请访问我们的支持页面