ネイティブ広告は、プラットフォームに備わっている UI コンポーネントを通じてユーザーに表示される広告アセットです。ストーリーボードですでに使用しているクラスと同じクラスで表示され、アプリのビジュアル デザインに合わせたフォーマットの調整が可能です。
ネイティブ広告が読み込まれる際は、アセットを含む広告オブジェクトをアプリが受け取り、Google Mobile Ads SDK ではなくアプリがアセットの表示処理を実行します。
ネイティブ広告の実装は、大まかには、SDK を使って広告を読み込み、アプリにその広告コンテンツを表示するという 2 つの段階に分けられます。
このページでは、SDK を使ってネイティブ広告を読み込む方法について説明します。
前提条件
- スタートガイドの手順を完了していること
常にテスト広告でテストする
アプリの開発とテストでは必ずテスト広告を使用し、配信中の実際の広告は使用しないでください。
下記の iOS のネイティブ広告向けのテスト専用広告ユニット ID を使うと、テスト広告を簡単に読み込むことができます。
/21775744923/example/native
この ID は、すべてのリクエストに対してテスト広告を返すように設定されており、アプリのコーディング、テスト、デバッグで使用することができます。なお、アプリを公開する前に、必ずテスト用 ID をご自身の広告ユニット ID に置き換えてください。
Google Mobile Ads SDK のテスト広告の仕組みについて詳しくは、テスト広告についての記事をご覧ください。
広告を読み込む
ネイティブ広告の読み込みには GADAdLoader クラスを使用します。このクラスは、GADAdLoaderDelegate プロトコルに沿って、ネイティブ広告のデリゲートにメッセージを送信します。
システム定義のネイティブ フォーマットに加え、直接販売のネイティブ広告で使用できる独自のカスタム ネイティブ広告フォーマットを作成することもできます。カスタム ネイティブ広告フォーマットを使用すると、アプリに任意の構造化データを渡すことができます。これらの広告は GADCustomNativeAd クラスで表されます。
広告ローダを初期化する
広告を読み込むには、事前に広告ローダを初期化する必要があります。次のコードは、GADAdLoader を初期化する方法を示したものです。
Swift
adLoader = AdLoader(adUnitID: "/21775744923/example/native",
    // The UIViewController parameter is optional.
    rootViewController: rootViewController,
    adTypes: [ .native ],
    options: [ ... ad loader options objects ... ])
adLoader.delegate = self
Objective-C
self.adLoader = [[GADAdLoader alloc]
      initWithAdUnitID:@"/21775744923/example/native"
    // The UIViewController parameter is nullable.
    rootViewController:rootViewController
               adTypes:@[ GADAdLoaderAdTypeNative ]
               options:@[ ... ad loader options objects ... ]];
self.adLoader.delegate = self;
広告ユニット ID(テスト ID を使用できます)と、リクエストするネイティブ フォーマットを指定するために adTypes 配列に渡す定数値、そして options パラメータで設定するオプションが必要となります。options パラメータで設定可能な値のリストは、ネイティブ広告オプションの設定に関するページでご確認いただけます。
adTypes 配列には、次の定数値を 1 つ以上含める必要があります。
広告ローダのデリゲートを実装する
広告ローダのデリゲートには、広告の種類に合ったプロトコルを実装する必要があります。
ネイティブ広告の場合、GADNativeAdLoaderDelegate プロトコルには、ネイティブ広告の読み込み時にデリゲートに送信されるメッセージが含まれます。
Swift
public func adLoader(_ adLoader: AdLoader,
            didReceive nativeAd: NativeAd)
Objective-C
- (void)adLoader:(GADAdLoader *)adLoader
    didReceiveNativeAd:(GADNativeAd *)nativeAd;
GADCustomNativeAdLoaderDelegate プロトコルには、カスタム テンプレート広告の読み込み時にデリゲートに送信されるメッセージが含まれます。
Swift
func adLoader(_ adLoader: AdLoader,
  Receive customNativeAd: CustomNativeAd)
Objective-C
- (void)adLoader:(GADAdLoader *)adLoader
    didReceiveCustomNativeAd:(GADCustomNativeAd *) customNativeAd;
