原生廣告

原生廣告透過 Android 平台的 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",
    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 物件。您可以採用請求物件來新增指定目標資訊,就像其他廣告類型一樣。

載入多個廣告 (選用)

如要在單一要求中載入多個廣告,請在初始化 GADAdLoader 時設定 GADMultipleAdsAdLoaderOptions 物件。

Swift

let multipleAdOptions = GADMultipleAdsAdLoaderOptions()
multipleAdOptions.numberOfAds = 5;
adLoader = GADAdLoader(adUnitID: "ca-app-pub-3940256099942544/3986624511",
    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"
    rootViewController:rootViewController
               adTypes:@[ GADAdLoaderAdTypeNative ]
               options:@[ multipleAdsOptions ]];

每個請求的廣告數量上限為五,也無法保證 SDK 會傳回所請求的廣告數量。

預訂的 Google 廣告會彼此不同,但預訂廣告空間或第三方廣告空間的廣告不會重複放送。

如果您使用的是中介服務,請勿使用 GADMultipleAdsAdLoaderOptions 類別,因為多個原生廣告請求目前不適用於已設定中介服務的廣告單元 ID。

判斷載入完成

應用程式呼叫 loadRequest: 後,應用程式可以呼叫以下項目,以取得要求的結果:

如果只請求一個廣告,就會呼叫其中一種方法。

如果請求多個廣告,則會對上述方法發出至少一次回呼,但不超過請求的廣告數量上限。

此外,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",
        rootViewController: self,
        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"
      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:

顯示廣告

廣告載入後,剩下的只有顯示給使用者。如要瞭解操作方式,請參閱原生進階指南