原生广告

原生广告是通过平台原本就有的界面组件向用户呈现的广告素材资源。这种广告使用您在构建布局时已经采用的同类视图进行展示,而且能以和周围视觉设计相称的形式呈现,让用户有浑然一体的使用体验。从代码编写的角度来说,这意味着当原生广告加载时,您的应用会收到一个包含其素材资源的 NativeAd 对象,然后就由此应用(而不是 SDK)负责展示它们了。

一般而言,要成功植入原生广告,就需要完成两步:通过 SDK 加载广告,然后在您的应用中展示广告内容。此页面主要介绍如何使用 SDK 加载原生广告

前提条件

加载广告

原生广告通过 AdLoader 类加载,该类有自己的 Builder 类,用于在创建过程中进行自定义。应用在构建 AdLoader 的过程中会向其添加监听器,以此方式指定它准备接收哪些类型的原生广告。这样,AdLoader 就会只请求这些类型的广告。

构建 AdLoader

以下代码演示了如何构建可加载统一原生广告的 AdLoader

Java

AdLoader adLoader = new AdLoader.Builder(context, "ca-app-pub-3940256099942544/2247696110")
    .forUnifiedNativeAd(new UnifiedNativeAd.OnUnifiedNativeAdLoadedListener() {
        @Override
        public void onUnifiedNativeAdLoaded(UnifiedNativeAd unifiedNativeAd) {
            // Show the ad.
        }
    })
    .withAdListener(new AdListener() {
        @Override
        public void onAdFailedToLoad(int errorCode) {
            // Handle the failure by logging, altering the UI, and so on.
        }
    })
    .withNativeAdOptions(new NativeAdOptions.Builder()
            // Methods in the NativeAdOptions.Builder class can be
            // used here to specify individual options settings.
            .build())
    .build();

Kotlin

val adLoader = AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
        .forUnifiedNativeAd { ad : UnifiedNativeAd ->
            // Show the ad.
        }
        .withAdListener(object : AdListener() {
            override fun onAdFailedToLoad(errorCode: Int) {
                // Handle the failure by logging, altering the UI, and so on.
            }
        })
        .withNativeAdOptions(NativeAdOptions.Builder()
                // Methods in the NativeAdOptions.Builder class can be
                // used here to specify individual options settings.
                .build())
        .build()

为 UnifiedNativeAd 格式做准备

上例中首先调用的方法负责为 UnifiedNativeAd 格式准备 AdLoader

forUnifiedNativeAd()
调用此方法会将 AdLoader 配置为请求统一原生广告。当广告成功加载后,会调用监听器对象的 onUnifiedNativeAdLoaded() 方法。

AdLoader 发出广告请求后,Google 会选择能使发布商收益最大化的广告,然后将该广告返回。

将 AdListener 与 AdLoader 配合使用

在创建上述 AdLoader 的过程中,withAdListener 函数会设置一个 AdListener

这是一个可选步骤。该方法将 AdListener 作为其唯一参数,当广告生命周期事件发生时,此参数会收到来自 AdLoader 的回调:

Java

.withAdListener(new AdListener() {
    // AdListener callbacks like OnAdFailedToLoad, OnAdOpened, OnAdClicked and
    // so on, can be overridden here.
})

Kotlin

.withAdListener(object : AdListener() {
    // AdListener callbacks like OnAdFailedToLoad, OnAdOpened, OnAdClicked and
    // so on, can be overridden here.
})

AdListener 对象处理原生广告的方式与处理横幅广告和插页式广告的方式之间有一个重要的区别。由于 AdLoader 自己就有因具体格式而异的监听器(即 UnifiedNativeAd.OnUnifiedNativeAdLoadedListener)可在广告加载时使用,因此当原生广告成功加载时,并不会调用 AdListener 中的 onAdLoaded() 方法。

加载广告

构建完 AdLoader 后,就可以使用它来加载广告了。加载广告有 loadAd()loadAds() 两种方法。

loadAd() 方法为单个广告发送请求:

loadAd()
此方法为单个广告发送请求。

Java

adLoader.loadAd(new AdRequest.Builder().build());

Kotlin

adLoader.loadAd(AdRequest.Builder().build())

loadAds() 方法为多个广告(最多 5 个)发送请求:

Java

adLoader.loadAds(new AdRequest.Builder().build(), 3);

Kotlin

adLoader.loadAds(AdRequest.Builder().build(), 3)

这两个方法都将AdRequest对象作为第一个参数。这也是横幅广告和插页式广告所使用的同一个AdRequest类,且您可以使用AdRequest类的方法添加定位信息,其处理方式与其他广告格式一样。

loadAds() 还需要另外一个参数,即 SDK 应尝试为该请求加载的广告数量。此数值最大为 5,而且无法保证 SDK 返回的广告数量一定等于所请求的广告数量。如果调用 loadAds() 后返回了多个广告,则这些广告将互不相同。

调用 loadAd() 后,将对上面定义的监听器方法进行一次回调,以投放原生广告对象或报告错误。

调用 loadAds() 后,将进行多次此类回调(至少一次,但不超过请求的广告数量)。对于请求多个广告的应用,应在其回调实现入代码中调用 AdLoader.isLoading(),以确定是否已完成加载过程。

下例显示了如何在 onUnifiedNativeAdLoaded() 回调中检查 isLoading()

Java

final AdLoader adLoader = new AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
        .forUnifiedNativeAd(new UnifiedNativeAd.OnUnifiedNativeAdLoadedListener() {
    @Override
    public void onUnifiedNativeAdLoaded(UnifiedNativeAd ad) {
        ...
        // some code that displays the ad.
        ...
        if (adLoader.isLoading()) {
            // The AdLoader is still loading ads.
            // Expect more adLoaded or onAdFailedToLoad callbacks.
        } else {
            // The AdLoader has finished loading ads.
        }
    }
}).build();
adLoader.loadAds(new AdRequest.Builder().build(), 3);

Kotlin

lateinit var adLoader: AdLoader
...
adLoader = AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
    .forUnifiedNativeAd {
        ...
        // some code that displays the ad.
        ...
        if (adLoader.isLoading) {
            // The AdLoader is still loading ads.
            // Expect more adLoaded or onAdFailedToLoad callbacks.
        } else {
            // The AdLoader has finished loading ads.
        }
    }.build()
adLoader.loadAds(AdRequest.Builder().build(), 3)

务必用测试广告进行测试

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

对于在 Android 上投放的原生高级广告,加载测试广告最简便的方法就是使用下面的专用测试广告单元 ID:

ca-app-pub-3940256099942544/2247696110

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

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

何时请求广告

展示原生广告的应用可以在实际展示之前请求这些广告。在许多情况下,这是推荐的做法。例如,如果某款应用展示一个商品清单,其中会夹杂一些原生广告,那么该应用就可以加载整个清单中的原生广告,因为它知道一些广告仅在用户滚动浏览视图后才会展示,还有一些可能根本不会展示。

展示 UnifiedNativeAd

加载广告后,剩下的工作就是将其展示给您的用户。请参阅我们的原生高级广告指南,了解具体方法。

发送以下问题的反馈:

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