ネイティブ広告は、プラットフォームにネイティブな UI コンポーネントを通じてユーザーに表示される広告アセットです。これらは、すでにレイアウトを作成しているものと同じタイプのビューを使用して表示され、アプリのビジュアル デザインに合わせてフォーマットできます。
ネイティブ広告の読み込み時には、アプリが広告のアセットを含むオブジェクトを受け取ります。アプリは Google Mobile Ads SDK ではなく、その広告アセットの表示を担当します。
大まかに言うと、ネイティブ広告の実装は、SDK を使って広告を読み込んでから、アプリに広告コンテンツを表示するという 2 つの段階で構成されます。
このページでは、SDK を使用して ネイティブ広告を読み込む方法について説明します。
Prerequisites
- スタートガイドの手順を完了していること
常にテスト広告でテストする
アプリの開発とテストでは必ずテスト広告を使用し、配信中の実際の広告は使用しないでください。
テスト広告を読み込む際は、次に示す Android ネイティブ広告向けのテスト専用広告ユニット ID を使うと便利です。
ca-app-pub-3940256099942544/2247696110
この ID は、すべてのリクエストに対してテスト広告を返す特別な ID で、アプリのコーディング、テスト、デバッグで使うことができます。なお、このテスト用 ID は、アプリを公開する前に必ずご自身の広告ユニット ID に置き換えてください。
Google Mobile Ads SDK のテスト広告の仕組みについて詳しくは、テスト広告をご覧ください。
広告を読み込んでいます
ネイティブ広告の読み込みには AdLoader
クラスを使用します。このクラスは、独自の Builder
クラスを使って作成時にカスタマイズできるようになっています。アプリのビルド時に AdLoader
にリスナーを追加することで、受け取る準備が整っているネイティブ広告のタイプをアプリで指定できます。AdLoader
は、これらの型のみをリクエストします。
AdLoader を作成する
次のコードは、ネイティブ広告を読み込むことができる AdLoader
の作成方法を示しています。
Java
AdLoader adLoader = new AdLoader.Builder(context, "ca-app-pub-3940256099942544/2247696110")
.forNativeAd(new NativeAd.OnNativeAdLoadedListener() {
@Override
public void onNativeAdLoaded(NativeAd nativeAd) {
// Show the ad.
}
})
.withAdListener(new AdListener() {
@Override
public void onAdFailedToLoad(LoadAdError adError) {
// Handle the failure by logging, altering the UI, and so on.
}
})
.withNativeAdOptions(new NativeAdOptions.Builder()
// Methods in the NativeAdOptions.Builder class can be
// used here to specify individual options settings.
.build())
.build();
Kotlin
val adLoader = AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
.forNativeAd { ad : NativeAd ->
// Show the ad.
}
.withAdListener(object : AdListener() {
override fun onAdFailedToLoad(adError: LoadAdError) {
// Handle the failure by logging, altering the UI, and so on.
}
})
.withNativeAdOptions(NativeAdOptions.Builder()
// Methods in the NativeAdOptions.Builder class can be
// used here to specify individual options settings.
.build())
.build()
forNativeAd()
メソッドは、NativeAd
形式の AdLoader
を準備します。広告が正常に読み込まれると、リスナー オブジェクトの onNativeAdLoaded()
メソッドが呼び出されます。
AdLoader で AdListener を設定する(省略可)
AdLoader
を作成するときに、withAdListener
関数がローダに AdListener
を設定します。このメソッドは唯一のパラメータとして AdListener
を受け取ります。このパラメータは、広告ライフサイクル イベントが発生すると AdLoader
からコールバックを受け取ります。
Java
.withAdListener(new AdListener() {
// AdListener callbacks can be overridden here.
})
Kotlin
.withAdListener(object : AdListener() {
// AdListener callbacks can be overridden here.
})
広告をリクエスト
AdLoader
の作成が完了したら、それを使用して広告をリクエストします。そのために利用できるメソッドは loadAd()
と loadAds()
の 2 つです。
loadAd()
このメソッドは、1 つの広告のリクエストを送信します。
Java
adLoader.loadAd(new AdRequest.Builder().build());
Kotlin
adLoader.loadAd(AdRequest.Builder().build())
loadAds()
このメソッドは、複数の広告のリクエストを 5 つまで送信します。
Java
adLoader.loadAds(new AdRequest.Builder().build(), 3);
Kotlin
adLoader.loadAds(AdRequest.Builder().build(), 3)
どちらのメソッドも、最初のパラメータとして AdRequest
オブジェクトを受け取ります。これは、バナーやインタースティシャルと同じ AdRequest
クラスです。他の広告フォーマットの場合と同様に、AdRequest
クラスのメソッドを使用してターゲティング情報を追加できます。
複数の広告を読み込む(省略可)
loadAds()
メソッドは、追加のパラメータ(SDK がリクエストに対して読み込む広告の数)を受け取ります。この上限は 5 回で、リクエストした広告の正確な数が SDK から返されるという保証はありません。
返される Google 広告は互いに異なりますが、予約済み広告枠やサードパーティの購入者の広告は、必ずしも一意であるとは限りません。
メディエーションを使用している場合は、loadAds()
メソッドを使用しないでください。現時点では、メディエーション用に設定された広告ユニット ID に対して複数のネイティブ広告をリクエストすることはできません。
コールバック
loadAd()
を呼び出した後、あらかじめ定義されたリスナー メソッドにコールバックを 1 回行って、ネイティブ広告オブジェクトを配信するかエラーを報告します。
loadAds()
を呼び出した後、このようなコールバックが少なくとも 1 回(リクエストされた広告数を上限として)行われます。複数の広告をリクエストするアプリでは、コールバック実装で AdLoader.isLoading()
を呼び出して、読み込みプロセスが完了したかどうかを判断する必要があります。
onNativeAdLoaded()
コールバックで isLoading()
を確認する方法の例を次に示します。
Java
final AdLoader adLoader = new AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
.forNativeAd(new NativeAd.OnNativeAdLoadedListener() {
@Override
public void onNativeAdLoaded(NativeAd nativeAd) {
...
// some code that displays the ad.
...
if (adLoader.isLoading()) {
// The AdLoader is still loading ads.
// Expect more adLoaded or onAdFailedToLoad callbacks.
} else {
// The AdLoader has finished loading ads.
}
}
}).build();
adLoader.loadAds(new AdRequest.Builder().build(), 3);
Kotlin
lateinit var adLoader: AdLoader
...
adLoader = AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
.forNativeAd {
...
// some code that displays the ad.
...
if (adLoader.isLoading) {
// The AdLoader is still loading ads.
// Expect more adLoaded or onAdFailedToLoad callbacks.
} else {
// The AdLoader has finished loading ads.
}
}.build()
adLoader.loadAds(AdRequest.Builder().build(), 3)
リソースを解放する
読み込まれたネイティブ広告では、必ず destroy()
メソッドを使用してください。これにより、使用されているリソースが解放され、メモリリークが防止されます。
アクティビティの onDestroy()
メソッド内で、すべての NativeAd
参照が破棄されるようにします。
onNativeAdLoaded
コールバックでは、逆参照となる既存のネイティブ広告を破棄してください。
もう 1 つの重要なチェックは、アクティビティが破棄された場合、このメソッドが返された広告で destroy()
を呼び出し、すぐに返すことです。
Java
final AdLoader adLoader = new AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
.forNativeAd(new NativeAd.OnNativeAdLoadedListener() {
@Override
public void onNativeAdLoaded(NativeAd nativeAd) {
// If this callback occurs after the activity is destroyed, you
// must call destroy and return or you may get a memory leak.
// Note `isDestroyed()` is a method on Activity.
if (isDestroyed()) {
nativeAd.destroy();
return;
}
...
}
}).build();
Kotlin
lateinit var adLoader: AdLoader
...
adLoader = AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
.forNativeAd { nativeAd ->
// If this callback occurs after the activity is destroyed, you
// must call destroy and return or you may get a memory leak.
// Note `isDestroyed` is a method on Activity.
if (isDestroyed) {
nativeAd.destroy()
return@forNativeAd
}
...
}.build()
おすすめの方法
広告を読み込む際は次のルールに従います。
ネイティブ広告をリストで使用するアプリでは、広告リストを事前キャッシュに保存する必要があります。
広告のキャッシュ保存時には、キャッシュを消去し、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>
ハードウェア アクセラレーションを制御するオプションについて詳しくは、ハードウェア アクセラレーション ガイドをご覧ください。アクティビティが無効の場合、個々の広告ビューではハードウェア アクセラレーションを有効にできないため、アクティビティ自体でハードウェア アクセラレーションが有効になっている必要があります。
広告の表示
広告を読み込んだら、あとはユーザーに広告を表示するだけです。 方法については、ネイティブ アドバンス ガイドをご覧ください。