横幅广告

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

本指南介绍了如何将 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)
    }
}

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

广告事件

要进一步自定义您的广告行为,您可以在广告生命周期内加入许多事件,如加载、打开、关闭等等。您可以通过 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 onAdClicked() {
        // Code to be executed when the user clicks on an ad.
    }

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

    @Override
    public void onAdClosed() {
        // Code to be executed 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 onAdClicked() {
        // Code to be executed when the user clicks on an ad.
    }

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

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

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

可替换的方法
onAdLoaded() 广告加载完成后,系统会执行 onAdLoaded() 方法。例如,如果您想将为 Activity 或 Fragment 添加 AdView 的操作推迟到您确定广告会加载时再执行,就可以通过此方法做到。
onAdFailedToLoad() onAdFailedToLoad() 是唯一包含参数的方法。errorCode 参数用于指明发生的是何种类型的失败。这些可能的类型值在 AdRequest 类中以常量的形式指定:
  • ERROR_CODE_INTERNAL_ERROR - 内部出现问题;例如,收到广告服务器的无效响应。
  • ERROR_CODE_INVALID_REQUEST - 广告请求无效;例如,广告单元 ID 不正确。
  • ERROR_CODE_NETWORK_ERROR - 由于网络连接问题,广告请求失败。
  • ERROR_CODE_NO_FILL - 广告请求成功,但由于缺少广告资源,未返回广告。
onAdOpened() 用户点按广告时,系统会调用此方法。
onAdLeftApplication() 此方法在 onAdOpened() 之后调用,具体是在用户点击打开其他应用(例如 Google Play),从而在后台运行当前应用时调用。
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 自适应高度 自适应横幅广告 手机和平板电脑
屏幕宽度 x 32|50|90 智能横幅广告 手机和平板电脑 SMART_BANNER
详细了解自适应横幅广告(旨在取代智能横幅广告)。

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

Java

AdSize adSize = new AdSize(300, 50);

Kotlin

val adSize = AdSize(300, 50)

其他资源

GitHub 上的示例

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

  • 高级功能演示:Java | Kotlin

  • Banner RecyclerView 示例应用:Java

“Mobile Ads Garage”视频教程

成功案例