ネイティブ広告

ネイティブ広告は、プラットフォームに備わっている UI コンポーネントを通じてユーザーに表示される広告アセットです。ストーリーボードですでに使用しているクラスと同じクラスで表示され、アプリの視覚デザインに合わせて形式が調整されることがあります。広告が読み込まれる際は、アプリがその広告のアセットを含むオブジェクトを受け取り、(SDK ではなく)アプリがそのアセットの表示処理を実行します。他の広告フォーマットとは異なり、お客様ご自身が広告のデザインをカスタマイズすることはできません。

このガイドでは、Google Mobile Ads SDK を使用して iOS アプリにネイティブ広告を実装する方法と、その過程で考慮すべき重要なポイントについて説明します。

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

前提条件

常にテスト広告でテストする

アプリの開発やテストの際は必ずテスト広告を使用し、配信中の実際の広告は使用しないでください。実際の広告でテストを行うと、アカウントの停止につながる可能性があります。

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

ca-app-pub-3940256099942544/3986624511

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

Mobile Ads SDK のテスト広告の仕組みについてさらに詳しくは、テスト広告でご確認いただけます。

広告の読み込み

ネイティブ広告には、アプリ インストール広告とコンテンツ広告の 2 つのシステム定義フォーマットがあります。

どちらの広告のタイプも、GADUnifiedNativeAd という 1 つのクラスで表されます。このクラスのインスタンスにはネイティブ広告のアセットが含まれます。なお、GADUnifiedNativeAd で示される広告のタイプによっては、一部のフィールドに値が入力されません(nil になります)。

ネイティブ広告は、GADAdLoader オブジェクトを使って読み込まれます。このオブジェクトでは、GADAdLoaderDelegate プロトコルに従い、ネイティブ広告のデリゲートにメッセージが送信されます。

広告ローダーを初期化する

広告を読み込むには、事前に広告ローダーを初期化しておく必要があります。次のコードは、GADAdLoader を初期化する方法を示したものです。

Swift

adLoader = GADAdLoader(adUnitID: "ca-app-pub-3940256099942544/3986624511",
    rootViewController: self,
    adTypes: [ kGADAdLoaderAdTypeUnifiedNative ],
    options: [ ... ad loader options objects ... ])
adLoader.delegate = self

Objective-C

self.adLoader = [[GADAdLoader alloc]
      initWithAdUnitID:@"ca-app-pub-3940256099942544/3986624511"
    rootViewController:rootViewController
               adTypes:@[ ... ad type constants ... ]
               options:@[ ... ad loader options objects ... ]];
self.adLoader.delegate = self;

広告ユニット ID(テスト ID を使用できます)と、リクエストするネイティブ フォーマットを指定するために adTypes 配列に渡す定数値、そして options パラメータで設定するオプションが必要となります。options パラメータで設定可能な値のリストは、ネイティブ広告オプションの設定でご確認いただけます。

adTypes 配列には、次の定数値を含める必要があります。

広告ローダーのデリゲートを実装する

広告ローダーのデリゲートには、広告タイプ専用のプロトコルを実装する必要があります。統合型ネイティブ広告の場合は次のようになります。

  • GADUnifiedNativeAdLoaderDelegate このプロトコルには、統合ネイティブ広告の読み込み時にデリゲートに送信されるメッセージが含まれます。

    Swift

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

    Objective-C

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

広告をリクエストする

GADAdLoader を初期化したら、その loadRequest: メソッドを呼び出して広告をリクエストします。

Swift

adLoader.load(GADRequest())

Objective-C

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

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

広告をリクエストするタイミング

ネイティブ広告を表示しているアプリでは、実際に表示する広告を前もってリクエストすることもでき、通常はこの方法がおすすめです。たとえば、ネイティブ広告を含むアイテムリストを表示するアプリでは、ユーザーがビューをスクロールしなければ表示されない広告や、まったく表示されない可能性がある広告が含まれている場合でも、そのリストに含まれるネイティブ広告を事前にすべて読み込むことができます。

