原生廣告是由平台原生的使用者介面元件向使用者顯示。並且會使用您在分鏡腳本中所用的類別,並符合應用程式的視覺設計格式。 載入原生廣告時,應用程式會收到含有其素材資源的廣告物件,而應用程式 (而非 SDK) 負責負責顯示。這點與其他廣告格式不同,廣告格式不允許您自訂廣告外觀。
本指南將說明如何使用 Google Mobile Ads SDK 在 iOS 應用程式中導入 原生廣告 ,以及注意事項。
一般來說,成功導入原生廣告的方法有兩種:透過 SDK 載入廣告,並在應用程式中顯示廣告素材。 本頁面討論使用 SDK 載入廣告。
如果您已順利載入原生廣告,且只是想知道如何顯示原生廣告,請跳到我們的原生範本或原生進階指南。
必要條件
- 完成入門指南。
一律使用測試廣告進行測試
開始之前,請記住在建構及測試應用程式時,請務必使用測試廣告而非即時正式版廣告。使用實際廣告進行測試可能會導致帳戶遭到停權。
載入測試廣告最簡單的方法,就是使用 iOS 上所有原生進階廣告的專用測試廣告單元 ID:
ca-app-pub-3940256099942544/3986624511
它經過特別設定,可以針對每次要求傳回測試廣告,而您可以在編寫、測試和偵錯應用程式時,在自己的應用程式中使用它。發布應用程式前,請務必將其中的 ID 換成自己的廣告單元 ID。
如要進一步瞭解 Mobile Ads SDK 的測試廣告運作方式,請參閱「測試廣告」。
正在載入廣告
系統會透過 GADAdLoader
物件載入原生廣告,再根據 GADAdLoaderDelegate
通訊協定將郵件傳送至委派代表。
初始化廣告載入器
您必須先初始化廣告載入器,才能載入廣告。以下程式碼示範如何初始化 GADAdLoader
:
Swift
adLoader = GADAdLoader(adUnitID: "ca-app-pub-3940256099942544/3986624511", rootViewController: self, adTypes: [ .native ], options: [ ... ad loader options objects ... ]) adLoader.delegate = self
Objective-C
self.adLoader = [[GADAdLoader alloc] initWithAdUnitID:@"ca-app-pub-3940256099942544/3986624511" 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
物件。您可以使用請求物件新增指定目標資訊,就像使用其他廣告類型一樣。
請求廣告的時機
顯示原生廣告的應用程式可選擇是否要在實際顯示前預先請求。在多數情況下,這是建議的建議做法。舉例來說,應用程式中顯示含有原生廣告的項目清單 (例如混合原生廣告) 時,可以載入整個清單的原生廣告,但只會在使用者捲動檢視畫面後才顯示部分廣告,而部分廣告素材完全無法顯示。
預先擷取廣告是一種很好的技巧,但您還是會在不顯示的情況下永久保留舊廣告。所有未顯示超過一小時的原生廣告物件均應捨棄,並替換成新要求中的新廣告。
判斷載入完成
應用程式呼叫 loadRequest:
後,可透過呼叫來取得要求的結果:
GADAdLoaderDelegate
中的adLoader:didFailToReceiveAdWithError:
adLoader:didReceiveNativeAd:
位於GADNativeAdLoaderDelegate
對單一廣告提出請求時,只會呼叫其中一個方法。
如果要求針對多個廣告發出要求,則至少會造成上述方法的一個回呼,但最多不會超過所要求的廣告數量。
此外,GADAdLoaderDelegate
也提供 adLoaderDidFinishLoading
回呼。這個委派方法代表廣告載入器已載入廣告,因此不會回報該請求的其他廣告或錯誤。以下舉例說明如何一次載入多個原生廣告:
Swift
class ViewController: UIViewController, GADNativeAdLoaderDelegate { var adLoader: GADAdLoader! override func viewDidLoad() { super.viewDidLoad() let multipleAdsOptions = GADMultipleAdsAdLoaderOptions() multipleAdsOptions.numberOfAds = 5 adLoader = GADAdLoader(adUnitID: YOUR_AD_UNIT_ID, rootViewController: self, adTypes: [.native], options: [multipleAdsOptions]) 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:YOUR_AD_UNIT_ID rootViewController:self 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 application to become inactive and // open a new application. }
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 application to become inactive and // open a new application. }
放送您的廣告
載入廣告後,剩下的就要向使用者顯示。 請前往原生進階指南查看操作說明。