插页式广告

插页式广告是全屏广告,展示时会覆盖其宿主应用的整个界面。这些广告通常在应用流程的正常转换点展示,例如,活动之间或游戏关卡之间的暂停时段。应用展示插页式广告时,用户可以选择点按广告,访问其目标网址,也可以将其关闭,返回应用。凭借直接的号召性用语和较大的尺寸,插页式移动广告的效果十分突出。

由于插页式广告尺寸较大,因此与传统横幅广告相比,它们通常需要更多的带宽。为了满足这一要求,应用必须异步加载插页式广告(在广告展示前加载)。这可以确保广告提前就绪,从而在应该展示的时间顺利展示。

本指南说明了如何使用 Google 移动广告 SDK 在 Android 应用中集成插页式广告,并介绍了一个简单的活动类,该类会使用 SDK 方法预加载并展示测试插页式广告。

实用资源

如果您还不了解插页式广告,不妨参阅 Android 移动广告快速入门指南

前提条件

本指南中的示例代码来自一个已加入了 Google 移动广告 SDK 的项目。为了在您的应用中使用该 SDK,您需要在 Android Studio 中执行以下操作:

将插页式广告添加至活动

最好提前加载插页式广告,并使其稍后在应用流程的自然暂停点展示。例如,假设一个简单的游戏运行一会后即会结束,然后向用户显示重新开始的按钮。以下代码段说明了如何在用户开始新游戏之前预加载并展示插页式广告:

...
public class MainActivity extends ActionBarActivity {

    PublisherInterstitialAd mPublisherInterstitialAd;
    Button mNewGameButton;

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

        mNewGameButton = (Button) findViewById(R.id.newgame_button);

        mPublisherInterstitialAd = new PublisherInterstitialAd(this);
        mPublisherInterstitialAd.setAdUnitId("AD_UNIT_ID");

        mPublisherInterstitialAd.setAdListener(new AdListener() {
            @Override
            public void onAdClosed() {
                requestNewInterstitial();
                beginPlayingGame();
            }
        });

        requestNewInterstitial();

        mNewGameButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mPublisherInterstitialAd.isLoaded()) {
                    mPublisherInterstitialAd.show();
                } else {
                    beginPlayingGame();
                }
            }
        });

        beginPlayingGame();
    }

    private void requestNewInterstitial() {
        PublisherAdRequest adRequest = new PublisherAdRequest.Builder()
                  .addTestDevice("SEE_YOUR_LOGCAT_TO_GET_YOUR_DEVICE_ID")
                  .build();

        mPublisherInterstitialAd.loadAd(adRequest);
    }

    private void beginPlayingGame() {
        // Play for a while, then display the New Game Button
    }
}
...

该代码段不是为了介绍新的成员变量 mInterstitial,而是为了让您了解活动中代码发生变化的四个位置。我们来分别看一下这些位置。

将 InterstitialAd 对象实例化

...
mPublisherInterstitialAd = new PublisherInterstitialAd(this);
mPublisherInterstitialAd.setAdUnitId("/6499/example/interstitial");
requestNewInterstitial();
...

此处构建了成员变量 mPublisherInterstitialAd,并为其提供了广告单元 ID。虽然横幅广告通常是在 XML 布局文件中定义的,但插页式广告却非如此。它们是在应用的 Java 代码中创建并配置的。在活动有效期内,一个 PublisherInterstitialAd 对象可用于请求并展示多个插页式广告,因此该对象只需构建一次。

展示插页式广告

...
mNewGameButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (mPublisherInterstitialAd.isLoaded()) {
            mPublisherInterstitialAd.show();
        } else {
            beginPlayingGame();
        }
    }
});
...

此处的新代码会检查插页式广告是否已加载,如果已加载,则会展示该广告。如果没有可展示的广告,则应用会直接进入下一关游戏。

创建广告监听器

...
mPublisherInterstitialAd.setAdListener(new AdListener() {
    @Override
    public void onAdClosed() {
        requestNewInterstitial();
        beginPlayingGame();
    }
});
...

