原生廣告

選取平台: Android iOS Flutter Unity

原生廣告這類素材資源,是透過平台原生 UI 元件向使用者顯示。系統顯示這種廣告時所用的類別,與您在分鏡腳本中使用的相同,而且可調整成符合應用程式視覺設計的格式。

原生廣告載入時,應用程式會收到內含廣告素材的廣告物件,並負責呈現這些素材資源 (而非由 Google Mobile Ads SDK 處理)。

一般來說,成功的原生廣告導入程序包含兩個步驟:使用 SDK 載入廣告,然後在應用程式中顯示廣告素材。

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

必備條件

請務必使用測試廣告來進行測試

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

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

ca-app-pub-3940256099942544/3986624511

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

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

載入廣告

原生廣告會以 GADAdLoader 類別載入,這個類別會根據 GADAdLoaderDelegate 通訊協定傳送訊息至委派物件。

初始化廣告載入器

您需要先初始化廣告載入器,才能載入廣告。以下程式碼示範如何初始化 GADAdLoader

Swift

adLoader = AdLoader(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: AdLoader,
            didReceive nativeAd: NativeAd)

Objective-C

- (void)adLoader:(GADAdLoader *)adLoader
    didReceiveNativeAd:(GADNativeAd *)nativeAd;

請求廣告

初始化 GADAdLoader 後,請呼叫其 loadRequest: 方法來請求廣告:

Swift

adLoader.load(Request())

Objective-C

[self.adLoader loadRequest:[GADRequest request]];

GADAdLoaderloadRequest: 方法接受的 GADRequest 物件,與橫幅廣告和插頁式廣告的相同。您可以使用請求物件新增指定目標資訊,做法和其他廣告類型的相同。

載入多則廣告 (選用)

在初始化 GADAdLoader 時設定 GADMultipleAdsAdLoaderOptions 物件,即可在單一請求中載入多則廣告。

Swift

let multipleAdOptions = MultipleAdsAdLoaderOptions()
multipleAdOptions.numberOfAds = 5;
adLoader = AdLoader(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 也提供 adLoaderDidFinishLoading 回呼。這個委派方法表示廣告載入器已完成廣告載入作業,而且不會再回報該請求的廣告或錯誤。以下範例說明如何在一次載入多個原生廣告時,使用這個方法:

Swift

class ViewController: UIViewController, NativeAdLoaderDelegate {

  var adLoader: GADAdLoader!

  override func viewDidLoad() {
    super.viewDidLoad()

    let multipleAdOptions = MultipleAdsAdLoaderOptions()
    multipleAdOptions.numberOfAds = 5;
    adLoader = AdLoader(adUnitID: "ca-app-pub-3940256099942544/3986624511",
        // The UIViewController parameter is optional.
        rootViewController: rootViewController,
        adTypes: [ .native ],
        options: [ multipleAdOptions ])

    adLoader.delegate = self
    adLoader.load(Request())
  }

  func adLoader(_ adLoader: AdLoader,
       didReceive nativeAd: NativeAd) {
    // A native ad has loaded, and can be displayed.
  }

  func adLoaderDidFinishLoading(_ adLoader: AdLoader) {
    // 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: AdLoader,
    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: NativeAd) {
  // The native ad was shown.
}

func nativeAdDidRecordClick(_ nativeAd: NativeAd) {
  // The native ad was clicked on.
}

func nativeAdWillPresentScreen(_ nativeAd: NativeAd) {
  // The native ad will present a full screen view.
}

func nativeAdWillDismissScreen(_ nativeAd: NativeAd) {
  // The native ad will dismiss a full screen view.
}

func nativeAdDidDismissScreen(_ nativeAd: NativeAd) {
  // The native ad did dismiss a full screen view.
}

func nativeAdWillLeaveApplication(_ nativeAd: NativeAd) {
  // 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: 指出先前的要求已載入完畢。

  • 只快取必要的原生廣告。例如預先快取時,只快取要在螢幕上立即顯示的廣告。原生廣告的記憶體用量很大,如果快取後不刪除,會占用過多記憶體。

  • 刪除不再使用的原生廣告。

顯示廣告

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