ネイティブ広告は、プラットフォームのネイティブ UI コンポーネントを通じてユーザーに表示される広告アセットです。ストーリーボードですでに使用しているクラスと同じクラスで表示され、アプリのビジュアル デザインに合わせてフォーマットできます。
ネイティブ広告が読み込まれると、アプリは広告のアセットを含む広告オブジェクトを受け取ります。その後、Google Mobile Ads SDK ではなく、アプリが広告を表示します。
大まかに言うと、ネイティブ広告の実装は、SDK を使用して広告を読み込み、アプリに広告コンテンツを表示するという 2 つの段階に分かれています。
このページでは、SDK を使用して ネイティブ広告を読み込む方法について説明します。
前提条件
- スタートガイドを完了している。
必ずテスト広告でテストする
アプリの作成とテストでは、実際の配信中の広告ではなくテスト広告を使用するようにしてください。
テスト広告を読み込む最も簡単な方法は、iOS のネイティブ広告向けのテスト専用広告ユニット ID を使用することです。
ca-app-pub-3940256099942544/3986624511
すべてのリクエストに対してテスト広告を返すように特別に構成されており、コーディング、テスト、デバッグを行うときにアプリで使用できます。アプリを公開する前に、必ず独自の広告ユニット 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
配列には、 この定数 を 1 つ以上含める必要があります。
広告ローダのデリゲートを実装する
広告ローダのデリゲートは、広告タイプに固有のプロトコルを実装する必要があります。
ネイティブ広告の場合、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
オブジェクトを受け取ります。他の広告タイプの場合と同様に、リクエスト オブジェクトを使用してターゲット設定情報を追加できます。
複数の広告を読み込む(省略可)
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:
を呼び出した後に、次の呼び出しを使用してリクエストの結果を取得できます。
GADAdLoaderDelegate
内のadLoader:didFailToReceiveAdWithError:
GADNativeAdLoaderDelegate
内のadLoader:didReceiveNativeAd:
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;
ネイティブ広告イベントの通知を受け取る
ネイティブ広告の操作に関連するイベントの通知を受け取るには、ネイティブ広告の delegate プロパティを設定します。
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:
で示されるように、前のリクエストの読み込みが完了するまで、GADAdLoader
でloadRequest:
を再度呼び出さないでください。
広告を表示する
広告を読み込んだら、あとはユーザーに表示するだけです。その方法については、ネイティブ アドバンス ガイドをご覧ください。