本指南將說明如何使用原生廣告外掛程式導入 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>
。
封裝在 NativeAd
物件中,可從
NativeAdEventArgs
,如下所示:
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 廣告素材資源也必須清晰易讀,所以選擇 適當的背景色彩和圖片
註冊 GameObjects 以提供廣告素材資源
您必須註冊 GameObject
,廣告素材資源才能在
Unity 應用程式。如果註冊成功,用來註冊
GameObject
會傳回 bool
。對於 List<GameObject>
,這個方法會傳回 int
,指出已成功註冊的 GameObject
數量。
如果廣告素材資源註冊失敗,系統會在 就無法辨識相應的原生廣告
if (!this.nativeAd.RegisterIconImageGameObject(icon))
{
// Handle failure to register the icon ad asset.
}
註冊廣告素材資源的 GameObject
必須含有對話式對帳器
代表 GameObject
大小和形狀的元件。如果廣告素材資源註冊的 GameObject
物件缺少 Collider
元件,或是設定錯誤,原生廣告就無法正常運作。
在下列程式碼片段中,BoxCollider
已新增至 GameObject
,且該範本會使用
TextMesh
,以便顯示原生廣告的廣告標題廣告素材資源。產生
BoxCollider
已附加至 GameObject
,系統會自動調整為
容納 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;
}