使用广告展示位置

本指南介绍了如何使用 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 Placements,选择横幅广告、插页式广告或激励广告格式的广告展示位置。然后,系统就会设置三个演示广告展示位置,供您使用。

要添加新的广告展示位置,请点击列表末尾的 Add New Placement 按钮。您可以在 Inspector 视图中配置广告展示位置。

广告展示位置配置

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

展示位置名称
展示位置的名称。用于在场景中设置广告时识别展示位置。
广告格式
横幅广告、激励广告、插页式广告。广告的类型。
广告单元 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%)。
    • 通过“Custom”,您可以提供横幅宽度和高度。
  • 广告位置 - 选择应放置横幅广告的位置。

回调

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

  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 并打开已启用自动加载功能,以便在场景加载时自动加载广告。

接下来,确保您已按照以下方式初始化 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();
        });
    }
    ...
}

处理“Watch a Rewarded Ad”按钮的状态

以下示例展示了如何通过广告展示位置启用“Watch a Rewarded Ad”按钮。

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

Start() 方法中,请将按钮的有效状态更改为 false。这将使按钮从场景中消失。

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

向场景中添加 RewardedAdGameObject,然后从下拉菜单中选择 AdMob Demo Rewarded Ad 广告展示位置。

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

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

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

接下来,将按钮设置为在用户点击后展示激励广告。在按钮检查器的 On Click() 回调部分中,点击 + 按钮,然后将激励广告展示位置 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 Earned Reward (Reward) 上的 + 按钮,以便在用户获得奖励时启用函数调用。

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

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