ネイティブ アドバンス広告

この機能は現在、ベータ版の限定リリースとして提供しています。ベータ版への参加をご希望の方は、アカウント マネージャーにお問い合わせください。この機能は、ベータ版提供の終了時にすべてのパブリッシャーにご利用いただけるようになる予定です。

このガイドでは、Google Mobile Ads SDK を使用して Android アプリで AdMob のネイティブ アドバンス広告を実装する方法と、その際に注意すべき重要な事項を説明します。 以下の手法とコード例は、Eclipse プロジェクトと Android Studio プロジェクトの両方で使用できるため、このガイドは、どちらの IDE を使用するデベロッパーにも役立ちます。

事前準備

このガイドでは、Google Mobile Ads SDK の実践的知識があることを前提としています。予備知識がない場合は、Android Studio スタートガイドを通読されることをおすすめします。

ネイティブ アドバンス広告とは

ネイティブ アドバンス広告は、プラットフォーム ネイティブの UI コンポーネントを使用してユーザーに広告アセットを表示するフォーマットです。 この広告は、レイアウトを作成したものと同じ種類のビューを使用して表示され、表示される環境のビジュアル デザインに合わせたフォーマットに設定できます。コード上では、ネイティブ広告が読み込まれると、アプリがその広告のアセットを格納する NativeAd オブジェクトを受け取り、(SDK ではなく)アプリ自身がその広告アセットを表示するようになっています。

標準的なネイティブ アドバンス広告フィールド記述には、アプリ インストールとコンテンツの 2 つがあります。 アプリ インストール広告は NativeAppInstallAd で表され、コンテンツ広告は NativeContentAd で表されます。 これらのオブジェクトに、ネイティブ広告のアセットが格納されます。

広告を読み込む

ネイティブ アドバンス広告は、AdLoader クラスを使用して読み込まれます。このクラスには、作成中にカスタマイズする個別の AdLoader.Builder クラスが含まれます。 AdLoader のビルド中にこのクラスにリスナーを追加することで、アプリで受け取ることができる広告フォーマットのタイプを指定します。 これにより、AdLoader は指定されたタイプのみをリクエストします。

AdLoader のビルド

次のコードは、アプリ インストール広告またはコンテンツ広告を単一のリクエストで読み込むことができる AdLoader をビルドする方法を示しています。

AdLoader adLoader = new AdLoader.Builder(context, "ca-app-pub-3940256099942544/2247696110")
    .forAppInstallAd(new OnAppInstallAdLoadedListener() {
        @Override
        public void onAppInstallAdLoaded(NativeAppInstallAd appInstallAd) {
            // Show the app install ad.
        }
    })
    .forContentAd(new OnContentAdLoadedListener() {
        @Override
        public void onContentAdLoaded(NativeContentAd contentAd) {
            // Show the content ad.
        }
    })
    .withAdListener(new AdListener() {
        @Override
        public void onAdFailedToLoad(int errorCode) {
            // Handle the failure by logging, altering the UI, etc.
        }
    })
    .withNativeAdOptions(new NativeAdOptions.Builder()
            // Methods in the NativeAdOptions.Builder class can be
            // used here to specify individual options settings.
            .build())
    .build();

個別のフォーマットを準備する

上記の最初のメソッドは、特定のタイプのネイティブ広告用に AdLoader を準備するためのものです。

forAppInstallAd()
このメソッドを呼び出すと、アプリ インストール広告をリクエストするよう AdLoader が設定されます。 広告の読み込みが正常に完了すると、 リスナー オブジェクトの onAppInstallAdLoaded() メソッドが呼び出されます。
forContentAd()
このメソッドは forAppInstallAd() と同じように機能しますが、 コンテンツ広告を対象としています。広告の読み込みが正常に完了すると、 リスナー オブジェクト上の onContentAdLoaded() メソッドが呼び出されます。

AdLoader が複数のネイティブ広告フォーマットを処理する場合でも、SDK は広告リクエストを 1 回のみ行います。 パブリッシャーの収益を最大化する広告が Google によって選択され、返されます。

AdLoader での AdListener の使用

上記の AdLoader の作成中には、withAdListener 関数が AdListener を設定します。

このステップの実行は任意です。 このメソッドは、広告ライフサイクル イベントの発生時に AdLoader からコールバックを受け取る AdListener を、唯一のパラメータとして受け入れます。

.withAdListener(new AdListener() {
  // AdListener callbacks like OnAdFailedToLoad, OnAdOpened, and so on,
  // can be overridden here.
})

