ネイティブ広告

ネイティブ広告は、プラットフォームのネイティブ UI コンポーネントを通じてユーザーに表示される広告アセットです。作成済みのレイアウトに溶け込むように表示され、アプリの視覚デザインに合わせてフォーマットすることができます。

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

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

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

前提条件

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

アプリの開発とテストでは必ずテスト広告を使用し、配信中の実際の広告は使用しないでください。

テスト広告を読み込む最も簡単な方法は、次に示す Android のネイティブ広告向けのテスト専用広告ユニット ID を使用することです。

/21775744923/example/native

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

Google Mobile Ads SDK のテスト広告の仕組みについて詳しくは、テスト広告をご覧ください。

広告を読み込む

ネイティブ広告の読み込みには AdLoader クラスを使用します。このクラスは、独自の Builder クラスを使って作成時にカスタマイズできるようになっています。AdLoader の作成時にリスナーを追加すると、アプリで受け取るネイティブ広告の種類を指定できます。その後、AdLoader はそれらのタイプのみをリクエストします。

AdLoader を作成する

次のコードは、ネイティブ広告を読み込む AdLoader の作成方法を示しています。

Java

AdLoader adLoader = new AdLoader.Builder(context, "/21775744923/example/native")
    .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, "/21775744923/example/native}")
    .forNativeAd { ad : NativeAd ->
        // Show the ad.
    }
    .withAdListener(object : AdListener() {
        override fun onAdFailedToLoad(adError: LoadAdError) {
            // Handle the failure.
        }
    })
    .withNativeAdOptions(NativeAdOptions.Builder()
            // Methods in the NativeAdOptions.Builder class can be
            // used here to specify individual options settings.
            .build())
    .build()

forNativeAd() メソッドは、AdLoaderNativeAd 形式用に準備します。広告が正常に読み込まれると、リスナー オブジェクトの 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 の作成が完了したら、それを使用して広告のリクエストを行います。 最初のパラメータとして AdManagerAdRequest オブジェクトを受け取る loadAd() メソッドを使用します。これは、バナーやインタースティシャルで使用するのと同じ AdManagerAdRequest クラスです。ターゲティング情報を追加するには、他の広告フォーマットの場合と同様に AdManagerAdRequest クラスのメソッドを使用できます。

loadAd()

このメソッドは、1 つの広告に対してリクエストを送ります。

Java

adLoader.loadAd(new AdManagerAdRequest.Builder().build());

Kotlin

adLoader.loadAd(AdManagerAdRequest.Builder().build())

コールバック

loadAd() を呼び出すと、ネイティブ広告オブジェクトの配信かエラーの報告を行うために、前に定義したリスナー メソッドに単一のコールバックが行われます。

リソースを解放する

読み込まれたネイティブ広告には必ず destroy() メソッドを使用してください。これにより、使用されていたリソースが解放され、メモリリークが防止されます。

アクティビティの onDestroy() メソッドで、すべての NativeAd 参照が破棄されていることを確認します。

onNativeAdLoaded コールバックで、逆参照される既存のネイティブ広告をすべて破棄します。

もう 1 つの重要なチェックは、アクティビティが破棄されたかどうかです。破棄されている場合は、返された広告で destroy() を呼び出して、すぐに結果を返します。

Java

final AdLoader adLoader = new AdLoader.Builder(this, "/21775744923/example/native")
        .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, "/21775744923/example/native")
    .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 時間後に再読み込みしてください。

  • 最初のリクエストの読み込みが完了するまで、AdLoaderloadAd() を呼び出さないでください。

  • ネイティブ広告のキャッシュ保存は、必要なものに限定します。たとえば、プリキャッシュする場合は、画面にすぐに表示される広告のみをキャッシュに保存します。ネイティブ広告のメモリ使用量は大きく、ネイティブ広告を破棄せずにキャッシュに保存すると、メモリ使用量が増加します。

  • 使用しなくなったネイティブ広告を破棄します。

動画広告のハードウェア アクセラレーション

ネイティブ広告ビューで動画広告を正常に表示するには、ハードウェア アクセラレーションを有効にする必要があります。

ハードウェア アクセラレーションはデフォルトで有効になっていますが、一部のアプリでは無効にすることもできます。アプリが該当する場合は、広告を使用するアクティビティ クラスでハードウェア アクセラレーションを有効にすることをおすすめします。

ハードウェア アクセラレーションの有効化

ハードウェア アクセラレーションをグローバルにオンにしてアプリが正しく動作しない場合は、個々のアクティビティに対しても制御できます。ハードウェア アクセラレーションを有効または無効にするには、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>

ハードウェア アクセラレーションを制御するオプションについて詳しくは、ハードウェア アクセラレーション ガイドをご覧ください。アクティビティが無効の場合、個々の広告ビューではハードウェア アクセラレーションを有効にできないため、アクティビティ自体でハードウェア アクセラレーションが有効になっている必要があります。

広告を表示する

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