广告展示位置

本指南介绍了如何使用 Google 移动广告 Unity 插件的“广告展示位置”功能为您的应用制作和展示广告。

前提条件

初始化 Google 移动广告 SDK

加载广告之前,请先使用 Action<InitializationStatus> 回调调用 MobileAds.Initialize(),以初始化移动广告 SDK。此操作仅需执行一次,最好是在应用启动时执行。

using GoogleMobileAds.Api;
using System.Collections.Generic;
...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    ...
    public void Start()
    {
        // Initialize the Mobile Ads SDK.
        MobileAds.Initialize((initStatus) =>
        {
            // SDK initialization is complete
        });
        ...
    }
}

创建广告展示位置

使用 Google 移动广告展示横幅广告的第一步是创建和配置广告展示位置。在 Unity 编辑器中,从 Assets > Google Mobile Ads > Ad Placement 中,您可以选择横幅广告、插页式广告或激励广告格式的广告展示位置。然后,设置并可以使用三个演示广告展示位置。

如需添加新的广告展示位置,请点击列表末尾的 Add New Placement 按钮。您可以通过“检查器”视图配置广告展示位置。

广告展示位置配置

每个展示位置都具有以下属性:

展示位置名称
展示位置的名称。用于在场景中设置广告时识别展示位置。
广告格式
横幅广告、激励广告、插页式广告。广告的类型。
广告单元 ID
提供适用于 Android 和 iOS 的横幅广告单元 ID。您需要提供至少一个广告单元 ID。
持续跨场景
选中后,无论场景如何变化,横幅广告都将保留在屏幕上(行为与 DontDestroyOnLoad 相同)。
已启用自动加载
选中后,当与广告展示位置相关联的场景加载时,广告会自动加载。

以下屏幕截图显示了一个名为 My Awesome Banner 的广告展示位置示例。

向场景中添加 AdGameObject

您可以在 Unity 编辑器中依次选择 GameObject > Google Mobile Ads,将横幅广告、插页式广告或激励广告格式的 AdGameObject 添加到场景中。选择格式即可向有效场景添加展示位置。

将 AdGameObject 添加到场景中后,您会在 Unity 编辑器的 Hierarchy 视图中看到代表广告的 GameObject。

您可以通过更改 GameObject 本身的名称来更改展示位置的名称。以下屏幕截图显示了一个名为 Banner Ad 的 AdGameObject 示例。

AdGameObject 设置

您可以通过 Ad Game Object (Script) 组件设置中的“Inspector”视图,在场景中配置 AdGameObject。

广告展示位置

从已配置的展示位置下拉列表中选择广告展示位置。该列表将只包含相应格式的广告单元。例如,对于横幅广告游戏对象,下拉菜单将仅显示已配置的横幅广告展示位置。

BannerAdGameObject 配置(仅限横幅广告)

  • 尺寸 - 用于选择您要使用的横幅广告尺寸。
    • 锚定自适应横幅广告提供了另外几个选项:
      • Orientation - 选择用于计算广告高度的设备屏幕方向。
      • Use full screen width - 选中后,横幅广告将占据全屏宽度。如果您取消选中 Use full screen width 选项,则可以调整屏幕的宽度百分比 (50~99%)。
    • 自定义:允许您提供横幅宽度和高度。
  • 广告位置 - 选择应放置横幅广告的位置。

回调

您可以实现与广告回调相对应的函数。例如,如果您想在横幅广告加载失败时进行处理,请执行以下操作:

  1. 创建一个与广告回调兼容的函数。

    public void OnBannerAdFailedToLoad(string reason) {
        Debug.Log("Banner ad failed to load: " + reason);
    }
    
  2. 将包含上述函数的脚本附加到场景中的任何 GameObject。

  3. 点击 + 按钮,然后拖放您已将脚本附加到的 GameObject。

  4. 选择要关联到广告回调函数的函数。对于参数化广告回调函数,请选择接受动态变量的函数,以便从 SDK 获取参数值。

通过脚本使用 AdGameObject

从脚本中获取 AdGameObject 实例