AdListeners のネイティブ アドバンス広告での動作と、バナーやインタースティシャルでの動作には、重要な違いが 1 つあります。 AdLoader には、広告が読み込まれたときに使用する、フォーマット固有のリスナー(NativeAppInstallAd.OnAppInstallAdLoadedListener など)があるため、AdListeneronAdLoaded() メソッドは、ネイティブ広告が読み込まれたときに呼び出されません

withNativeAdOptions()

上記の AdLoader の作成で使用される最後の関数は、オプション メソッド withNativeAdOptions() です。

.withNativeAdOptions(new NativeAdOptions.Builder()
        // Methods in the NativeAdOptions.Builder class can be
        // used here to specify individual options settings.
        .build()
)

アプリでは NativeAdOptions オブジェクトを使用して、リクエストを行うときに使用する特定のオプションを設定できます。このオブジェクトの NativeAdOptions.Builder クラスが、インスタンスの作成時に使用するこのようなメソッドを提供します。

setReturnUrlsForImageAssets()

広告の画像アセットは、DrawableUri を保持する NativeAd.Image のインスタンス経由で返されます。 このオプションを false に設定すると(これがデフォルト設定です)、SDK によって画像アセットが自動的にフェッチされ、DrawableUri の両方が自動的に取り込まれます。 true に設定すると、Uri のみが取り込まれるため、実際の画像を自由にダウンロードできます。

setImageOrientation()

端末のさまざまな画面の向きと一致するように、利用できる画像が複数あるクリエイティブもあります。 このメソッドを NativeAdOptions 方向定数 ORIENTATION_PORTRAIT または ORIENTATION_LANDSCAPE のいずれか を指定して呼び出すと、それぞれ縦向きまたは横向きの画像をリクエストします。 このメソッドを呼び出さない場合、デフォルト値 ORIENTATION_ANY が使用されます。 もちろん、状況に応じて ORIENTATION_ANY 定数を使用してこのメソッドを呼び出すことができます。

setRequestMultipleImages()

画像アセットは、1 つの画像ではなく一連の画像を格納することがあります。 この値を true に設定することで、複数の画像を含むアセットではすべての画像をアプリで表示できることを示します。 false(デフォルト値)に設定すると、複数の画像を含むアセットについて最初の画像のみを提供するように SDK に指示します。

AdLoader の作成時に withNativeAdOptions() を呼び出さない場合、各オプションのデフォルト値が使用されます。

setAdChoicesPlacement()

AdChoices オーバーレイはデフォルトで右上隅に設定されます。アプリでは、このプロパティを次のいずれかに設定して、このオーバーレイのレンダリング場所を変更できます。

  • ADCHOICES_TOP_LEFT
  • ADCHOICES_TOP_RIGHT
  • ADCHOICES_BOTTOM_RIGHT
  • ADCHOICES_BOTTOM_LEFT

広告の読み込み

AdLoader のビルドが完了したら、以下のように loadAd() メソッドを呼び出して広告をリクエストします。

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

なお、AdLoader は、バナーやインタースティシャルと同じ AdRequest クラスを使用します。 このクラスのメソッドを使用して、他の広告タイプの場合と同様にターゲット設定情報を追加できます。

1 つの AdLoader で複数のリクエストを行えますが、これは、一度に 1 つずつ行う場合に限られます。 AdLoader を再利用する場合は、必ず、各リクエストが完了するまで待ってから、loadAd を呼び出して次のリクエストを開始してください。 複数の広告を同時にリクエストする必要がある場合はいつでも、複数の AdLoader オブジェクトを使用できます。

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

ネイティブ アドバンス広告を表示するアプリでは、広告を実際に表示する前に、広告を自由にリクエストできます。 多くの場合、そうすることがおすすめです。 たとえば、広告が混在している状態でアイテムのリストを表示するアプリは、(ユーザーがビューをスクロールしてはじめて表示されるものや、まったく表示されないものも含めて)リスト全部の広告を読み込むことができます。

広告のプリフェッチは便利な手法ですが、表示されない古い広告を長期間保持しないようにすることが重要です。 1 時間以上表示しないで保持されている広告オブジェクトを破棄して、新しいリクエストによる新しい広告で置き換えてください。

広告の表示

広告が読み込まれると、SDK によって該当する広告フォーマットのリスナーが呼び出されます。 この後、広告を表示するのはアプリの役割ですが、すぐに表示する必要はありません。 システム定義の広告フォーマットを表示しやすくするために、SDK では、有用なリソースをいくつか提供しています。

広告ビュークラス

