本指南說明如何使用 Google Mobile Ads Unity 外掛程式的廣告刊登位置功能,為應用程式建立及顯示廣告。
必要條件
Unity 2017.4 以上版本。
下載並匯入 GMA Unity 外掛程式的早期版本。
在 Unity 編輯器中設定 AdMob 應用程式 ID。
初始化 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%)。
- 自訂:可提供橫幅寬度和高度。
- 錨定自動調整橫幅廣告提供更多選項:
- 廣告位置:選取橫幅的顯示位置。
回呼
您可以實作對應廣告回呼的函式。舉例來說,如果您想處理橫幅廣告無法載入的情況:
建立與廣告回呼相容的函式。
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 中的「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()
。