原生廣告

選取平台: Android iOS Flutter Unity

原生廣告是透過平台原生 UI 元件,向使用者顯示的廣告素材資源。系統顯示原生廣告時,會採用您在建構版面配置時所用的檢視畫面類型,並可設定格式來配合應用程式的視覺設計。

載入原生廣告時,應用程式會收到內含廣告素材的廣告物件,並由應用程式 (而非 Google Mobile Ads SDK) 顯示廣告素材。

廣義來說,導入原生廣告需要成功完成兩個步驟:使用 SDK 載入廣告,然後在應用程式中顯示廣告內容。

本頁說明如何使用 SDK 載入原生廣告

必要條件

一律使用測試廣告進行測試

建構及測試應用程式時,請務必使用測試廣告,而非實際運作中的廣告。

如要載入測試廣告,最簡單的方法是使用 Android 原生廣告專用的測試廣告單元 ID:

/21775744923/example/native

這類 ID 經特別設定,可針對每個請求傳回測試廣告。您可在編寫程式碼、測試及偵錯時,將其用於自己的應用程式。發布應用程式前,請務必將這類 ID 替換為自己的廣告單元 ID。

如要進一步瞭解 Google Mobile Ads SDK 測試廣告的運作方式,請參閱「測試廣告」。

載入廣告

原生廣告會透過 AdLoader 類別載入,這個類別有自己的 Builder 類別,可在建立期間自訂廣告。在建構時將監聽器新增至 AdLoader,應用程式即可指定要接收的原生廣告類型。這樣一來,AdLoader 就只會要求指定的類型。

建構 AdLoader

以下程式碼示範如何建構可載入原生廣告的 AdLoader

Java

// It is recommended to call AdLoader.Builder on a background thread.
new Thread(
        () -> {
          AdLoader adLoader =
              new AdLoader.Builder(context, "AD_UNIT_ID")
                  .forNativeAd(
                      new NativeAd.OnNativeAdLoadedListener() {
                        @Override
                        // The native ad loaded successfully. You can show the ad.
                        public void onNativeAdLoaded(@NonNull NativeAd nativeAd) {}
                      })
                  .withAdListener(
                      new AdListener() {
                        @Override
                        // The native ad load failed. Check the adError message for failure
                        // reasons.
                        public void onAdFailedToLoad(@NonNull LoadAdError adError) {}
                      })
                  // Use the NativeAdOptions.Builder class to specify individual options
                  // settings.
                  .withNativeAdOptions(new NativeAdOptions.Builder().build())
                  .build();
        })
    .start();

Kotlin

// It is recommended to call AdLoader.Builder on a background thread.
CoroutineScope(Dispatchers.IO).launch {
  val adLoader =
    AdLoader.Builder(context, "AD_UNIT_ID")
      .forNativeAd { nativeAd ->
        // The native ad loaded successfully. You can show the ad.
      }
      .withAdListener(
        object : AdListener() {
          override fun onAdFailedToLoad(adError: LoadAdError) {
            // The native ad load failed. Check the adError message for failure reasons.
          }
        }
      )
      // Use the NativeAdOptions.Builder class to specify individual options settings.
      .withNativeAdOptions(NativeAdOptions.Builder().build())
      .build()
}

AD_UNIT_ID 替換為測試裝置 ID。

forNativeAd() 方法負責準備 AdLoader,以 NativeAd 格式呈現。廣告載入成功後,系統會呼叫監聽器物件的 onNativeAdLoaded() 方法。

用 AdLoader 設定 AdListener (選用)

建立 AdLoader 時,withAdListener 函式會為載入器設定 AdListener。這個方法會將 AdListener 做為唯一參數,在廣告生命週期事件發生時,接收來自 AdLoader 的回呼:

Java

adLoaderBuilder.withAdListener(
    // Override AdListener callbacks here.
    new AdListener() {});

Kotlin

adLoaderBuilder.withAdListener(
  // Override AdListener callbacks here.
  object : AdListener() {}
)

請求廣告

