横幅广告

横幅广告是在应用布局中占据一处位置的矩形图片或文字广告。用户与应用互动时,这类广告会停留在屏幕上,并且可在一段时间后自动刷新。如果您刚开始接触移动广告,建议从横幅广告着手。

本指南向您介绍如何将AdMob横幅广告集成到 Android 应用中。除了代码段和说明之外,本指南还包含有关如何正确调整横幅广告尺寸的信息以及其他资源的链接。

前提条件

向布局中添加AdView

要展示横幅广告,首先请将AdView放置到要展示该广告的 ActivityFragment 的布局中。最简单的放置方法是将其添加到相应的 XML 布局文件中。以下示例在 Activity 的底部显示了AdView

main_activity.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        android:paddingBottom="@dimen/activity_vertical_margin"
        tools:context=".MainActivity">

        <TextView android:text="@string/hello_world"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

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

</RelativeLayout>

请注意设置以下必需属性:

  • ads:adSize - 将此属性设置为要使用的广告尺寸。如果您不想使用该常量定义的标准尺寸,可改为设置一个自定义尺寸。有关详情,请参阅下面的“横幅广告尺寸”部分
  • ads:adUnitId - 将此属性设置为为您应用中展示广告的广告单元指定的唯一标识符。如果您要在不同的活动中展示横幅广告,则其中每个都需要一个广告单元。

另外,您也可以通过编程方式创建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,
            "ca-app-pub-3940256099942544~3347511713");

        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,
            "ca-app-pub-3940256099942544~3347511713")

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

就这么简单!您的应用现已可以开始展示横幅广告了。

广告事件

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

要将 AdListener 用于AdView,只需调用 setAdListener() 方法:

Java

mAdView.setAdListener(new AdListener() {
    @Override
    public void onAdLoaded() {
        // Code to be executed when an ad finishes loading.
    }

    @Override
    public void onAdFailedToLoad(int errorCode) {
        // Code to be executed when an ad request fails.
    }

    @Override
    public void onAdOpened() {
        // Code to be executed when an ad opens an overlay that
        // covers the screen.
    }

    @Override
    public void onAdLeftApplication() {
        // Code to be executed when the user has left the app.
    }

    @Override
    public void onAdClosed() {
        // Code to be executed when when the user is about to return
        // to the app after tapping on an ad.
    }
});

Kotlin

mAdView.adListener = object: AdListener() {
    override fun onAdLoaded() {
        // Code to be executed when an ad finishes loading.
    }

    override fun onAdFailedToLoad(errorCode : Int) {
        // Code to be executed when an ad request fails.
    }

    override fun onAdOpened() {
        // Code to be executed when an ad opens an overlay that
        // covers the screen.
    }

    override fun onAdLeftApplication() {
        // Code to be executed when the user has left the app.
    }

    override fun onAdClosed() {
        // Code to be executed when when the user is about to return
        // to the app after tapping on an ad.
    }
}

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

可替换的方法
onAdLoaded() 广告加载完成后,系统会执行 onAdLoaded() 方法。如果您想延迟为活动或片段添加AdView的操作(例如,延迟到您确定广告会加载时),可以在此处执行此操作。
onAdFailedToLoad() onAdFailedToLoad() 是唯一包含参数的方法。errorCode 参数会指明发生了何种类型的失败。系统将这些可能的类型值定义为AdRequest类中的如下常量:
  • ERROR_CODE_INTERNAL_ERROR - 内部出现问题;例如,收到广告服务器的无效响应。
  • ERROR_CODE_INVALID_REQUEST - 广告请求无效;例如,广告单元 ID 不正确。
  • ERROR_CODE_NETWORK_ERROR - 由于网络连接问题,广告请求失败。
  • ERROR_CODE_NO_FILL - 广告请求成功,但由于缺少广告资源,未返回广告。
onAdOpened() 此方法会在用户点按广告时调用。
onAdLeftApplication() 此方法会在用户点击打开其他应用(例如,Google Play)时于 onAdOpened() 之后调用,从而在后台运行当前应用。
onAdClosed() 在用户查看广告的目标网址后返回应用时,会调用此方法。应用可以使用此方法恢复暂停的活动,或执行任何其他必要的操作,以做好互动准备。 有关 Android API Demo 应用中广告监听器方法的实现方式,请参阅 AdMob AdListener 示例

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

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

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

Java

AdSize adSize = new AdSize(300, 50);

Kotlin

val adSize = AdSize(300, 50)

智能横幅广告

作为一种广告单元,智能横幅广告可在任何尺寸、任何方向的各种设备屏幕上展示与屏幕等宽的横幅广告。智能横幅广告会“智能”地检测设备当前屏幕方向的宽度,并据此设置与之等宽的广告视图,从而解决不同设备间屏幕尺寸不同的问题。

智能横幅广告可实现三种广告高度:

广告高度 屏幕高度
32 dp ≤ 400 dp
50 dp > 400 dp 且 ≤ 720 dp
90 dp > 720 dp

通常情况下,在手机上,当屏幕为纵向时,智能横幅广告高度为 50dp;当屏幕为横向时,广告高度为 32dp。在平板电脑上,不论屏幕是纵向还是横向,广告高度通常均为 90 dp。

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

要在 XML 中使用智能横幅广告,请为广告尺寸指定常量 SMART_BANNER,并将 AdView 的宽度设置为 match_parent。例如:

<com.google.android.gms.ads.AdView
  xmlns:ads="http://schemas.android.com/apk/res-auto"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  ads:adSize="SMART_BANNER"
  ads:adUnitId="ca-app-pub-3940256099942544/6300978111">
</com.google.android.gms.ads.AdView>

要以编程方式制作智能横幅广告,请使用 AdSize.SMART_BANNER 作为广告尺寸:

Java

AdView adView = new AdView(this);
adView.setAdSize(AdSize.SMART_BANNER);

Kotlin

val adView = AdView(this)
adView.adSize = AdSize.SMART_BANNER

其他资源

GitHub 上的示例

  • 横幅广告的最小实现示例:Java | Kotlin

  • 高级功能演示:Java | Kotlin

  • Banner RecyclerView 示例应用:Java

“Mobile Ads Garage”视频教程

后续步骤

发送以下问题的反馈:

此网页
需要帮助?请访问我们的支持页面