所有 AdGameObject 对象都具有便捷方法 LoadAd()。这将使用未定位的普通 AdRequest 加载广告。如需应用定位条件,您应通过自己配置的广告请求使用 LoadAd(AdRequest adRequest)

要获取 AdGameObject 的实例,请针对每种格式使用以下方法:

MobileAds.Instance.GetAd<BannerAdGameObject>("AD_GAMEOBJECT_NAME");

返回的 BannerAdGameObject 对象还包含便捷方法 Hide()Show()

插页式广告

MobileAds.Instance.GetAd<InterstitialAdGameObject>("AD_GAMEOBJECT_NAME");

返回的 InterstitialAdGameObject 对象具有便捷方法 ShowIfLoaded()

已奖励

MobileAds.Instance.GetAd<RewardedAdGameObject>("AD_GAMEOBJECT_NAME");

返回的 RewardedAdGameObject 对象具有便捷方法 ShowIfLoaded()

例如,您可以获取 BannerAdGameObject 的实例并按如下所示进行加载:

using UnityEngine;

using GoogleMobileAds.Api;
using GoogleMobileAds.Placement;

public class BannerTestScript : MonoBehaviour
{
    BannerAdGameObject bannerAd;

    void Start()
    {
        bannerAd = MobileAds.Instance
            .GetAd<BannerAdGameObject>("AD_GAMEOBJECT_NAME");

        bannerAd.LoadAd();
        ...
    }
    ...
}

如果有一个名为 BannerAdBannerAdGameObject,可以获取它的实例,如下所示:

MobileAds.Instance.GetAd<BannerAdGameObject>("BannerAd");

访问 AdGameObject 中的底层广告对象

这些代码段演示了如何访问与 AdGameObject 关联的底层广告对象。

BannerAdGameObject bannerAd = MobileAds.Instance
    .GetAd<BannerAdGameObject>("AD_GAMEOBJECT_NAME");

// Access BannerView object
BannerView bannerView = bannerAd.BannerView;

插页式广告

InterstitialAdGameObject interstitialAdGameObject = MobileAds.Instance
    .GetAd<InterstitialAdGameObject>("AD_GAMEOBJECT_NAME");

// Access InterstitialAd object
InterstitialAd interstitialAd = interstitialAdGameObject.InterstitialAd;

已奖励

RewardedAdGameObject rewardedAdGameObject = MobileAds.Instance
    .Get<RewardedAdGameObject>("AD_GAMEOBJECT_NAME");

// Access RewardedAd object
RewardedAd rewardedAd = rewardedAdGameObject.RewardedAd;

示例

展示插页式广告

以下示例展示了如何使用 AdGameObject 配置游戏以加载和展示插页式广告。

向场景中添加 InterstitialAdGameObject 并开启 Auto Load Enabled 功能,以便在场景加载时自动加载广告。

接下来,确保您已使用 初始化 SDK,如下所示。请注意,如果您忘记初始化 SDK,AdGameObject 中的自动加载功能将不起作用。

然后,通过调用 InterstitialAdGameObject.ShowIfLoaded() 函数,在屏幕过渡间隙展示插页式广告。以下代码展示了在场景过渡间隙展示插页式广告的示例。

using UnityEngine;
using UnityEngine.SceneManagement;

using GoogleMobileAds.Api;
using GoogleMobileAds.Placement;

public class MainScene : MonoBehaviour
{
    InterstitialAdGameObject interstitialAd;

    void Start()
    {
        interstitialAd = MobileAds.Instance
            .GetAd<InterstitialAdGameObject>("interstitial");

        MobileAds.Initialize((initStatus) => {
            Debug.Log("Initialized MobileAds");
        });
    }

    public void OnClickShowGameSceneButton()
    {
        // Display an interstitial ad
        interstitialAd.ShowIfLoaded();

        // Load a scene named "GameScene"
        SceneManager.LoadScene("GameScene");
    }
}

由于您已在广告展示位置中启用自动加载功能,因此无需明确请求广告。当场景发生变化时,如果插页式广告已准备就绪,系统会展示插页式广告。

