插页式广告(旧版)

插页式广告是全屏广告,会覆盖所在应用的整个界面。 它们通常在应用流程的自然过渡点展示 例如在游戏关卡之间暂停时。当应用展示插页式广告时,用户可以选择点按广告,访问其目标网址,也可以将其关闭,返回应用。案例研究

本指南介绍了如何将插页式广告植入到 Unity 应用中。

前提条件

制作插页式广告

要展示插页式广告,首先要创建一个 InterstitialAd。 对象以连接到 GameObject

using GoogleMobileAds.Api;
...

private InterstitialAd interstitial;

private void RequestInterstitial()
{
    #if UNITY_ANDROID
        string adUnitId = "ca-app-pub-3940256099942544/1033173712";
    #elif UNITY_IPHONE
        string adUnitId = "ca-app-pub-3940256099942544/4411468910";
    #else
        string adUnitId = "unexpected_platform";
    #endif

    // Initialize an InterstitialAd.
    this.interstitial = new InterstitialAd(adUnitId);
}

InterstitialAd 的构造函数包含以下参数:

  • adUnitId - AdMob 广告单元 ID,InterstitialAd 应据此提供 加载广告。

请务必注意,您需要根据平台选择使用不同的广告单元。您需要使用 iOS 广告单元在 iOS 上发出广告请求,并使用 用于在 Android 上发出请求的 Android 广告单元。

务必用测试广告进行测试

上面的示例代码包含一个广告单元 ID,您可以随意使用 。该广告单元已经过专门配置,可返回测试广告而非实际投放的广告 这样便可安全使用