広告のプリフェッチは効果的な手法ですが、表示されないままになっている古い広告はいつまでも保持しないことが重要です。1 時間以上たっても表示されずに保持されているネイティブ広告のオブジェクトは、破棄して新しいリクエストの広告に置き換えてください。

読み込みが完了したタイミングの特定

アプリで loadRequest: を呼び出した後に、次のメソッドを呼び出すことでリクエストの結果を取得することができます。

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

複数の広告をリクエストすると、上述のメソッドが 1 回以上コールバックされますが、リクエストされた広告の最大数を超えて呼び出されることはありません。

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

Swift

class ViewController: UIViewController, GADUnifiedNativeAdLoaderDelegate {

  var adLoader: GADAdLoader!

  override func viewDidLoad() {
    super.viewDidLoad()

    let multipleAdsOptions = GADMultipleAdsAdLoaderOptions()
    multipleAdsOptions.numberOfAds = 5

    adLoader = GADAdLoader(adUnitID: YOUR_AD_UNIT_ID, rootViewController: self,
        adTypes: [GADAdLoaderAdType.unifiedNative],
        options: [multipleAdsOptions])
    adLoader.delegate = self
    adLoader.load(GADRequest())
  }

  func adLoader(_ adLoader: GADAdLoader,
                didReceive nativeAd: GADUnifiedNativeAd) {
    // A unified 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 () <GADUnifiedNativeAdLoaderDelegate, 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:@[kGADAdLoaderAdTypeUnifiedNative]
                     options:@[multipleAdsOptions]];
  self.adLoader.delegate = self;
  [self.adLoader loadRequest:[GADRequest request]];
}

- (void)adLoader:(GADAdLoader *)adLoader
    didReceiveUnifiedNativeAd:(GADUnifiedNativeAd *)nativeAd {
   // A unified 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 プロトコルを拡張したものです。GADRequestError オブジェクトを使用してエラーの原因を調べることができます。

Swift

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

Objective-C

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

ネイティブ広告イベントの通知を受け取る

ネイティブ広告の操作に関連するイベントについて通知を受け取るには、ネイティブ広告のデリゲート プロパティを設定します。

Swift

nativeAd.delegate = self

Objective-C

nativeAd.delegate = self;

次に、GADUnifiedNativeAdDelegate を実装して、次のデリゲートの呼び出しを受け取ります。

Swift

func nativeAdDidRecordImpression(_ nativeAd: GADUnifiedNativeAd) {
  // The native ad was shown.
}

func nativeAdDidRecordClick(_ nativeAd: GADUnifiedNativeAd) {
  // The native ad was clicked on.
}

func nativeAdWillPresentScreen(_ nativeAd: GADUnifiedNativeAd) {
  // The native ad will present a full screen view.
}

func nativeAdWillDismissScreen(_ nativeAd: GADUnifiedNativeAd) {
  // The native ad will dismiss a full screen view.
}

func nativeAdDidDismissScreen(_ nativeAd: GADUnifiedNativeAd) {
  // The native ad did dismiss a full screen view.
}

func nativeAdWillLeaveApplication(_ nativeAd: GADUnifiedNativeAd) {
  // The native ad will cause the application to become inactive and
  // open a new application.
}

Objective-C

- (void)nativeAdDidRecordImpression:(GADUnifiedNativeAd *)nativeAd {
  // The native ad was shown.
}

- (void)nativeAdDidRecordClick:(GADUnifiedNativeAd *)nativeAd {
  // The native ad was clicked on.
}

- (void)nativeAdWillPresentScreen:(GADUnifiedNativeAd *)nativeAd {
  // The native ad will present a full screen view.
}

- (void)nativeAdWillDismissScreen:(GADUnifiedNativeAd *)nativeAd {
  // The native ad will dismiss a full screen view.
}

- (void)nativeAdDidDismissScreen:(GADUnifiedNativeAd *)nativeAd {
  // The native ad did dismiss a full screen view.
}

- (void)nativeAdWillLeaveApplication:(GADUnifiedNativeAd *)nativeAd {
  // The native ad will cause the application to become inactive and
  // open a new application.
}

広告を表示する

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

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。