システム定義のフォーマットごとに、対応する広告ビューのクラス (アプリ インストール広告用の NativeAppInstallAdView とコンテンツ広告用の NativeContentAdView)があります。 これらの広告ビュークラスは ViewGroup です。対応するフォーマットの広告のルートとしてこれを使用する必要があります。 たとえば、1 つの NativeContentAdView は、1 つのコンテンツ広告に対応します。 広告のアセットを表示するために使用するビュー(たとえば、スクリーンショット アセットを表示する ImageView)はそれぞれ、その NativeContentAdView オブジェクトの子である必要があります。

RelativeLayout を使用してアセットビューを表示するコンテンツ広告のビュー階層は、次のようになります。

また、これらの広告ビューのクラスは、個別のアセットに使用されるビューを登録するためのメソッドと、NativeAd オブジェクト自体を登録するためのメソッドも提供しています。 このようにビューを登録すると、SDK で以下のようなタスクを自動的に処理できます。

  • クリックの記録
  • インプレッション(画面に最初のピクセルが表示されたとき)の記録
  • AdChoices オーバーレイの表示

AdChoices オーバーレイ

AdChoices オーバーレイは、SDK によって各広告ビューに追加されます。 ネイティブ広告ビューの適切な場所に、自動的に挿入される AdChoices ロゴのためのスペースを残してください。 また、AdChoices オーバーレイが見やすいことが重要です。このため、背景のカラーや画像を適切に選択してください。 オーバーレイの外観や機能の詳細については、ネイティブ アドバンス広告フィールド記述をご覧ください。

サンプルコード

システム定義のネイティブ広告フォーマットを表示する手順は、次のとおりです。

  1. 正しい広告ビュークラスのインスタンスを作成します。
  2. 表示する広告アセットごとに以下の手順を行います。
    1. 広告オブジェクトで、アセットビューにアセットを取り込みます。
    2. アセットビューを ViewGroup クラスに登録します。
  3. 広告オブジェクトを ViewGroup クラスに登録します。

NativeContentAd を表示するサンプル関数を次に示します。

private void displayContentAd(ViewGroup parent, NativeContentAd contentAd) {
    // Inflate a layout and add it to the parent ViewGroup.
    LayoutInflater inflater = (LayoutInflater) parent.getContext()
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    NativeContentAdView adView = (NativeContentAdView) inflater
            .inflate(R.layout.my_content_ad, parent);

    // Locate the view that will hold the headline, set its text, and call the
    // NativeContentAdView's setHeadlineView method to register it.
    TextView headlineView = (TextView) adView.findViewById(R.id.contentad_headline);
    headlineView.setText(contentAd.getHeadline());
    adView.setHeadlineView(headlineView);

    ...
    // Repeat the above process for the other assets in the NativeContentAd using
    // additional view objects (Buttons, ImageViews, etc).
    ...

    // Call the NativeContentAdView's setNativeAd method to register the
    // NativeAdObject.
    adView.setNativeAd(contentAd);

    // Place the AdView into the parent.
    parent.addView(adView);
}

個々のタスクは次のようになります。

レイアウトを拡張する

LayoutInflater inflater = (LayoutInflater) parent.getContext()
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
NativeContentAdView adView = (NativeContentAdView) inflater
        .inflate(R.layout.my_content_ad, parent);

この例では、コンテンツ広告を表示するビューを含む XML レイアウトを拡張し、ルート要素である NativeContentAdView への参照を探しています。 これは関数の使用に慣れるための例ですが、フラグメントやアクティビティに NativeContentAdView があればそれを再利用したり、レイアウト ファイルを使用せずにインスタンスを動的に作成することもできます。

アセットビューに取り込んで登録する

このサンプルコードは、見出しを表示するために使われるビューを探し、 contentAd で提供される文字列アセットを使ってそのテキストを設定した後、 NativeContentAdView オブジェクトにビューを登録します。

TextView headlineView = (TextView) adView.findViewById(R.id.contentad_headline);
headlineView.setText(contentAd.getHeadline());
adView.setHeadlineView(headlineView);

ビューを探し、その値を設定して広告ビュークラスに登録するという処理を、ネイティブ広告オブジェクトで提供されるアセットごとに繰り返す必要があります。

広告オブジェクトを登録する

この最後のステップでは、広告を表示するビューに広告オブジェクトを登録します。

adView.setNativeAd(contentAd);

コードのテスト

実装をテストしやすくするために、次の AdMob 広告ユニット ID が利用できるようになっています。

ca-app-pub-3940256099942544/3986624511

この広告ユニットに行ったリクエストは、「テスト」リクエストと見なされ、実稼働環境の統計情報にはカウントされません。

フィードバックを送信...