横幅广告

横幅广告会占据应用布局中的一处位置,要么是设备屏幕的顶部,要么是底部。用户与应用互动时,这类广告会停留在屏幕上,并且可在一段时间后自动刷新。如果您刚开始接触移动广告,建议从横幅广告着手。 案例研究

本指南介绍了如何将AdMob 横幅广告植入到 Android 应用中。除了提供代码段和操作说明之外,本指南还介绍了如何正确地设置横幅广告的尺寸,并给出了其他资源的链接。

前提条件

向布局中添加 AdView

要展示横幅广告,首先要将 AdView 放置到您希望用于展示广告的 ActivityFragment 的布局中。最简单的方法是向相应的 XML 布局文件添加一个。以下是展示 Activity 的 AdView 的示例:

# main_activity.xml
<com.google.android.gms.ads.AdView
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    android:id="@+id/adView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_alignParentBottom="true"
    ads:adSize="BANNER"
    ads:adUnitId="ca-app-pub-3940256099942544/6300978111">
</com.google.android.gms.ads.AdView>

请注意以下必需的属性:

  • ads:adSize:将此设置设为要使用的广告尺寸。如果您不想使用常量定义的标准尺寸,可以改为设置自定义尺寸。如需了解详情,请参阅“横幅尺寸”部分

  • ads:adUnitId:将此值设为您为应用中将展示广告的广告单元赋予的唯一标识符。如果您要在不同的 activity 中展示横幅广告,则其中每个都需要一个广告单元。

您也可以以编程方式创建 AdView

Java

AdView adView = new AdView(this);

adView.setAdSize(AdSize.BANNER);

adView.setAdUnitId("ca-app-pub-3940256099942544/6300978111");
// TODO: Add adView to your view hierarchy.

Kotlin

val adView = AdView(this)

adView.adSize = AdSize.BANNER

adView.adUnitId = "ca-app-pub-3940256099942544/6300978111"
// TODO: Add adView to your view hierarchy.

务必用测试广告进行测试

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

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

ca-app-pub-3940256099942544/6300978111

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

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

加载广告

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

以下示例展示了如何在 ActivityonCreate() 方法中加载广告:

MainActivity(节选)

Java

package ...

import ...
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;

public class MainActivity extends AppCompatActivity {
    private AdView mAdView;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        MobileAds.initialize(this, new OnInitializationCompleteListener() {
            @Override
            public void onInitializationComplete(InitializationStatus initializationStatus) {
            }
        });

        mAdView = findViewById(R.id.adView);
        AdRequest adRequest = new AdRequest.Builder().build();
        mAdView.loadAd(adRequest);
    }
}

Kotlin

package ...

import ...
import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.AdView

class MainActivity : AppCompatActivity() {

    lateinit var mAdView : AdView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        MobileAds.initialize(this) {}

        mAdView = findViewById(R.id.adView)
        val adRequest = AdRequest.Builder().build()
        mAdView.loadAd(adRequest)
    }
}

如果您的广告加载失败,只要已为广告单元配置了刷新功能,就无需明确请求再次加载;Google 移动广告 SDK 会按照您在AdMob 网页界面中指定的任何刷新频率进行设置。如果您尚未启用刷新,则需要发出新的请求。

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

广告事件

若要进一步自定义广告的行为,您可以在广告生命周期内加入许多事件,如加载、打开、关闭等等。您可以通过 AdListener 类监听这些事件。

如需将 AdListenerAdView 结合使用,请调用 setAdListener() 方法:

Java

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

mAdView.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() 方法。

您用来展示广告的容器的尺寸必须至少与横幅广告一样大。如果容器有内边距,这实际上会减小容器的大小。如果容器无法容纳横幅广告,则横幅广告不会展示,并且您的日志中会显示以下警告:

W/Ads: Not enough space to show ad. Needs 320x50 dp, but only has 288x495 dp.

下表列出了标准的横幅广告尺寸。

尺寸(宽 x 高,以 dp 为单位) 说明 可用性 AdSize 常量
320x50 横幅 手机和平板电脑 BANNER
320x100 大型横幅广告 手机和平板电脑 LARGE_BANNER
300x250 IAB 中矩形 手机和平板电脑 MEDIUM_RECTANGLE
468x60 IAB 全尺寸横幅 平板电脑 FULL_BANNER
728x90 IAB 页首横幅广告 平板电脑 LEADERBOARD
提供的宽度 x 自适应高度 自适应横幅广告 手机和平板电脑 不适用
屏幕宽度 x 32|50|90 智能横幅 手机和平板电脑 SMART_BANNER

如需定义自定义横幅广告尺寸,请设置所需的 AdSize,如下所示:

Java

AdSize adSize = new AdSize(300, 50);

Kotlin

val adSize = AdSize(300, 50)

视频广告的硬件加速

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

硬件加速默认处于启用状态,但有些应用可能会选择将其停用。如果您的应用出现这种情况,我们建议为使用广告的 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

  • 高级功能演示: Java | Kotlin

  • 横幅广告 RecyclerView 示例应用: Java

“Mobile Ads Garage”视频教程

成功案例

后续步骤

请浏览以下主题: