廣告刊登位置

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

必要條件

初始化 Google Mobile Ads SDK

載入廣告前,請呼叫 MobileAds.Initialize(),並使用 Action<InitializationStatus> 回呼初始化 Google Mobile Ads SDK。這項操作只要執行一次,最佳時機是應用程式啟動時。

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

建立廣告刊登位置

如要透過 Google Mobile Ads 顯示橫幅,第一步是建立及設定廣告刊登位置。在 Unity 編輯器中,依序選取「Assets」>「Google Mobile Ads」>「Ad Placements」,即可選取橫幅、插頁式或獎勵廣告格式的廣告刊登位置。接著設定三個示範廣告刊登位置,即可開始使用。

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

廣告刊登位置設定

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

刊登位置名稱
刊登位置的名稱。在場景中設定廣告時,用於識別刊登位置。
廣告格式
橫幅、獎勵、插頁式。廣告類型。
廣告單元 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 設定 (僅限橫幅)

  • 大小:選取要使用的橫幅大小。
    • 錨定自動調整橫幅廣告提供更多選項:
      • 螢幕方向:選取用來計算廣告高度的裝置螢幕方向。
      • 使用全螢幕寬度:勾選後,橫幅廣告會佔滿全螢幕寬度。取消勾選「使用全螢幕寬度」選項後,即可調整螢幕寬度百分比 (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 中的「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() 方法中,將 Button 的有效狀態變更為 false。這樣按鈕就會從場景中消失。

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

在場景中新增 RewardedAdGameObject,然後從下拉式選單中選取「AdMob Demo Rewarded Ad」(AdMob 示範影片廣告)廣告刊登位置。

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

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

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

接著,請建立按鈕,在使用者點選時顯示獎勵廣告。在按鈕檢查器的「On Click() Callbacks」(點擊時的回呼) 部分,按一下「+」按鈕,然後將「Rewarded Ad Placement 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 (Ad Placement GameObject 除外)。在本範例中,這個指令碼會附加至 Main Camera GameObject。

在場景中新增 RewardedAdGameObject。接著,在 RewardedAdGameObject 檢查器中的「Callbacks」部分下方,按一下「On User Earned Reward (Reward)」上的「+」按鈕,啟用在授予使用者獎勵時呼叫函式的功能。

將上一個步驟中新增的 Main Camera GameObject 拖曳至「None (Object)」欄位。從下拉式選單中選取要呼叫的函式。依序點選「No Function」>「RewardedTestScript」>「OnUserEarnedReward」

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