原生广告

原生广告是通过界面组件向用户呈现的广告素材资源 都是平台原生的它们使用相同类型的视图 您已经在构建布局,而且可以设置格式 应用的视觉设计

加载原生广告时,您的应用会收到一个包含其素材资源的广告对象, 然后应用(而不是 Google 移动广告 SDK) 来显示它们

一般来说,要成功植入原生广告,需要完成两部分工作: 使用 SDK 加载广告,然后在您的应用中展示广告内容。

本页介绍了如何使用 SDK 加载 原生广告。 提示:如需详细了解原生广告,请参阅我们的原生广告 playbook

您还可以查看客户成功案例: 案例研究 1案例研究 2

前提条件

始终使用测试广告进行测试

在构建和测试应用时,请务必使用测试广告 实际投放的广告。

加载测试广告最简便的方法就是使用我们的专用测试广告单元 ID 适用于 Android 上的原生广告:

ca-app-pub-3940256099942544/2247696110

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

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

加载广告

原生广告使用 AdLoader 类, 它有自己的 Builder 类,以便在创建过程中对其进行自定义。通过将监听器添加到 AdLoader 在构建时,应用会指定它准备投放哪些类型的原生广告 接收。然后,AdLoader 会仅请求这些类型。

构建 AdLoader

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

Java

AdLoader adLoader = new AdLoader.Builder(context, "ca-app-pub-3940256099942544/2247696110")
    .forNativeAd(new NativeAd.OnNativeAdLoadedListener() {
        @Override
        public void onNativeAdLoaded(NativeAd nativeAd) {
            // Show the ad.
        }
    })
    .withAdListener(new AdListener() {
        @Override
        public void onAdFailedToLoad(LoadAdError adError) {
            // 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}")
    .forNativeAd { ad : NativeAd ->
        // Show the ad.
    }
    .withAdListener(object : AdListener() {
        override fun onAdFailedToLoad(adError: LoadAdError) {
            // Handle the failure.
        }
    })
    .withNativeAdOptions(NativeAdOptions.Builder()
            // Methods in the NativeAdOptions.Builder class can be
            // used here to specify individual options settings.
            .build())
    .build()

通过 forNativeAd() 方法负责为 NativeAd 格式准备 AdLoader。 当广告成功加载后,监听器对象的 onNativeAdLoaded() 方法。

使用 AdLoader 设置 AdListener(可选)

创建 AdLoader 时, withAdListener 函数会设置一个 AdListener,适用于 加载器。该方法将 AdListener 作为其唯一参数,由后者接收 从 AdLoader 调用回调函数:

Java

.withAdListener(new AdListener() {
    // AdListener callbacks can be overridden here.
})

Kotlin

.withAdListener(object : AdListener() {
    // AdListener callbacks can be overridden here.
})

提出广告请求

构建完 AdLoader 后,就可以使用它来请求广告了。 可以通过两种方法执行这些操作:loadAd()loadAds()

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 返回的广告数量一定等于所请求的广告数量。

尽管来自 Google 服务器的广告来自不同的平台, 预留广告资源或第三方买方并不一定是唯一的

如果您使用中介,请勿使用 loadAds() 方法,作为对 目前多个原生广告无法用于 来配置中介功能

回调

调用 loadAd() 后,将对先前定义的 监听器方法来投放原生广告对象或报告错误。

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

以下示例展示了如何在isLoading() onNativeAdLoaded() 回调:

Java

final AdLoader adLoader = new AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
        .forNativeAd(new NativeAd.OnNativeAdLoadedListener() {
    @Override
    public void onNativeAdLoaded(NativeAd nativeAd) {
        ...
        // 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")
    .forNativeAd {
        ...
        // 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)

释放资源

请务必对已加载的原生广告使用 destroy() 方法。此版本 充分利用资源并防止内存泄漏

确保在 activity 的以下代码中销毁所有 NativeAd 引用 onDestroy() 方法。

onNativeAdLoaded 回调中,确保销毁任何现有 将会取消引用的原生广告

另一项密钥检查是 activity 是否已销毁,如果是,则对destroy() 返回的广告并立即返回:

Java

final AdLoader adLoader = new AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
        .forNativeAd(new NativeAd.OnNativeAdLoadedListener() {
    @Override
    public void onNativeAdLoaded(NativeAd nativeAd) {
        // If this callback occurs after the activity is destroyed, you
        // must call destroy and return or you may get a memory leak.
        // Note `isDestroyed()` is a method on Activity.
        if (isDestroyed()) {
            nativeAd.destroy();
            return;
        }
        ...
    }
}).build();

Kotlin

lateinit var adLoader: AdLoader
...
adLoader = AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
    .forNativeAd { nativeAd ->
        // If this callback occurs after the activity is destroyed, you
        // must call destroy and return or you may get a memory leak.
        // Note `isDestroyed` is a method on Activity.
        if (isDestroyed) {
            nativeAd.destroy()
            return@forNativeAd
        }
        ...
    }.build()

最佳做法

加载广告时,请遵循以下规则。

  • 在列表中使用原生广告的应用应预缓存广告列表。

  • 预缓存广告时,请清除缓存,并在一小时后重新加载。

  • 不要调用 loadAd() 或 在AdLoaderloadAds(),直到第一个 请求完成加载。

适用于视频广告的硬件加速功能

为确保视频广告在您的原生广告视图中成功展示, 硬件 加速

硬件加速默认处于启用状态,但有些应用可能会选择 禁用它。如果您的应用停用了硬件加速,我们建议您为使用广告的 activity 类启用硬件加速。

启用硬件加速

如果您的应用在启用硬件加速时无法正常运行 也可以针对单个活动进行控制要启用或 停用硬件加速,请使用 android:hardwareAccelerated 属性 的 <application><activity> AndroidManifest.xml 中的一些元素。以下示例展示了如何将硬件 加速,但对一个 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>

请参阅 HW 加速 请参阅 详细了解用于控制硬件加速的选项。注意事项 使用 activity 已停用,因此该 activity 本身必须具有硬件加速 。

展示您的广告

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