ネイティブ広告

ネイティブ広告は、プラットフォーム ネイティブの UI コンポーネントを介してユーザーに表示される広告アセットです。ストーリーボードですでに使用しているのと同じクラスを使用して表示され、アプリのビジュアル デザインに合わせてフォーマットできます。

ネイティブ広告が読み込まれると、アプリはそのアセットを含む広告オブジェクトを受け取り、(Google Mobile Ads SDK ではなく)アプリが広告を表示します。

大まかに言うと、ネイティブ広告の実装は、SDK を使用して広告を読み込み、アプリに広告コンテンツを表示するという 2 つの段階に分かれています。

このページでは、SDK を使用して ネイティブ広告を読み込む方法について説明します。

前提条件

必ずテスト広告でテストする

アプリの作成とテストの際は、実際の実際の広告ではなく、テスト広告を使用してください。

次のように iOS ネイティブ広告向けのテスト専用広告ユニット ID を使うと、テスト広告を簡単に読み込むことができます。

ca-app-pub-3940256099942544/3986624511

この ID は、すべてのリクエストに対してテスト広告を返すように構成されており、アプリのコーディング、テスト、デバッグの際に使用できます。なお、テスト用 ID は、アプリを公開する前に必ずご自身の広告ユニット ID に置き換えてください。

Google 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]];

GADAdLoaderloadRequest: メソッドは、バナーやインタースティシャルと同じ GADRequest オブジェクトを受け入れます。他の広告タイプの場合と同様に、リクエスト オブジェクトを使用してターゲティング情報を追加できます。

複数の広告を読み込む(省略可)

1 回のリクエストで複数の広告を読み込むには、GADAdLoader を初期化するときに GADMultipleAdsAdLoaderOptions オブジェクトを設定します。

Swift

let multipleAdOptions = GADMultipleAdsAdLoaderOptions()
multipleAdOptions.numberOfAds = 5;
adLoader = GADAdLoader(adUnitID: "ca-app-pub-3940256099942544/3986624511",
    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"
    rootViewController:rootViewController
               adTypes:@[ GADAdLoaderAdTypeNative ]
               options:@[ multipleAdsOptions ]];

リクエストあたりの広告数は最大 5 個です。リクエストされた数の広告を SDK が返す保証はありません。

返される Google 広告はすべて異なりますが、予約済み広告枠または第三者購入者の広告が一意であるとは限りません。

メディエーションを使用している場合、GADMultipleAdsAdLoaderOptions クラスを使用しないでください。複数のネイティブ広告のリクエストは、現在のところ、メディエーション用に設定された広告ユニット ID では機能しません。

読み込みが完了したタイミングの判断

アプリは loadRequest: を呼び出した後、次の呼び出しを使用してリクエストの結果を取得できます。

1 つの広告のリクエストに対して、これらのメソッドのいずれかが 1 回呼び出されます。

複数の広告をリクエストすると、上記のメソッドが少なくとも 1 回コールバックされます。ただし、リクエストする広告の最大数を超えることはありません。

また、GADAdLoaderDelegate には adLoaderDidFinishLoading コールバックが用意されています。このデリゲート メソッドは、広告ローダーが広告の読み込みを完了し、そのリクエストについて他の広告やエラーが報告されないことを示します。複数のネイティブ広告を一度に読み込む場合の使用方法の例を次に示します。

Swift

class ViewController: UIViewController, GADNativeAdLoaderDelegate {

  var adLoader: GADAdLoader!

  override func viewDidLoad() {
    super.viewDidLoad()

    let multipleAdOptions = GADMultipleAdsAdLoaderOptions()
    multipleAdOptions.numberOfAds = 5;
    adLoader = GADAdLoader(adUnitID: "ca-app-pub-3940256099942544/3986624511",
        rootViewController: self,
        adTypes: [ .native ],
        options: [ multipleAdOptions ])

    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:@"ca-app-pub-3940256099942544/3986624511"
      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: 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 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: で示されるように、前のリクエストの読み込みが完了するまで、GADAdLoaderloadRequest: を再度呼び出さないでください。

広告を表示する

広告を読み込んだら、あとは広告をユーザーに表示するだけです。 手順については、ネイティブ アドバンスに関するガイドをご覧ください。