完成建構 AdLoader 後,即可用於請求廣告。 有兩種方法:loadAd()loadAds()

loadAd()

這個方法會傳送單一廣告的請求。

Java

adLoader.loadAd(new AdManagerAdRequest.Builder().build());

Kotlin

adLoader.loadAd(AdManagerAdRequest.Builder().build())

loadAds()

這個方法會傳送多個廣告的請求 (最多五個):

Java

// Load three native ads.
adLoader.loadAds(new AdManagerAdRequest.Builder().build(), 3);

Kotlin

// Load three native ads.
adLoader.loadAds(AdManagerAdRequest.Builder().build(), 3)

這兩種方法都會使用 AdManagerAdRequest 物件做為第一個參數。這與橫幅和插頁式廣告使用的 AdManagerAdRequest 類別相同,您可以像使用其他廣告格式一樣,透過 AdManagerAdRequest 類別的方法新增指定目標資訊

載入多則廣告 (選用)

loadAds() 方法會採用額外參數:SDK 應嘗試為請求載入的廣告數量。這個數字上限為五,且 SDK 不保證會傳回請求的確切廣告數量。

系統傳回的 Google 廣告不會重複,但預訂廣告空間或第三方買家的廣告有可能重複。

如果您使用中介服務,請勿使用 loadAds() 方法,因為針對已設定中介服務的廣告單元 ID,無法請求多個原生廣告。

回呼

呼叫 loadAd() 後,系統會對先前定義的監聽器方法進行單一回呼,以傳送原生廣告物件或回報錯誤。

釋出資源

請務必在已載入的原生廣告上使用 destroy() 方法。這會釋放已使用的資源,並防止記憶體流失。

確認活動的 onDestroy() 方法中已刪除所有 NativeAd 參照。

onNativeAdLoaded 回呼中,請務必刪除任何將取消參照的現有原生廣告。

另一個重點是檢查活動是否已刪除,如果是,請在傳回的廣告上呼叫 destroy(),並立即傳回:

Java

nativeAd.destroy();

Kotlin

nativeAd.destroy()

最佳做法

載入廣告時,請遵守下列規則。

  • 如果應用程式採用清單中的原生廣告,則應預先快取廣告清單。

  • 如要預先快取廣告,請先清除快取,過一小時後再重新載入廣告。

  • 在第一個請求載入完成前,請勿在 AdLoader 上呼叫 loadAd()
  • 只快取需要的原生廣告。例如預先快取時,只快取要在螢幕上立即顯示的廣告。原生廣告的記憶體用量很大,如果快取後不刪除,會占用過多記憶體。

  • 不再使用原生廣告時,請予以刪除。

影片廣告的硬體加速功能

為確保原生廣告檢視區塊的影片廣告順利顯示,請務必啟用硬體加速

硬體加速功能預設為啟用,但部分應用程式可能會選擇停用。如果您的應用程式停用硬體加速,對於會使用廣告的 Activity 類別,建議您啟用這項功能。

啟用硬體加速

如果啟用全域硬體加速,會使應用程式無法正常運作,可針對個別活動啟用這項功能。如要啟用或停用硬體加速,請在 AndroidManifest.xml 中,針對 <application><activity> 元素使用 android:hardwareAccelerated 屬性。請參考以下範例,啟用整個應用程式硬體加速,但針對某項活動停用該功能:

<application android:hardwareAccelerated="true">
    <!-- For activities that use ads, hardwareAcceleration should be true. -->
    <activity android:hardwareAccelerated="true" />
    <!-- For activities that don't use ads, hardwareAcceleration can be false. -->
    <activity android:hardwareAccelerated="false" />
</application>

請參閱硬體加速指南,進一步瞭解硬體加速的控管選項。請注意,如果停用 Activity 類別,就無法啟用個別廣告檢視區塊的硬體加速功能,因此須針對 Activity 啟用硬體加速。

顯示廣告

載入廣告後,接下來就只剩下向使用者顯示廣告。 相關操作說明請參閱原生進階指南