ネイティブ広告

ネイティブ広告は、プラットフォームのネイティブ UI コンポーネントを通じてユーザーに表示される広告アセットです。これらは、すでにレイアウトを作成しているのと同じタイプのビューを使用して表示され、アプリのビジュアル デザインに合わせてフォーマットできます。

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

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

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

前提条件

必ずテスト広告でテストする

アプリの作成とテストでは、実際の配信中の広告ではなくテスト広告を使用するようにしてください。

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

ca-app-pub-3940256099942544/2247696110

すべてのリクエストに対してテスト広告を返すように特別に構成されており、コーディング、テスト、デバッグを行うときにアプリで使用できます。アプリを公開する前に、必ず独自の広告ユニット 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() メソッドは、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 の作成が完了したら、それを使用して広告のリクエストを行います。 このためには、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() の呼び出し後、事前に定義されたリスナー メソッドに対して単一のコールバックが行われ、ネイティブ広告オブジェクトの配信またはエラーの報告が行われます。

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 時間後に再読み込みしてください。

  • 最初のリクエストの読み込みが完了するまで、AdLoaderloadAd() または 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>

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

広告を表示する

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