原生廣告

透過集合功能整理內容 你可以依據偏好儲存及分類內容。

原生廣告是由平台原生的使用者介面元件向使用者顯示。並且會使用您在分鏡腳本中所用的類別,並符合應用程式的視覺設計格式。 載入原生廣告時,應用程式會收到含有其素材資源的廣告物件,而應用程式 (而非 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 也提供 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.
}

放送您的廣告

載入廣告後,剩下的就要向使用者顯示。 請前往原生進階指南查看操作說明。