原生廣告透過 Android 平台的 UI 元件向使用者顯示的廣告素材資源。系統會使用和已經建構版面配置的相同檢視畫面來顯示這些格式,且可以配合應用程式的視覺設計進行格式化。
原生廣告載入後,應用程式會收到包含其素材資源的廣告物件,且應用程式 (而非 Google Mobile Ads SDK) 負責顯示廣告。
一般來說,成功導入原生廣告的程序分為兩個部分:使用 SDK 載入廣告,然後在應用程式中顯示廣告素材。
本頁面說明如何使用 SDK 載入 原生廣告。
必要條件
- 完成入門指南。
一律使用測試廣告進行測試
打造及測試應用程式時,請務必使用測試廣告,而非實際的廣告。
載入測試廣告最簡單的方式,就是使用 Android 專用原生廣告的專屬測試廣告單元 ID:
ca-app-pub-3940256099942544/2247696110
這個程式庫經過特別設定,可針對每項要求傳回測試廣告,您可用於編寫、測試及偵錯時,可以在自己的應用程式中使用此廣告。您只要先將其替換成自己的廣告單元 ID,再發布應用程式即可。
如要進一步瞭解 Google Mobile Ads SDK 的測試廣告如何運作,請參閱測試廣告。
正在載入廣告
原生廣告是用 AdLoader
類別載入,這個類別有專屬的 Builder
類別,可在建立時自訂。建構事件監聽器時,只要在 AdLoader
中加入事件監聽器,即可指定要接收的原生廣告類型。然後 AdLoader
只會要求這些類型。
建立 AdLoader
以下程式碼示範如何建構可載入原生廣告的 AdLoader
:
Java
AdLoader adLoader = new AdLoader.Builder(context, "ca-app-pub-3940256099942544/2247696110")
.forNativeAd(new NativeAd.OnNativeAdLoadedListener() {
@Override
public void onNativeAdLoaded(NativeAd nativeAd) {
// Show the ad.
}
})
.withAdListener(new AdListener() {
@Override
public void onAdFailedToLoad(LoadAdError adError) {
// Handle the failure by logging, altering the UI, and so on.
}
})
.withNativeAdOptions(new NativeAdOptions.Builder()
// Methods in the NativeAdOptions.Builder class can be
// used here to specify individual options settings.
.build())
.build();
Kotlin
val adLoader = AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
.forNativeAd { ad : NativeAd ->
// Show the ad.
}
.withAdListener(object : AdListener() {
override fun onAdFailedToLoad(adError: LoadAdError) {
// Handle the failure by logging, altering the UI, and so on.
}
})
.withNativeAdOptions(NativeAdOptions.Builder()
// Methods in the NativeAdOptions.Builder class can be
// used here to specify individual options settings.
.build())
.build()
forNativeAd()
方法負責為 NativeAd
格式準備 AdLoader
。廣告載入成功後,系統會呼叫事件監聽器物件的 onNativeAdLoaded()
方法。
使用 AdLoader 設定 AdListener (選擇性)
建立 AdLoader
時,withAdListener
函式會設定載入器的 AdListener
。這個方法會使用 AdListener
做為其本身的參數,在發生廣告生命週期事件時,從 AdLoader
接收回呼:
Java
.withAdListener(new AdListener() {
// AdListener callbacks can be overridden here.
})
Kotlin
.withAdListener(object : AdListener() {
// AdListener callbacks can be overridden here.
})
請求廣告
建立 AdLoader
後,您就可以使用它請求廣告。方法有兩種:loadAd()
和 loadAds()
。
loadAd()
此方法會傳送單一廣告請求。
Java
adLoader.loadAd(new AdRequest.Builder().build());
Kotlin
adLoader.loadAd(AdRequest.Builder().build())
loadAds()
這個方法會傳送多個廣告請求 (最多五則):
Java
adLoader.loadAds(new AdRequest.Builder().build(), 3);
Kotlin
adLoader.loadAds(AdRequest.Builder().build(), 3)
這兩種方法都會使用 AdRequest
物件做為第一個參數。這與橫幅和插頁式廣告所使用的 AdRequest
類別相同,您也可以使用 AdRequest
類別的方法新增指定資訊,就像其他廣告格式一樣。
載入多個廣告 (選用)
loadAds()
方法需要額外的參數:SDK 嘗試為要求載入的廣告數量。這個數字的上限為 5 個,而且我們也不保證 SDK 會傳回請求的廣告確切數量。
預訂的 Google 廣告會彼此不同,但預訂廣告空間或第三方廣告空間的廣告不會重複放送。
如果您使用中介服務,請勿使用 loadAds()
方法,因為多個原生廣告請求目前不適用於已設定為中介服務的廣告單元 ID。
回呼
呼叫 loadAd()
後,系統會呼叫先前定義的事件監聽器方法,以放送原生廣告物件或回報錯誤。
呼叫 loadAds()
後,即會發出多個這類回呼 (至少一次,且不得超過請求的廣告數量)。請求多個廣告的應用程式應在回呼實作中呼叫 AdLoader.isLoading()
,以判斷載入程序是否已完成。
以下範例說明如何在 onNativeAdLoaded()
回呼中檢查 isLoading()
:
Java
final AdLoader adLoader = new AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
.forNativeAd(new NativeAd.OnNativeAdLoadedListener() {
@Override
public void onNativeAdLoaded(NativeAd nativeAd) {
...
// some code that displays the ad.
...
if (adLoader.isLoading()) {
// The AdLoader is still loading ads.
// Expect more adLoaded or onAdFailedToLoad callbacks.
} else {
// The AdLoader has finished loading ads.
}
}
}).build();
adLoader.loadAds(new AdRequest.Builder().build(), 3);
Kotlin
lateinit var adLoader: AdLoader
...
adLoader = AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
.forNativeAd {
...
// some code that displays the ad.
...
if (adLoader.isLoading) {
// The AdLoader is still loading ads.
// Expect more adLoaded or onAdFailedToLoad callbacks.
} else {
// The AdLoader has finished loading ads.
}
}.build()
adLoader.loadAds(AdRequest.Builder().build(), 3)
釋出資源
請務必在載入的原生廣告中使用 destroy()
方法。這個版本使用資源,並防止記憶體流失。
確保在活動的 onDestroy()
方法中已刪除所有 NativeAd
參照。
在 onNativeAdLoaded
回呼中,請務必刪除任何即將參照的現有原生廣告。
另一項檢查是,如果活動已遭刪除,請針對傳回的廣告呼叫 destroy()
,並立即傳回:
Java
final AdLoader adLoader = new AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
.forNativeAd(new NativeAd.OnNativeAdLoadedListener() {
@Override
public void onNativeAdLoaded(NativeAd nativeAd) {
// If this callback occurs after the activity is destroyed, you
// must call destroy and return or you may get a memory leak.
// Note `isDestroyed()` is a method on Activity.
if (isDestroyed()) {
nativeAd.destroy();
return;
}
...
}
}).build();
Kotlin
lateinit var adLoader: AdLoader
...
adLoader = AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
.forNativeAd { nativeAd ->
// If this callback occurs after the activity is destroyed, you
// must call destroy and return or you may get a memory leak.
// Note `isDestroyed` is a method on Activity.
if (isDestroyed) {
nativeAd.destroy()
return@forNativeAd
}
...
}.build()
最佳做法
載入廣告時,請遵循以下規則。
如果應用程式使用清單中的原生廣告,應預先載入廣告清單。
預先擷取廣告時,請清除快取,並在一小時後重新載入。
第一個要求完成載入後,請勿對
AdLoader
呼叫loadAd()
或loadAds()
。
影片廣告的硬體加速
如要在影片廣告檢視畫面中成功顯示影片廣告,您必須啟用硬體加速功能。
硬體加速功能預設為啟用,但部分應用程式可能會選擇停用。如果這適用於您的應用程式,建議您為使用廣告的活動類別啟用硬體加速功能。
啟用硬體加速功能
如果您的應用程式在全域開啟硬體加速時無法正常運作,您也可以對個別活動進行控制。如要啟用或停用硬體加速功能,請為 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>
如要進一步瞭解控制硬體加速的選項,請參閱 HW 加速指南。請注意,如果「活動」處於停用狀態,就無法啟用硬體加速功能的個別廣告檢視畫面,因此「活動」本身必須啟用硬體加速功能。
顯示廣告
廣告載入後,剩下的只有顯示給使用者。如要瞭解操作方式,請參閱原生進階指南。