広告をリクエストする
GADAdLoader を初期化したら、その loadRequest: メソッドを呼び出して広告をリクエストします。
Swift
adLoader.load(AdManagerRequest())
Objective-C
[self.adLoader loadRequest:[GAMRequest request]];
GADAdLoader の loadRequest: メソッドは、バナーやインタースティシャルの場合と同じ GAMRequest オブジェクトを受け取ります。リクエスト オブジェクトは、他の広告タイプの場合と同様に、ターゲット設定情報を追加するのに使えます。
複数の広告を読み込む(省略可)
1 回のリクエストで複数の広告を読み込むには、GADAdLoader を初期化するときに GADMultipleAdsAdLoaderOptions オブジェクトを設定します。
Swift
let multipleAdOptions = MultipleAdsAdLoaderOptions()
multipleAdOptions.numberOfAds = 5;
adLoader = AdLoader(adUnitID: "/21775744923/example/native",
    // 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:@"/21775744923/example/native"
    // The UIViewController parameter is nullable.
    rootViewController:rootViewController
               adTypes:@[ GADAdLoaderAdTypeNative ]
               options:@[ multipleAdsOptions ]];
リクエストあたりの広告数は最大 5 個です。なお、リクエストされた数の広告を SDK が返すことは保証されません。
返される Google 広告はすべて異なります。ただし、予約済み広告在庫またはサードパーティの購入者からの広告については、一意であるとは限りません。
メディエーションを使用している場合は、GADMultipleAdsAdLoaderOptions クラスを使用しないでください。複数のネイティブ広告のリクエストは、メディエーション用に設定されている広告ユニット ID では機能しません。
読み込みが完了したタイミングを特定する
アプリで loadRequest: を呼び出した後に、次のメソッドを呼び出してリクエストの結果を取得できます。
- GADAdLoaderDelegateに含まれる- adLoader:didFailToReceiveAdWithError:
- GADNativeAdLoaderDelegateに含まれる- adLoader:didReceiveNativeAd:
1 つの広告をリクエストすると、これらのメソッドのいずれかが 1 回呼び出されます。
複数の広告をリクエストすると、上述のメソッドが 1 回以上コールバックされますが、リクエストされた広告の最大数を超えて呼び出されることはありません。
また、GADAdLoaderDelegate では adLoaderDidFinishLoading のコールバックを使用できます。このデリゲート メソッドは、広告ローダが広告の読み込みを完了し、そのリクエストについて報告すべき他の広告やエラーがないことを示します。このメソッドを使用して複数のネイティブ広告をまとめて読み込む方法について、次に例を示します。
Swift
class ViewController: UIViewController, NativeAdLoaderDelegate {
  var adLoader: GADAdLoader!
  override func viewDidLoad() {
    super.viewDidLoad()
    let multipleAdOptions = MultipleAdsAdLoaderOptions()
    multipleAdOptions.numberOfAds = 5;
    adLoader = AdLoader(adUnitID: "/21775744923/example/native",
        // 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:@"/21775744923/example/native"
      // 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.
}
ベスト プラクティス
広告を読み込む際は、次のルールに従ってください。
- リストでネイティブ広告を使用するアプリは、広告のリストをプリキャッシュする必要があります。 
- 広告をプリキャッシュする場合は、1 時間後にキャッシュをクリアして再読み込みします。 
- 前のリクエストの読み込みが完了したことを - adLoaderDidFinishLoading:が示すまで、- GADAdLoaderで- loadRequest:を再度呼び出さないでください。
- ネイティブ広告のキャッシュ保存は必要なものだけに限定します。たとえば、プリキャッシュを行う場合は、画面にすぐに表示する広告のみをキャッシュに保存します。ネイティブ広告はメモリ使用量が大きいので、ネイティブ広告を破棄せずにキャッシュに保存すると、過剰にメモリを使用することになります。 
- ネイティブ広告が不要になったら破棄します。 
広告を表示する
広告を読み込んだら、あとは広告をユーザーに表示するだけです。方法はネイティブ アドバンスに関するガイドでご確認ください。