此处设置了一个包含 onAdClosed 事件处理程序(在插页式广告关闭时调用)的 AdListener。上述代码会调用 requestNewInterstitial 方法,以开始下载新广告,并开始新游戏。

requestNewInterstitial

...
private void requestNewInterstitial() {
    PublisherAdRequest adRequest = new PublisherAdRequest.Builder()
              .addTestDevice("YOUR_DEVICE_HASH")
              .build();

    mPublisherInterstitialAd.loadAd(adRequest);
}
...

此处使用 PublisherAdRequest.Builder 对象创建了一个简单的请求,并且稍后将该请求传递给了 PublisherInterstitialAd 对象的 loadAd 方法,从而开始请求流程。

请注意,请求创建过程使用了 addTestDevice 方法。在开发和测试应用时,确保随时请求测试广告十分重要。使用已发布的广告进行测试违反政策,可能会导致您的帐号被暂停。如需详细了解测试广告的使用方法,请参阅我们的广告定位指南

结果

以下是该应用在展示插页式广告时的外观。

插页式广告覆盖在应用上,用户可选择关闭广告(使用左上角的“X”),或点按广告的其他任意位置,访问广告的目标网址。

一些最佳做法

考虑插页式广告是否为适合您应用的恰当广告类型。
插页式广告在存在自然过渡点的应用中效果最好。此类过渡点通常存在于应用内的任务结束时,例如分享完图片或完成一个游戏关卡时。用户希望可以在操作过程中休息一下,因此这时展示插页式广告不会影响用户体验。请务必考虑在应用流程的哪些时间点展示插页式广告,以及用户可能会以什么方式响应。
务必在展示插页式广告时暂停操作。
插页式广告类型多样,包括文字广告、图片广告和视频广告等。确保应用在展示插页式广告时,会暂停使用某些资源,以供广告使用,这一点十分重要。例如,当您发出展示插页式广告的调用后,请务必暂停应用产生的音频输出。您可以在 onAdClosed 事件处理程序中恢复声音播放,该处理程序会在用户结束与广告的互动之后调用。此外,请考虑在广告展示时暂时停止所有密集计算任务(例如游戏主循环)。这可以确保用户不会遇到图形质量差或视频卡顿的现象。
留出充足的加载时间。
确保在恰当时间展示插页式广告十分重要,同样,确保用户无需等待广告加载也十分重要。遵循异步加载模式,并在您打算调用 show() 之前调用 loadAd,以确保应用在应该展示广告的时间到来之前完全加载插页式广告。
不要向用户展示太多广告。
虽然提高插页式广告在应用中的展示频率似乎是增加收入的绝佳方式,但这么做也会影响用户体验并降低点击率。确保用户不会频繁受到干扰,使其可以享受使用应用的过程。

下载示例

您可以下载我们的示例应用,查看插页式广告的实际运作情况:

从 GitHub 下载示例

常见问题解答

我尝试加载第二个插页式广告时,看到日志中显示“An interstitial is already loading. Aborting”。这是为什么?
如果应用在前一个插页式广告完成展示之前即尝试加载新的插页式广告,则会出现此警告消息。请确保在正确位置调用 loadAd(我们建议在 AdListener 的 onAdClosed 方法中调用)。
我在 InterstitialAd 对象上调用 loadAd() 时,收到了一条消息“Cannot present interstitial. It is not ready”。这是怎么回事?
此错误表示系统未能成功提取该插页式广告。要防止出现此警告,请使用 isLoaded 方法检查插页式广告是否已准备好进行展示。
我未看到任何广告,且日志中显示“Request Error: No ads to show”。
创建广告单元时,请务必指定“插页式广告”作为广告类型。 PublisherInterstitialAd 对象仅接受配置为投放插页式广告的广告单元。

发送以下问题的反馈:

此网页
SDK for DFP Users on Android
需要帮助?请访问我们的支持页面