開始學習

本指南將說明如何使用原生廣告外掛程式,在 Unity 應用程式中實作 AdMob 原生廣告,以及在過程中應考量的幾項重要事項。

原生廣告的格式和功能可巧妙融入使用者當下的瀏覽體驗。原生廣告的視覺設計也與所在應用程式的視覺設計相符。AdMob 的原生廣告格式可讓發布商顯示的廣告與內容密切整合。您可以使用這項技術,藉助 Unity 應用程式中的原生程式碼打造專屬的顯示內容。

原生廣告會使用您用來建構應用程式時使用的 GameObjects 類型進行顯示,且格式可與廣告所在的使用者體驗相符。原生廣告載入時,應用程式會收到包含素材資源的原生物件,而 Unity 應用程式 (而非 SDK) 會顯示這些素材資源。

必要條件

  • Google 行動廣告 Unity 外掛程式 7.0.0 以上版本。
  • 完成入門指南
  • 下載並安裝原生廣告外掛程式。

載入原生廣告格式

原生廣告會透過 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 廣告素材資源必須清楚易見,因此請選用合適的背景顏色和圖片。

為廣告素材資源註冊 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 後,系統會自動調整其大小,以容納 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;
}