ネイティブ広告は、プラットフォームに備わっている UI コンポーネントを通じてユーザーに表示される広告アセットです。作成済みのレイアウトになじむ形で表示されるのに加え、アプリのビジュアル デザインに合わせたフォーマットの調整が可能です。
ネイティブ広告が読み込まれる際は、アセットを含む広告オブジェクトをアプリが受け取り、Google Mobile Ads SDK ではなくアプリがアセットの表示処理を実行します。
ネイティブ広告の実装を 2 つの段階に大きく分けると、SDK を使用して広告を読み込み、アプリにその広告コンテンツを表示するということになります。
このページでは、SDK を使用してネイティブ広告を読み込む方法について説明します。ヒント: ネイティブ広告の詳細については、ネイティブ広告ハンドブックをご覧ください。
成功事例も併せてご覧ください(事例紹介 1 / 事例紹介 2)。
前提条件
- スタートガイドの手順を完了していること
常にテスト広告でテストする
アプリの開発とテストでは必ずテスト広告を使用し、配信中の実際の広告は使用しないでください。
次のネイティブ広告(Android)向けのテスト専用広告ユニット ID を使うと、テスト広告を簡単に読み込むことができます。
ca-app-pub-3940256099942544/2247696110
この ID は、すべてのリクエストに対してテスト広告を返す特殊な設定になっており、アプリのコーディング、テスト、デバッグで使用できます。なお、アプリを公開する前に、必ずテスト用 ID をご自身の広告ユニット ID に置き換えてください。
Google Mobile Ads SDK のテスト広告の仕組みについて詳しくは、テスト広告についての記事をご覧ください。
広告を読み込む
ネイティブ広告の読み込みには AdLoader
クラスを使用します。このクラスは、独自の Builder
クラスを使用して作成時にカスタマイズできるようになっています。AdLoader
の作成時にリスナーを追加すると、アプリで受け取るネイティブ広告の種類を指定できます。指定すると、AdLoader
はその種類の広告だけをリクエストするようになります。
AdLoader の作成
ネイティブ広告の読み込みが可能な AdLoader
を作成する方法については、次のコードをご覧ください。
Java
Kotlin
AD_UNIT_ID は、実際のテストデバイス ID に置き換えてください。
forNativeAd()
メソッドは、NativeAd
フォーマットの AdLoader
を準備します。広告の読み込みに成功すると、リスナー オブジェクトの onNativeAdLoaded()
メソッドが呼び出されます。
AdLoader で AdListener を設定する(省略可)
AdLoader
を作成する際、withAdListener
関数で AdLoader の AdListener
を設定します。このメソッドは AdListener
を唯一のパラメータとして受け取ります。広告のライフサイクル イベントが発生すると、このパラメータは AdLoader
からコールバックを受け取ります。
Java
adLoaderBuilder.withAdListener(
// Override AdListener callbacks here.
new AdListener() {});
Kotlin
adLoaderBuilder.withAdListener(
// Override AdListener callbacks here.
object : AdListener() {}
)
広告をリクエストする
AdLoader
の作成が完了したら、それを使用して広告を読み込みます。広告の読み込みに使用できるメソッドには、loadAd()
と loadAds()
の 2 つがあります。
loadAd()
このメソッドは、1 つの広告に対してリクエストを送ります。
Java
adLoader.loadAd(new AdRequest.Builder().build());
Kotlin
adLoader.loadAd(AdRequest.Builder().build())
loadAds()
このメソッドは、次のように複数の広告(最大 5 個)に対してリクエストを送ります。
Java
// Load three native ads.
adLoader.loadAds(new AdRequest.Builder().build(), 3);
Kotlin
// Load three native ads.
adLoader.loadAds(AdRequest.Builder().build(), 3)
これらのメソッドは、どちらも最初のパラメータとして AdRequest
オブジェクトを受け取ります。これは、バナーやインタースティシャルで使用するのと同じ AdRequest
クラスです。ターゲティング情報を追加する際は、他の広告フォーマットの場合と同様に AdRequest
クラスのメソッドを使用できます。
複数の広告を読み込む(省略可)
loadAds()
メソッドでは、追加パラメータとして、リクエストで SDK が読み込みを試行する広告の数を指定できます。指定できる数は最大 5 個です。なお、リクエストされた数の広告を SDK が返すことは保証されません。
返される Google 広告はすべて異なります。ただし、予約済み広告在庫またはサードパーティの購入者からの広告については、一意であるとは限りません。
メディエーションを使用している場合は、loadAds()
メソッドを使用しないでください。複数のネイティブ広告のリクエストは、メディエーション用に設定されている広告ユニット ID では機能しません。
コールバック
loadAd()
を呼び出すと、ネイティブ広告オブジェクトの配信かエラーの報告を行うために、事前に定義したリスナー メソッドに単一のコールバックが実行されます。
loadAds()
を呼び出した後は、そうしたコールバックが複数回(少なくとも 1 回、最大で広告がリクエストされた回数)行われます。複数の広告をリクエストするアプリでは、読み込みプロセスが完了したかどうかを判断するため、コールバックの実装で AdLoader.isLoading()
を呼び出すことが推奨されます。
onNativeAdLoaded()
コールバックで isLoading()
を確認する方法の例は次のとおりです。
Java
adLoaderBuilder
.forNativeAd(
nativeAd -> {
// This callback is invoked when a native ad is successfully loaded.
})
.build();
Kotlin
adLoaderBuilder
.forNativeAd { nativeAd ->
// This callback is invoked when a native ad is successfully loaded.
}
.build()
リソースを解放する
読み込まれたネイティブ広告では、destroy()
メソッドを必ず使用してください。これにより、使用されたリソースが解放され、メモリリークが防止されます。
アクティビティの onDestroy()
メソッド内で、NativeAd
へのすべての参照が破棄されていることを確認してください。
onNativeAdLoaded
コールバック内で、逆参照される既存のネイティブ広告が破棄されていることを確認してください。
また、アクティビティが破棄されたかどうかの確認も重要です。破棄された場合は、返された広告上で destroy()
を呼び出してメソッドを直ちに終了します。
Java
nativeAd.destroy();
Kotlin
nativeAd.destroy()
ベスト プラクティス
広告を読み込む際は、次のルールに従ってください。
リストでネイティブ広告を使用するアプリでは、広告のリストをプリキャッシュします。
広告をプリキャッシュする場合は、1 時間後にキャッシュをクリアして再読み込みします。
- 最初のリクエストの読み込みが完了するまで、
AdLoader
でloadAd()
またはloadAds()
を呼び出さないでください。
ネイティブ広告のキャッシュ保存は、必要なものに限定して行います。たとえばプリキャッシュする場合は、画面にすぐに表示される広告のみをキャッシュに保存します。ネイティブ広告はメモリ使用量が大きいため、ネイティブ広告を破棄せずキャッシュに保存すると、過剰にメモリを使用することになります。
ネイティブ広告が不要になったら破棄します。
動画広告のハードウェア アクセラレーション
ネイティブ広告で動画広告を正常に表示するには、ハードウェア アクセラレーションを有効にする必要があります。
ハードウェア アクセラレーションはデフォルトで有効になっていますが、一部のアプリでは無効にすることもできます。お客様のアプリで無効にできる場合、広告を使用するアクティビティ クラスのハードウェア アクセラレーションを有効にすることをおすすめします。
ハードウェア アクセラレーションの有効化
ハードウェア アクセラレーションをグローバルに有効にするとアプリが正しく動作しない場合は、個々のアクティビティでの設定が可能です。ハードウェア アクセラレーションを有効または無効にするには、AndroidManifest.xml
の <application>
および <activity>
要素で android:hardwareAccelerated
属性を使用します。次の例では、アプリ全体でハードウェア アクセラレーションを有効にしつつ、1 つのアクティビティで無効にしています。
<application android:hardwareAccelerated="true">
<!-- For activities that use ads, hardwareAcceleration should be true. -->
<activity android:hardwareAccelerated="true" />
<!-- For activities that don't use ads, hardwareAcceleration can be false. -->
<activity android:hardwareAccelerated="false" />
</application>
ハードウェア アクセラレーションを制御するオプションについて詳しくは、ハードウェア アクセラレーション ガイドをご覧ください。アクティビティが無効の場合、個々の広告ビューではハードウェア アクセラレーションを有効にできないため、アクティビティ自体でハードウェア アクセラレーションが有効になっている必要があります。
広告を表示する
広告を読み込んだら、あとは広告をユーザーに表示するだけです。方法はネイティブ アドバンスに関するガイドでご確認ください。