原生廣告

原生廣告是一種廣告素材資源,可透過平台內建的使用者介面元件向使用者顯示。這種格式與您目前在分鏡腳本中所用的類別相同,並且符合應用程式視覺設計的格式。 載入原生廣告時,應用程式會收到內含其素材資源的廣告物件,而應用程式 (而非 SDK) 會負責顯示廣告。 這種廣告格式與其他廣告格式不同,您無法自訂廣告的外觀。

本指南將示範如何在 iOS 應用程式中使用 Google Mobile Ads SDK,導入 原生廣告 還有一些需要考量的重要事項。

大致來說,成功導入原生廣告有兩個部分: 透過 SDK 載入廣告,並在您的應用程式中顯示廣告內容。 本頁說明使用 SDK 載入廣告的方式。

如果您已經成功載入原生廣告,且只知道如何顯示原生廣告,請直接跳到我們的原生範本原生進階指南。

必要條件

一律使用測試廣告進行測試

提醒您,在建構及測試應用程式時,請確實使用測試廣告,而非實際運作的廣告。使用正式版廣告進行測試可能會導致帳戶遭到停權。

如要載入測試廣告,最簡單的方法就是使用專屬測試廣告單元 ID,以便在 iOS 上所有原生進階廣告使用:

ca-app-pub-3940256099942544/3986624511

這種代碼經過特別設定,可針對每個請求傳回測試廣告,您可以在編寫、測試及偵錯時,在自己的應用程式中免費使用此功能。只要先以自己的廣告單元 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 物件。您可以使用要求物件來新增指定目標資訊,就像處理其他廣告類型一樣。

請求廣告的時機

顯示原生廣告的應用程式可以免費請求,但廣告會在實際顯示前預先發出請求。在多數情況下,建議您這麼做。 例如,應用程式顯示已混合原生廣告的項目清單,其中可以載入整個清單的原生廣告,因為這類動作只會在使用者捲動檢視畫面後才顯示,有些則完全無法顯示。

預先擷取廣告是一種很好的技巧,但您不應在未顯示廣告的情況下永久顯示舊廣告。針對任何未維持顯示時間超過 1 小時的原生廣告物件,應捨棄並替換為新要求中的新廣告。

判斷載入完成的時間

應用程式呼叫 loadRequest: 之後,可透過呼叫取得要求的結果:

對單一廣告發出請求時,系統會對其中一種方法發出一次呼叫。

針對多個廣告提出請求時,系統會至少針對上述方法發出一次回呼,但不會超過所要求的廣告數量上限。

此外,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.
}

顯示廣告

廣告載入完畢後,剩下的工作就是向使用者顯示廣告。 請參閱原生進階指南瞭解操作方式。