フィードバックをお寄せください。Google Mobile Ads SDK の改善に役立てさせていただきます。Google Mobile Ads SDK 年次アンケート(2023 年)にご回答をお願いいたします。締め切りは 2023 年 5 月 5 日です。

ネイティブ広告

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

ネイティブ広告は、プラットフォームに対してネイティブな UI コンポーネントを通じてユーザーに表示される広告アセットです。これらは、レイアウトをすでに構築しているのと同じ種類のビューを使用して表示され、ユーザー エクスペリエンスの視覚デザインに溶け込むようフォーマットできます。コーディングの観点では、これはネイティブ広告の読み込み時にアプリがアセットを含む NativeAd オブジェクトを受け取り、(Google Mobile Ads SDK ではなく)アプリがそれらを表示することを意味します。

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

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

Prerequisites

実装

ネイティブ広告の読み込みには 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()

NativeAd フォーマットの準備

上記の最初のメソッドでは、NativeAd 形式の AdLoader を準備します。

forNativeAd()
このメソッドを呼び出すと、AdLoader がネイティブ広告をリクエストするように構成されます。広告が正常に読み込まれると、リスナー オブジェクトの onNativeAdLoaded() メソッドが呼び出されます。

AdLoader が広告リクエストを行うと、パブリッシャーの収益を最大化する広告が選択されて返されます。

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 広告はすべて異なります。予約された広告枠やサードパーティの購入者(ウォーターフォールのメディエーションや入札を設定した購入者を含む)からの広告は、一意であるとは限りません。

コールバック

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() メソッドを使用します。これにより、使用されているリソースが解放され、メモリリークが防止されます。

すべての NativeAd 参照がアクティビティの onDestroy() メソッドで破棄されるようにします。

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()

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

アプリの開発とテストでは必ずテスト広告を使用し、配信中の実際の広告は使用しないでください。実際の広告を使用すると、アカウントが停止される可能性があります。

テスト広告を読み込む際は、次に示すように、Android の Native Advanced では専用のテスト広告ユニット ID を使うのが最も簡単な方法です。

ca-app-pub-3940256099942544/2247696110

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

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

広告をリクエストするタイミング

ネイティブ広告を表示するアプリでは、実際に表示するタイミングを事前に指定できます。ほとんどの場合、この方法をおすすめします。たとえば、ネイティブ広告が混在したアイテムのリストを表示するアプリでは、ユーザーがビューをスクロールした後にのみ表示される広告もあれば、まったく表示されないアプリもあることを認識し、リスト全体のネイティブ広告を読み込むことができます。

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

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

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

ハードウェア アクセラレーションを有効にする

ハードウェア アクセラレーションをグローバルに有効にしてもアプリが正しく動作しない場合は、個々のアクティビティに対しても同様に制御できます。ハードウェア アクセラレーションを有効または無効にするには、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 アクセラレーション ガイドをご覧ください。アクティビティが無効になっている場合、個々の広告ビューではハードウェア アクセラレーションを有効にできません。そのため、アクティビティ自体でハードウェア アクセラレーションが有効になっている必要があります。

NativeAd を表示する

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