如果您想手动请求广告,请从广告展示位置检查器中停用自动加载功能,并调用 InterstitialAdGameObject.LoadAd() 函数。以下代码段展示了如何手动请求广告。

public class MainScene : MonoBehaviour
{
    InterstitialAdGameObject interstitialAd;

    void Start()
    {
        interstitialAd = MobileAds.Instance
            .GetAdGameObject<InterstitialAdGameObject>("interstitial");

        MobileAds.Initialize((initStatus) => {
            Debug.Log("MobileAds initialized");

            // Load an interstitial ad after the SDK initialization is complete
            interstitialAd.LoadAd();
        });
    }
    ...
}

处理“观看激励广告”按钮状态

以下示例展示了如何通过广告展示位置启用“观看激励广告”按钮。

向场景中添加按钮 GameObject(本例中名为 Button),该按钮将用于展示激励广告。仅当激励广告可用时,此按钮才可用。

Start() 方法中,将 Button 的活跃状态更改为 false。这会使该按钮从场景中消失。

public class MainScene : MonoBehaviour
{
    ...
    void Start()
    {
        GameObject.Find("Button").SetActive(false);
        ...
    }
}

RewardedAdGameObject 添加到场景中,然后从下拉列表中选择 AdMob 演示激励广告广告展示位置。

RewardedAdGameObject 检查器的“Callbacks”部分下,点击 On Ad loaded() 中的 + 按钮,启用要在加载激励广告时调用该函数的函数。

将您在上一步中添加的按钮 GameObject 拖放到 None (Object) 字段中。从下拉列表中选择要调用的函数。 依次点击 No Function > GameObject > SetActive(bool),然后点击复选框,使其将 true 作为参数发送(调用 SetActive(true))。

在此“回调”部分,您还可以关联在触发 RewardedAd.OnUserEarnedReward 事件时调用的事件。如需了解详情,请参阅此部分

接下来,将按钮设置为在用户点击后展示激励广告。在按钮检查器的 On Click() Callbacks 部分中,点击 + 按钮,然后将激励广告展示位置 GameObject(在本例中名为 Rewarded Ad)拖放到 None (Object) 字段中。

然后,将 RewardedAdGameObject.ShowIfLoaded() 函数附加到按钮的 On Click() 回调中。

最后,别忘了初始化 SDK。以下代码段是本示例中使用的场景的完整代码:

using UnityEngine;

using GoogleMobileAds.Api;

public class MainScene : MonoBehaviour
{
    void Start()
    {
        GameObject.Find("Button").SetActive(false);

        MobileAds.Initialize((initStatus) => {
            Debug.Log("Initialized MobileAds");
        });
    }
}

运行项目后,当激励广告已加载并可供展示时,您会看到场景显示该按钮。

为 RewardedAdGameObject 配置奖励回调

以下示例展示了如何为激励广告展示位置配置激励广告回调,以便在调用回调函数时向用户提供奖励。

如下所示,创建新脚本并定义一个接受 Reward 作为参数的函数。

using UnityEngine;
using GoogleMobileAds.Api;

class RewardedTestScript : MonoBehaviour {
    ...
    public void OnUserEarnedReward(Reward reward) {
        Debug.Log("OnUserEarnedReward: reward=" +
            reward.Type + ", amount=" + reward.Amount);
    }
    ...
}

RewardedTestScript 脚本附加到场景中的任何 GameObject(广告展示位置 GameObject 除外)中。在此示例中,它将附加到 Main Camera GameObject。

向场景添加 RewardedAdGameObject。然后,在 RewardedAdGameObject 检查器的“Callbacks”(回调)部分下,点击 On User 赚取的奖励 (Reward) 对应的 + 按钮,以便在用户获得奖励时调用该函数。

将您在上一步中添加的 Main Camera GameObject 拖放到 None (Object) 字段中。从下拉列表中选择要调用的函数。依次点击 No Function > RewardedTestScript > OnUser earnededReward

运行项目并观看激励广告后,如果您因与广告互动而将获得奖励,系统会调用 RewardedTestScript.OnUserEarnedReward()