原生廣告是透過平台原生的 UI 元件向使用者呈現的廣告素材資源。這些圖片會使用您在情節板中使用的相同類別顯示,並可根據應用程式的視覺設計進行格式設定。
原生廣告載入時,應用程式會收到包含素材資源的廣告物件,然後由應用程式 (而非 Google Mobile Ads SDK) 負責顯示素材資源。
大致來說,成功導入原生廣告需要兩個步驟:使用 SDK 載入廣告,然後在應用程式中顯示廣告內容。
本頁面說明如何使用 SDK 載入原生廣告。
必要條件
- 完成入門指南。
請務必使用測試廣告進行測試
建構及測試應用程式時,請務必使用測試廣告,而非實際的正式版廣告。
如要載入測試廣告,最簡單的方法是使用 iOS 原生廣告專用的測試廣告單元 ID:
ca-app-pub-3940256099942544/3986624511
這項廣告單元已特別設定為針對每項要求傳回測試廣告,您可以在編寫程式碼、測試及偵錯時,在自己的應用程式中使用這項廣告單元。只要確定在發布應用程式前已將其替換為您自己的廣告單元 ID 即可。
如要進一步瞭解 Google Mobile Ads SDK 的測試廣告運作方式,請參閱「測試廣告」。
載入廣告
原生廣告會透過 GADAdLoader
類別載入,該類別會根據 GADAdLoaderDelegate
通訊協定,向其委派者傳送訊息。
初始化廣告載入器
您必須先初始化廣告載入器,才能載入廣告。以下程式碼示範如何初始化 GADAdLoader
:
Swift
adLoader = GADAdLoader(adUnitID: "ca-app-pub-3940256099942544/3986624511",
// The UIViewController parameter is optional.
rootViewController: rootViewController,
adTypes: [ .native ],
options: [ ... ad loader options objects ... ])
adLoader.delegate = self
Objective-C
self.adLoader = [[GADAdLoader alloc]
initWithAdUnitID:@"ca-app-pub-3940256099942544/3986624511"
// The UIViewController parameter is nullable.
rootViewController:rootViewController
adTypes:@[ GADAdLoaderAdTypeNative ]
options:@[ ... ad loader options objects ... ]];
self.adLoader.delegate = self;
您需要廣告單元 ID (可使用測試 ID)、在 adTypes
陣列中傳遞的常數 (用於指定要要求的原生廣告格式),以及要在 options
參數中設定的任何選項。如要查看 options
參數的可能值清單,請前往設定原生廣告選項頁面。
adTypes
陣列應包含此常數:
實作廣告載入器委派程式
廣告載入器委派函式必須實作特定廣告類型的通訊協定。針對原生廣告,GADNativeAdLoaderDelegate
通訊協定會在原生廣告載入時傳送訊息給委派者。
Swift
public func adLoader(_ adLoader: GADAdLoader,
didReceive nativeAd: GADNativeAd)
Objective-C
- (void)adLoader:(GADAdLoader *)adLoader
didReceiveNativeAd:(GADNativeAd *)nativeAd;
請求廣告
GADAdLoader
初始化後,請呼叫其 loadRequest:
方法來要求廣告:
Swift
adLoader.load(GADRequest())
Objective-C
[self.adLoader loadRequest:[GADRequest request]];
GADAdLoader
中的 loadRequest:
方法會接受與橫幅和插頁廣告相同的 GADRequest
物件。您可以使用要求物件新增指定目標資訊,就像使用其他廣告類型一樣。
載入多則廣告 (選用)
如要在單一要求中載入多個廣告,請在初始化 GADAdLoader
時設定 GADMultipleAdsAdLoaderOptions
物件。
Swift
let multipleAdOptions = GADMultipleAdsAdLoaderOptions()
multipleAdOptions.numberOfAds = 5;
adLoader = GADAdLoader(adUnitID: "ca-app-pub-3940256099942544/3986624511",
// The UIViewController parameter is optional.
rootViewController: self,
adTypes: [ .native ],
options: [ multipleAdOptions ])
Objective-C
GADMultipleAdsAdLoaderOptions *multipleAdsOptions =
[[GADMultipleAdsAdLoaderOptions alloc] init];
multipleAdsOptions.numberOfAds = 5;
self.adLoader = [[GADAdLoader alloc]
initWithAdUnitID:@"ca-app-pub-3940256099942544/3986624511"
// The UIViewController parameter is nullable.
rootViewController:rootViewController
adTypes:@[ GADAdLoaderAdTypeNative ]
options:@[ multipleAdsOptions ]];
每個請求的廣告數量上限為五個,SDK 不會保證會傳回您要求的確切廣告數量。
系統會傳回不同的 Google 廣告,但保留廣告空間或第三方買家提供的廣告不保證為不重複。
如果您使用中介服務,請勿使用 GADMultipleAdsAdLoaderOptions
類別,因為目前無法針對已設定為中介服務的廣告單元 ID 提出多個原生廣告要求。
判斷載入作業何時完成
應用程式呼叫 loadRequest:
後,即可透過以下呼叫取得要求的結果:
GADAdLoaderDelegate
中的adLoader:didFailToReceiveAdWithError:
adLoader:didReceiveNativeAd:
位於GADNativeAdLoaderDelegate
中
針對單一廣告的請求會導致對其中一種方法的一次呼叫。
請求多則廣告會導致至少一次回呼至上述方法,但不超過所要求的廣告上限。
此外,GADAdLoaderDelegate
還提供 adLoaderDidFinishLoading
回呼。這個委派方法表示廣告載入器已完成廣告載入作業,且不會針對請求回報其他廣告或錯誤。以下舉例說明如何在同時載入多個原生廣告時使用此方法:
Swift
class ViewController: UIViewController, GADNativeAdLoaderDelegate {
var adLoader: GADAdLoader!
override func viewDidLoad() {
super.viewDidLoad()
let multipleAdOptions = GADMultipleAdsAdLoaderOptions()
multipleAdOptions.numberOfAds = 5;
adLoader = GADAdLoader(adUnitID: "ca-app-pub-3940256099942544/3986624511",
// The UIViewController parameter is optional.
rootViewController: rootViewController,
adTypes: [ .native ],
options: [ multipleAdOptions ])
adLoader.delegate = self
adLoader.load(GADRequest())
}
func adLoader(_ adLoader: GADAdLoader,
didReceive nativeAd: GADNativeAd) {
// A native ad has loaded, and can be displayed.
}
func adLoaderDidFinishLoading(_ adLoader: GADAdLoader) {
// The adLoader has finished loading ads, and a new request can be sent.
}
}
Objective-C
@interface ViewController () <GADNativeAdLoaderDelegate, GADVideoControllerDelegate>
@property(nonatomic, strong) GADAdLoader *adLoader;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
GADMultipleAdsAdLoaderOptions *multipleAdsOptions =
[[GADMultipleAdsAdLoaderOptions alloc] init];
multipleAdsOptions.numberOfAds = 5;
self.adLoader = [[GADAdLoader alloc]
initWithAdUnitID:@"ca-app-pub-3940256099942544/3986624511"
// The UIViewController parameter is nullable.
rootViewController:rootViewController
adTypes:@[ GADAdLoaderAdTypeNative ]
options:@[ multipleAdsOptions ]];
self.adLoader.delegate = self;
[self.adLoader loadRequest:[GADRequest request]];
}
- (void)adLoader:(GADAdLoader *)adLoader
didReceiveNativeAd:(GADNativeAd *)nativeAd {
// A native ad has loaded, and can be displayed.
}
- (void)adLoaderDidFinishLoading:(GADAdLoader *) adLoader {
// The adLoader has finished loading ads, and a new request can be sent.
}
@end
處理失敗的要求
上述通訊協定會擴充 GADAdLoaderDelegate
通訊協定,該通訊協定會定義廣告載入失敗時傳送的訊息。
Swift
public func adLoader(_ adLoader: GADAdLoader,
didFailToReceiveAdWithError error: NSError)
Objective-C
- (void)adLoader:(GADAdLoader *)adLoader
didFailToReceiveAdWithError:(NSError *)error;
接收原生廣告事件通知
如要接收與原生廣告互動相關的事件通知,請設定原生廣告的委派作業屬性:
Swift
nativeAd.delegate = self
Objective-C
nativeAd.delegate = self;
接著實作 GADNativeAdDelegate
,以便接收下列委派呼叫:
Swift
func nativeAdDidRecordImpression(_ nativeAd: GADNativeAd) {
// The native ad was shown.
}
func nativeAdDidRecordClick(_ nativeAd: GADNativeAd) {
// The native ad was clicked on.
}
func nativeAdWillPresentScreen(_ nativeAd: GADNativeAd) {
// The native ad will present a full screen view.
}
func nativeAdWillDismissScreen(_ nativeAd: GADNativeAd) {
// The native ad will dismiss a full screen view.
}
func nativeAdDidDismissScreen(_ nativeAd: GADNativeAd) {
// The native ad did dismiss a full screen view.
}
func nativeAdWillLeaveApplication(_ nativeAd: GADNativeAd) {
// The native ad will cause the app to become inactive and
// open a new app.
}
Objective-C
- (void)nativeAdDidRecordImpression:(GADNativeAd *)nativeAd {
// The native ad was shown.
}
- (void)nativeAdDidRecordClick:(GADNativeAd *)nativeAd {
// The native ad was clicked on.
}
- (void)nativeAdWillPresentScreen:(GADNativeAd *)nativeAd {
// The native ad will present a full screen view.
}
- (void)nativeAdWillDismissScreen:(GADNativeAd *)nativeAd {
// The native ad will dismiss a full screen view.
}
- (void)nativeAdDidDismissScreen:(GADNativeAd *)nativeAd {
// The native ad did dismiss a full screen view.
}
- (void)nativeAdWillLeaveApplication:(GADNativeAd *)nativeAd {
// The native ad will cause the app to become inactive and
// open a new app.
}
最佳做法
請在載入廣告時遵守下列規則。
在清單中使用原生廣告的應用程式,應預先快取廣告清單。
預先快取廣告時,請清除快取內容,並在一小時後重新載入。
在
GADAdLoader
上呼叫loadRequest:
之前,請等待先前要求完成載入,如adLoaderDidFinishLoading:
所示。只將必要的原生廣告快取。舉例來說,在預先快取時,請只快取立即顯示在螢幕上的廣告。原生廣告的記憶體占用量很大,如果您在快取原生廣告時不刪除,就會導致記憶體使用量過多。
不再使用時刪除原生廣告。
顯示廣告
載入廣告後,您只需向使用者顯示廣告即可。 請參閱原生進階指南,瞭解如何操作。