使用廣告刊登位置

本指南將說明如何使用 Google Mobile Ads Unity 外掛程式的「廣告刊登位置」功能,為應用程式建立及顯示廣告。

必要條件

初始化 Google Mobile Ads SDK

載入廣告前,請呼叫 MobileAds.Initialize() 並使用 Action<InitializationStatus> 回呼來初始化 Mobile Ads 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 中選取橫幅廣告、插頁式廣告或獎勵廣告格式的廣告刊登位置。然後,再建立三個示範廣告刊登位置 以供使用。

若要新增廣告刊登位置,請按一下清單結尾處的 [新增刊登位置] 按鈕。您可以在「檢查器」檢視中設定廣告刊登位置。

廣告刊登位置設定

每個刊登位置具備以下屬性:

刊登位置名稱
刊登位置名稱。用來設定場景廣告的刊登位置。
廣告格式
橫幅、獎勵、插頁式廣告。廣告類型。
廣告單元 ID
請提供 Android 和 iOS 的橫幅廣告單元 ID。您至少必須提供一個廣告單元 ID。
在各個情境中持續放送
勾選這個選項後,無論場景發生變化,橫幅都會持續顯示在畫面上 (行為與 DontDestroyOnLoad 相同)。
已啟用自動載入
勾選這個選項後,系統就會在載入與廣告刊登位置相關的場景時,自動載入廣告。

以下螢幕截圖顯示名為 My Awesome Banner 的廣告刊登位置範例。

在場景中新增 AdGameObject

您可以使用 Unity 編輯器中的 GameObject > Google Mobile Ads,將 AdGameObject for Banner、Interstitial 或 Rewards 格式加到您的場景中。選取格式 即可將刊登位置新增至有效場景

在場景中新增 AdGameObject 後,您會在 Unity 編輯器的階層檢視中看到代表遊戲的 GameObject。

您可以變更 GameObject 本身的名稱來變更刊登位置名稱。以下螢幕截圖顯示名為 Banner Ad 的 AdGameObject 範例。

AdGameObject 設定

您可以在「廣告遊戲物件 (指令碼)」設定中,透過檢查器檢視畫面設定場景中的 AdGameObject。

廣告刊登位置

從已設定的刊登位置的下拉式清單中選取廣告刊登位置。這份清單只會列出正確格式的廣告單元。舉例來說,橫幅廣告遊戲物件的下拉式選單只會顯示已設定的橫幅廣告刊登位置。

BannerAdGameObject」設定 (僅限橫幅廣告)

  • 大小 - 選取要使用的橫幅廣告大小。
    • 錨定自動調整橫幅廣告可提供更多幾個選項:
      • 方向 - 選取用來計算廣告高度的裝置方向。
      • 使用全螢幕寬度 - 勾選後,橫幅 會佔用全螢幕寬度。如果您取消勾選 [使用全螢幕寬度] 選項,就可以調整畫面的寬度 (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();
        ...
    }
    ...
}

如果有名為 BannerAdGameObject (BannerAd)BannerAdGameObject,您可以取得如下的執行個體:

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 中的 Auto Load 功能將無法運作。

接著呼叫 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();
        });
    }
    ...
}

處理「觀看獎勵廣告」按鈕狀態

以下舉例說明如何利用廣告刊登位置啟用「觀看獎勵廣告」按鈕。

將 Button GameObject (在本例中為「Button」) 新增至場景,用來顯示獎勵廣告。我們只有在有獎勵廣告可用時,才會提供這個按鈕

Start() 方法中,將按鈕的有效狀態變更為 false。讓按鈕從場景中消失。

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

RewardedAdGameObject 新增至場景,並在下拉式選單中選取 [AdMob 示範獎勵廣告] 廣告刊登位置。

RewardedAdGameObject 檢查工具的回呼部分下方,按一下 On Ad Loaded() 中的 + 按鈕,以在載入獎勵廣告時呼叫該函式。

將您在上一步中新增的 Button GameObject 拖曳至「None (Object)」欄位。從下拉式選單中選取要呼叫的函式。 按一下 [No Function > GameObject > SetActive(bool)],然後勾選核取方塊,讓它傳送 true 做為參數 (呼叫 SetActive(true))。

您也可以在「回呼」部分中,連結要在 RewardedAd.OnUserEarnedReward 事件觸發時呼叫的事件。詳情請參閱本節

接著,將按鈕設為在使用者點擊後顯示獎勵廣告。在按鈕檢查器的「On Click()」回呼區段中,按一下 [+] 按鈕,然後將獎勵廣告刊登位置遊戲物件 (本例中名為「獎勵廣告」) 拖曳至「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");
        });
    }
}

執行專案後,您會在載入獎勵廣告且準備好顯示廣告時看到場景中顯示的按鈕。

為 獎勵式廣告物件設定獎勵回呼

以下範例說明如何為獎勵廣告刊登位置設定獎勵回呼,以便您在呼叫回呼函式時提供獎勵。

建立新指令碼,並定義可接受 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 (Ad Placement GameObject 除外)。在此範例中,它會連結至 Main Camera GameObject。

RewardedAdGameObject 新增至場景。接著,在 RewardedAdGameObject 檢查器的「回呼」區段下方,按一下「使用者獲得的獎勵 (獎勵)」 上的 [+] 按鈕,即可在將獎勵提供給使用者時呼叫函式。

將您在上一個步驟中新增的主相機 GameObject 拖曳至「None (Object)」欄位。從下拉式選單中選取要呼叫的函式。按一下 [No Function > RewardsTestScript > OnUserEarnedReward]

當您執行專案並觀看獎勵廣告後,當您因要與廣告互動而獲得獎勵,系統就會叫用 RewardedTestScript.OnUserEarnedReward()