不过,如果您在 AdMob 界面中注册了应用并创建了您自己的广告单元, 要在您的应用中使用的 ID,您需要明确地将设备配置为 测试设备 开发应用。这一点极其重要。使用真实广告进行测试(即使您 均违反 AdMob 政策,可能会导致您的账号遭到 已暂停。请参阅测试广告 了解如何在 开发应用。

加载广告

实例化 InterstitialAd 后,下一步是加载广告。 此步骤可使用 InterstitialAd 类中的 loadAd() 方法完成。需要 AdRequest 参数,用于保存运行时信息(例如 信息)。

以下示例展示了如何加载广告:

using GoogleMobileAds.Api;
...
private InterstitialAd interstitial;

private void RequestInterstitial()
{
    #if UNITY_ANDROID
        string adUnitId = "ca-app-pub-3940256099942544/1033173712";
    #elif UNITY_IPHONE
        string adUnitId = "ca-app-pub-3940256099942544/4411468910";
    #else
        string adUnitId = "unexpected_platform";
    #endif

    // Initialize an InterstitialAd.
    this.interstitial = new InterstitialAd(adUnitId);
    // Create an empty ad request.
    AdRequest request = new AdRequest.Builder().Build();
    // Load the interstitial with the request.
    this.interstitial.LoadAd(request);
}

展示广告

插页式广告应在应用流程的自然停顿期间 (以游戏关卡之间或用户完成一项任务后为例)。 要展示插页式广告,请使用 isLoaded() 方法验证是否已完成 然后调用 show()

上一个代码示例中的插页式广告可以在 如下所示。

private void GameOver()
{
  if (this.interstitial.IsLoaded()) {
    this.interstitial.Show();
  }
}

广告事件

要进一步自定义您的广告行为,您可以加入许多 加载、打开、关闭等事件。监听 方法是为相应的 EventHandler 注册 delegate,因为 如下所示。

using GoogleMobileAds.Api;
...
private InterstitialAd interstitial;

private void RequestInterstitial()
{
    #if UNITY_ANDROID
        string adUnitId = "ca-app-pub-3940256099942544/1033173712";
    #elif UNITY_IPHONE
        string adUnitId = "ca-app-pub-3940256099942544/4411468910";
    #else
        string adUnitId = "unexpected_platform";
    #endif

     // Initialize an InterstitialAd.
    this.interstitial = new InterstitialAd(adUnitId);

    // Called when an ad request has successfully loaded.
    this.interstitial.OnAdLoaded += HandleOnAdLoaded;
    // Called when an ad request failed to load.
    this.interstitial.OnAdFailedToLoad += HandleOnAdFailedToLoad;
    // Called when an ad is shown.
    this.interstitial.OnAdOpening += HandleOnAdOpening;
    // Called when the ad is closed.
    this.interstitial.OnAdClosed += HandleOnAdClosed;

    // Create an empty ad request.
    AdRequest request = new AdRequest.Builder().Build();
    // Load the interstitial with the request.
    this.interstitial.LoadAd(request);
}

public void HandleOnAdLoaded(object sender, EventArgs args)
{
    MonoBehaviour.print("HandleAdLoaded event received");
}

public void HandleOnAdFailedToLoad(object sender, AdFailedToLoadEventArgs args)
{
    MonoBehaviour.print("HandleFailedToReceiveAd event received with message: "
                        + args.Message);
}

public void HandleOnAdOpening(object sender, EventArgs args)
{
    MonoBehaviour.print("HandleAdOpening event received");
}

public void HandleOnAdClosed(object sender, EventArgs args)
{
    MonoBehaviour.print("HandleAdClosed event received");
}

OnAdFailedToLoad 事件包含特殊的事件参数。该事件会传递一个 HandleAdFailedToLoadEventArgs 实例,其中包含的 Message 用于描述错误:

public void HandleOnAdFailedToLoad(object sender, AdFailedToLoadEventArgs args)
{
    print("Interstitial failed to load: " + args.Message);
    // Handle the ad failed to load event.
}
广告事件说明
OnAdLoaded 广告播放完毕后,系统会执行 OnAdLoaded 事件 正在加载。
OnAdFailedToLoad 广告触发失败时,系统会调用 OnAdFailedToLoad 事件 加载。Message 参数用于描述 错误。
OnAdOpening 在广告开始展示并覆盖设备的屏幕时,系统会调用此方法。 屏幕。
OnAdClosed 此方法会在插页式广告因 用户点按“关闭”图标或使用返回按钮。如果您的应用 暂停音频输出或游戏循环,则非常适合使用此方法恢复这些活动。

清理插页式广告

完成 InterstitialAd 后,请务必调用 Destroy() 方法:

interstitial.Destroy();

这会通知插件该对象已不再使用,以及 可收回。此方法调用失败会导致内存泄漏。

一些最佳做法

考虑插页式广告是否适合您的应用。
在具有自然过渡点的应用中,插页式广告的效果最好。应用内任务的结束,例如分享图片或完成一项任务 游戏关卡,就会产生这样一个点。因为用户希望在 用户可以轻松展示插页式广告 体验。请务必考虑应用工作流程的哪些时间点 您将展示插页式广告,以及用户可能会以什么方式响应。
务必在展示插页式广告时暂停操作。
插页式广告类型多样,包括文字广告、图片广告和视频广告等。务必要确保您的应用在显示 但它也会暂停使用某些资源 请充分利用它们例如,当您调用 插页式广告,请务必暂停应用产生的所有音频输出。 您可以在 onAdClosed() 事件处理脚本中继续播放声音,该处理脚本将 在用户完成与广告的互动时调用。此外,在广告展示时,请考虑暂时停止所有密集计算任务(例如游戏主循环)。这样可以确保用户不会遇到图像无响应、响应慢或视频卡顿的现象。
留出充足的加载时间。
正如确保在展示位置中展示插页式广告 合适的时间,同样重要的是确保用户无需等待 进行加载通过在调用 loadAd() 之前提前加载广告 打算调用 show(),这样可以确保应用具有完全加载的插页式广告 。
不要向用户展示太多广告。
虽然提高插页式广告在应用中的展示频次似乎 例如增加收入的好方法,但这也会影响用户体验 和较低的点击率。确保用户不会过于频繁地 打断了他们,导致他们无法继续使用您的应用。

其他资源

示例

成功案例