本指南說明如何使用原生廣告外掛程式,在 Unity 應用程式中導入 AdMob 原生廣告,以及過程中需要注意的一些重要事項。
原生廣告在格式或功能方面更能融入使用者當下的瀏覽情境,此外,原生廣告的視覺設計也與廣告所在應用程式相符。 AdMob 的原生廣告格式可讓發布商顯示的廣告與內容密切整合。您可以使用這項技術,藉助 Unity 應用程式的原生程式碼打造專屬的顯示方式。
系統會使用您建構應用程式時採用的相同GameObjects
類型顯示原生廣告,並可設定格式,配合廣告所在位置的使用者體驗視覺設計。載入原生廣告時,應用程式會收到包含素材資源的原生物件,並由 Unity 應用程式 (而非 SDK) 顯示。
必要條件
載入原生廣告格式
原生廣告是透過 AdLoader
類別載入,該類別有自己的 AdLoader.Builder
類別,可在建立期間自訂廣告。這個 ForNativeAd()
方法會設定 AdLoader 來處理原生廣告。
private void RequestNativeAd() {
AdLoader adLoader = new AdLoader.Builder(INSERT_AD_UNIT_HERE)
.ForNativeAd()
.Build();
}
註冊 AdLoader 廣告事件
如要在原生廣告成功載入或載入失敗時收到通知,請將委派項目新增至 AdLoader
類別,以處理下列事件。
OnNativeAdLoaded
成功載入原生廣告時會呼叫此方法。您必須為這個事件設定委派,才能存取已載入的廣告。
OnAdFailedToLoad
無法載入原生廣告時呼叫。
載入廣告
建構 AdLoader
完成後,請呼叫其 LoadAd()
方法來要求廣告:
adLoader.LoadAd(new AdRequest.Builder().Build());
組合廣告請求
下列程式碼片段示範如何建構 AdLoader
,並設定要求原生廣告、為廣告載入成功和失敗設定委派,以及發出廣告請求。
private void RequestNativeAd() {
AdLoader adLoader = new AdLoader.Builder(INSERT_AD_UNIT_HERE)
.ForNativeAd()
.Build();
adLoader.OnNativeAdLoaded += this.HandleNativeAdLoaded;
adLoader.OnAdFailedToLoad += this.HandleAdFailedToLoad;
adLoader.LoadAd(new AdRequest.Builder().Build());
}
處理廣告載入失敗的情況
OnAdFailedToLoad
事件的類型為 EventHandle<AdFailedToLoadEventArgs>
。
下方說明如何從這個事件剖析廣告載入失敗的原因。
private void RequestNativeAd() {
...
adLoader.OnAdFailedToLoad += this.HandleNativeAdFailedToLoad;
}
private void HandleNativeAdFailedToLoad(object sender, AdFailedToLoadEventArgs args) {
Debug.Log("Native ad failed to load: " + args.Message);
}
顯示原生廣告
載入原生廣告時,系統會叫用對應廣告格式的廣告事件。 然後,應用程式會負責顯示廣告,但不必立即顯示。
處理廣告載入
OnNativeAdLoaded
事件的類型為 EventHandler<NativeAdEventArgs>
。如要從 NativeAdEventArgs
擷取封裝在 NativeAd
物件中的廣告,請按照下列步驟操作:
private NativeAd nativeAd;
...
private void HandleNativeAdLoaded(object sender, NativeAdEventArgs args) {
Debug.Log("Native ad loaded.");
this.nativeAd = args.nativeAd;
}
擷取原生廣告素材資源
廣告載入後,即可存取廣告素材,如下所示。圖像素材資源會以 Texture2D
物件的形式傳回,文字素材資源則會以 string
物件的形式傳回。
private bool nativeAdLoaded;
private NativeAd nativeAd;
void Update() {
...
if (this.nativeAdLoaded) {
this.nativeAdLoaded = false;
// Get Texture2D for the icon asset of native ad.
Texture2D iconTexture = this.nativeAd.GetIconTexture();
// Get string for headline asset of native ad.
string headline = this.nativeAd.GetHeadlineText();
}
}
private void HandleNativeAdLoaded(object sender, NativeAdEventArgs args) {
Debug.Log("Native ad loaded.");
this.nativeAd = args.nativeAd;
this.nativeAdLoaded = true;
}
請注意,廣告素材資源只能在主執行緒中存取,例如從 Unity 腳本的 Update()
方法存取。另請注意,下列資產不一定會顯示,因此顯示前請先檢查:
GetStarRating()
GetStore()
GetPrice()
GetAdvertiser()
GetIconTexture()
AdChoices 素材資源
您必須在原生廣告中顯示 AdChoices 廣告素材資源。 此外,AdChoices 廣告素材必須清楚易見,因此請選用合適的背景顏色和圖片。
為廣告素材資源註冊 GameObject
您必須註冊 GameObject
,廣告素材資源才會顯示在 Unity 應用程式中。如果註冊成功,用於註冊 GameObject
的方法會傳回 bool
。如果是 List<GameObject>
,這個方法會傳回 int
,指出成功註冊的 GameObject
數量。
如果廣告素材資源註冊失敗,系統就不會辨識相應原生廣告的曝光和點擊次數。
if (!this.nativeAd.RegisterIconImageGameObject(icon))
{
// Handle failure to register the icon ad asset.
}
為廣告素材資源註冊的 GameObject
必須具有凸面 Collider 元件,代表 GameObject
的大小和形狀。如果註冊至廣告素材的 GameObject
物件缺少 Collider
元件或設定錯誤,原生廣告就無法正常運作。
在下列程式碼片段中,系統會將 BoxCollider
新增至 GameObject
,並使用 TextMesh
顯示原生廣告的標題廣告素材資源。BoxCollider
附加至 GameObject
後,BoxCollider
會自動縮放,以配合 TextMesh
元件的文字。
// Create GameObject that will display the headline ad asset.
GameObject headline = new GameObject();
headline.AddComponent<TextMesh>();
headline.GetComponent<TextMesh>().characterSize = 0.5 f;
headline.GetComponent<TextMesh>().anchor = TextAnchor.MiddleCenter;
headline.GetComponent<TextMesh>().color = Color.black;
// Get string of the headline asset.
string headlineText = this.nativeAd.GetHeadlineText();
headline.GetComponent<TextMesh>().text = headlineText;
// Add box collider to the GameObject which will automatically scale.
headline.AddComponent<BoxCollider>();
示範
下列程式碼示範如何擷取成功載入的原生廣告圖示素材資源、設定 Quad
的紋理來顯示圖示廣告素材資源,以及註冊 GameObject
以顯示素材資源。應用程式顯示的每個素材資源都應重複執行這個程序,也就是擷取廣告素材資源並向原生廣告類別註冊。
private GameObject icon;
private bool nativeAdLoaded;
private NativeAd nativeAd;
...
void Update() {
...
if (this.nativeAdLoaded) {
this.nativeAdLoaded = false;
// Get Texture2D for icon asset of native ad.
Texture2D iconTexture = this.nativeAd.GetIconTexture();
icon = GameObject.CreatePrimitive(PrimitiveType.Quad);
icon.transform.position = new Vector3(1, 1, 1);
icon.transform.localScale = new Vector3(1, 1, 1);
icon.GetComponent<Renderer>().material.mainTexture = iconTexture;
// Register GameObject that will display icon asset of native ad.
if (!this.nativeAd.RegisterIconImageGameObject(icon))
{
// Handle failure to register ad asset.
}
}
}
...
private void HandleNativeAdLoaded(object sender, NativeAdEventArgs args) {
Debug.Log("Native ad loaded.");
this.nativeAd = args.nativeAd;
this.nativeAdLoaded = true;
}