原生廣告

原生廣告是通過平台原生的 UI 組件呈現給用戶的廣告資產。它們使用您已經在情節提要中使用的相同類顯示,並且可以格式化以匹配您的應用程序的視覺設計。當原生廣告加載時,您的應用會收到一個包含其資源的廣告對象,然後應用(而不是 SDK)負責顯示它們。這與其他廣告格式不同,後者不允許您自定義廣告的外觀。

本指南將向您展示如何使用 Google 移動廣告 SDK 在 iOS 應用中實施原生廣告,以及在此過程中需要考慮的一些重要事項。

一般來說,成功實施原生廣告有兩個部分:通過 SDK 加載廣告和在您的應用中顯示廣告內容。本頁討論使用 SDK 加載廣告。

如果您已經成功加載原生廣告,並且只需要知道如何展示它們,請隨時跳至我們的原生模板原生高級指南。

先決條件

  • 單獨或作為Firebase一部分導入 Google Mobile Ads SDK。

始終使用測試廣告進行測試

在開始之前,請記住,在構建和測試您的應用程序時,您應該確保您使用的是測試廣告,而不是實際的生產廣告。使用生產廣告進行測試可能會導致您的帳戶被暫停。

加載測試廣告的最簡單方法是對 iOS 上的所有原生高級廣告使用我們專用的測試廣告單元 ID:

ca-app-pub-3940256099942544/3986624511

它經過特殊配置,可針對每個請求返回測試廣告,您可以在編碼、測試和調試時在自己的應用程序中自由使用它。只需確保在發布應用之前將其替換為您自己的廣告單元 ID。

有關移動廣告 SDK 的測試廣告如何工作的更多信息,請參閱測試廣告

加載廣告

原生廣告通過GADAdLoader對象加載,這些對像根據GADAdLoaderDelegate協議向其代理髮送消息。

初始化廣告加載器

在加載廣告之前,您必須初始化廣告加載器。以下代碼演示瞭如何初始化GADAdLoader

迅速

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此協議包含在加載原生廣告時發送給代理的消息:

    迅速

    public func adLoader(_ adLoader: GADAdLoader,
        didReceive nativeAd: GADNativeAd)
    

    Objective-C

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

請求廣告

初始化GADAdLoader ,調用其loadRequest:方法來請求廣告:

迅速

adLoader.load(GADRequest())

Objective-C

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

GADAdLoader中的loadRequest:方法接受與橫幅和插頁式廣告相同的GADRequest對象。您可以使用請求對象來添加定位信息,就像使用其他廣告類型一樣。

何時請求廣告

顯示原生廣告的應用程序可以在實際顯示之前免費請求它們。在許多情況下,這是推薦的做法。例如,顯示混有原生廣告的項目列表的應用程序可以為整個列表加載原生廣告,因為知道有些僅在用戶滾動視圖後才會顯示,有些可能根本不顯示。

雖然預取廣告是一項很棒的技術,但重要的是不要永遠保留舊廣告而不顯示它們。任何被保留超過一小時而不顯示的原生廣告對像都應該被丟棄,並用來自新請求的新廣告替換。

確定加載何時完成

應用調用loadRequest:後,可以通過調用以下方法獲取請求結果:

對單個廣告的請求將導致對其中一種方法的調用。

對多個廣告的請求將導致對上述方法的至少一個回調,但不會超過請求的最大廣告數。

此外, GADAdLoaderDelegate提供了adLoaderDidFinishLoading回調。此委託方法表示廣告加載器已完成加載廣告,並且不會為該請求報告其他廣告或錯誤。以下是一次加載多個原生廣告時如何使用它的示例:

迅速

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協議,該協議定義了廣告加載失敗時發送的消息。

迅速

public func adLoader(_ adLoader: GADAdLoader,
    didFailToReceiveAdWithError error: NSError)

Objective-C

- (void)adLoader:(GADAdLoader *)adLoader
    didFailToReceiveAdWithError:(NSError *)error;

獲取有關原生廣告事件的通知

要獲得與原生廣告交互相關的事件通知,請設置原生廣告的委託屬性:

迅速

nativeAd.delegate = self

Objective-C

nativeAd.delegate = self;

然後實現GADNativeAdDelegate以接收以下委託調用:

迅速

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.
}

展示您的廣告

加載廣告後,剩下的就是將其展示給您的用戶。前往我們的Native Advanced 指南了解如何操作。