廣告刊登位置

本指南將說明如何使用 Google 行動廣告 Unity 外掛程式的廣告刊登位置功能,為應用程式製作和多媒體廣告。

必要條件

初始化 Google Mobile Ads SDK

載入廣告前,請使用 Action<InitializationStatus> 回呼呼叫 MobileAds.Initialize() 來初始化 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 Placement」,選取橫幅廣告、插頁式廣告或獎勵廣告格式的廣告刊登位置。接著,三個示範廣告刊登位置 已設定完成並可開始使用

如要新增廣告刊登位置,請按一下清單底部的 [新增刊登位置] 按鈕。您可以在「檢查器」檢視畫面中設定廣告刊登位置。

廣告刊登位置設定

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

刊登位置名稱
刊登位置的名稱。在過程中設定廣告時,用於識別刊登位置。
廣告格式
橫幅廣告、獎勵廣告、插頁式廣告。廣告類型。
廣告單元 ID
請提供 Android 和 iOS 專用的橫幅廣告單元 ID。您至少須提供一個廣告單元 ID。
在場景中保持不變
勾選後,無論場景變更為何,橫幅都會持續顯示在螢幕上 (與 DontDestroyOnLoad 相同)。
已啟用自動載入功能
勾選這個選項後,系統就會在載入與廣告刊登位置相關聯的場景時,自動載入廣告。

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

將 AdGameObject 新增至場景

您可以在 Unity 編輯器中使用 GameObject > Google Mobile Ads,在場景中新增適用於橫幅廣告、插頁式廣告或獎勵格式的 AdGameObject。請選取格式,將刊登位置新增至使用中場景。

將 AdGameObject 新增至場景後,您會在 Unity 編輯器的階層檢視畫面中看到代表廣告的 GameObject。

您可以透過變更 GameObject 本身的名稱來變更刊登位置的名稱。以下螢幕截圖是 AdGameObject 範例:橫幅廣告

AdGameObject 設定

您可以在「Ad Game Object (Script)」元件設定中,透過檢查器檢視畫面設定場景中的 AdGameObject。

廣告刊登位置

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

BannerAdGameObject 設定 (僅限橫幅)

  • 大小:選取要使用的橫幅大小。
    • 錨定自動調整橫幅廣告提供另外幾個選項:
      • 螢幕方向 - 選取用來計算廣告高度的裝置方向。
      • 使用全螢幕寬度 - 勾選後,橫幅會佔用全螢幕寬度。如果取消勾選「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() 方法中,將按鈕的啟用狀態變更為 false。這會讓按鈕從場景中消失。

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

在場景中加入 RewardedAdGameObject,然後從下拉式選單中選取 [AdMob 示範獎勵廣告] 廣告刊登位置。

RewardedAdGameObject 檢查器的「回呼」部分下方,按一下「On Ad Loaded()」+中的「+」+按鈕,即可啟用載入獎勵廣告時呼叫的函式。

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

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

接下來,請讓按鈕在點選後顯示獎勵廣告。在按鈕檢查器的 On Click() 回呼部分中,按一下「+」按鈕,然後將獎勵廣告刊登位置 GameObject (在本例中稱為「獎勵廣告」) 拖曳到「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");
        });
    }
}

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

設定 wardAdGameObject 的獎勵回呼

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

建立新指令碼,並定義接受 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 除外)。在本範例中,它會附加到主要相機 GameObject。

在場景中加入 RewardedAdGameObject。接著,在 RewardedAdGameObject 檢查器的「Callbacks」部分底下,按一下「On User Plus Reward (獎勵)+」上的「+」+按鈕,讓系統在授予使用者獎勵時呼叫函式。

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

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