本指南將說明如何使用 Google 行動廣告 Unity 外掛程式的「廣告刊登位置」功能,為應用程式製作及顯示廣告。
必要條件
Unity 2017.4 以上版本。
下載並匯入 GMA Unity 外掛程式的早期版本。
在 Unity 編輯器中設定 AdMob 應用程式 ID。
初始化 Google Mobile Ads SDK
載入廣告之前,請透過 Action<InitializationStatus>
回呼呼叫 MobileAds.Initialize()
來初始化 Mobile 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 編輯器的素材資源 > Google 行動廣告 > 廣告刊登位置中,選擇橫幅廣告、插頁式廣告或獎勵廣告格式的廣告刊登位置。接著,您就可以設定三個示範 廣告刊登位置,並立即使用
若要新增廣告刊登位置,請按一下清單末端的 [新增刊登位置] 按鈕。您可以在檢查器檢視畫面中設定廣告刊登位置。
廣告刊登位置設定
每個刊登位置具備以下屬性:
- 刊登位置名稱
- 刊登位置的名稱。廣告是在場景設定時用於識別刊登位置。
- 廣告格式
- 橫幅、獎勵、插頁式。廣告類型。
- 廣告單元編號
- 請提供 Android 和 iOS 的橫幅廣告單元 ID。您至少需要提供一個廣告單元 ID。
- 在各個情境中持續存在
- 勾選這個選項後,無論場景為何變化,橫幅都會保留在畫面上 (與
DontDestroyOnLoad
相同)。 - 已啟用自動載入
- 勾選這個選項之後,系統就會在載入與廣告刊登位置相關的場景時,自動載入廣告。
以下螢幕截圖顯示名為「My Awesome Banner」的廣告刊登位置範例。
將 AdGameObject 新增至場景
您可以使用 Unity 編輯器中的 GameObject > Google Mobile Ads,在場景中加入 AdGameObject 適用的橫幅廣告、插頁式廣告或獎勵廣告格式。選取格式,以便在有效情境中加入刊登位置。
將 AdGameObject 新增至場景後,您會在 Unity 編輯器的階層檢視中看到代表遊戲的 GameObject。
您可以變更 GameObject 本身的名稱來變更刊登位置名稱。以下螢幕截圖顯示名為「橫幅廣告」的 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 中的自動載入功能將無法運作。
然後呼叫 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 示範獎勵廣告] 廣告刊登位置。
在 RewardedAdGameObject
檢查器的「回呼」部分下方,按一下「On Ad Loaded()」中的 [+] 按鈕,即可在載入獎勵廣告時呼叫函式。
將您在上一個步驟新增的 Button 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");
});
}
}
執行專案後,當您載入獎勵廣告並準備好顯示時,畫面就會顯示按鈕。
為 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 PlacementObject 除外)。在這個範例中,這個範例會附加至「Main Camera GameObject」。
將 RewardedAdGameObject
新增至場景。接著,在 RewardedAdGameObject
檢查器的「回呼」區段下,按一下「使用者獲得獎勵 (獎勵)」上的 + 按鈕,即可在將獎勵提供給使用者時呼叫函式。
將您在上一個步驟新增的 Main Camera GameObject 拖曳到「None (Object)」欄位。從下拉式選單中選取要呼叫的函式。點選 [No Function] > [RewardedTestScript > OnUserEarnedReward]。
執行專案並觀看獎勵廣告後,當您獲得與廣告互動的獎勵時,系統就會叫用 RewardedTestScript.OnUserEarnedReward()
。