本指南將說明如何使用 Google 行動廣告 Unity 外掛程式的廣告刊登位置功能,為應用程式製作和多媒體廣告。
必要條件
Unity 2017.4 以上版本。
下載並匯入 GMA Unity 外掛程式的早期版本。
在 Unity 編輯器中設定 AdMob 應用程式 ID。
初始化 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%)。
- 自訂可設定橫幅廣告的寬度和高度。
- 錨定自動調整橫幅廣告提供另外幾個選項:
- 廣告位置:選取橫幅廣告的刊登位置。
回呼
您可以導入與廣告回呼對應的函式。舉例來說,如果您想處理橫幅廣告無法載入的情況:
建立與廣告回呼相容的函式。
public void OnBannerAdFailedToLoad(string reason) { Debug.Log("Banner ad failed to load: " + reason); }
將含有上述函式的指令碼附加至畫面中的任何 GameObject。
按一下「+」+按鈕,然後拖曳已附加指令碼的 GameObject。
選取要連結至廣告回呼的函式。如果是參數化廣告回呼,請選取接受動態變數的函式,以便從 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();
...
}
...
}
如果有一個名為 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
,並開啟「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()
。