メディエーション

このガイドは、Google モバイル広告メディエーションに関心をお持ちのパブリッシャーを対象としています。現在の Android アプリでメディエーション アダプタを設定し、追加のリクエスト パラメータを設定する手順について説明します。

事前準備

基本的な参考情報

以下に示すヘルプセンター記事から多くの情報を得ることができます。

まだ Google Mobile Ads SDK をアプリに統合していない場合は、スタートガイドをご覧ください。

メディエーション アダプタをプロジェクトに追加する

ネットワーク アダプタと SDK を含める

広告の配信元として希望するネットワークを決定したら、メディエーション ネットワークのページからそのネットワークの SDK とアダプタをダウンロードできます。一部の SDK は、既に Google モバイル広告アダプタを含んでいます。

Android Studio を使用している場合、プロジェクトの libs フォルダにある JAR ファイルを含めます。build.gradle file に次の内容が含まれていることを確認します。

compile fileTree(dir: 'libs', include: ['*.jar'])

Eclipse では、プロジェクトの libs フォルダに JAR ファイルを含めます。プロジェクトを右クリックして [プロパティ] を選択します。次に、すべての JAR ファイルを Java ビルドパスに追加します。

AndroidManifest.xml を設定する

使用予定の各広告ネットワークの要件に応じて AndroidManifest.xml にエントリを追加します。各ネットワークの設定手順は、メディエーション ネットワークのページで確認できます。AndroidManifest.xml ファイルの変更に関連する手順を行ってください。

Google Mobile Ads SDK がサードパーティの広告ネットワーク アダプタを呼び出し、サードパーティの広告をフェッチしますので、アプリで広告ネットワークを呼び出す必要はありません。リクエスト パラメータを追加する必要がない場合は、これで完了です。追加する場合は、続けて、メディエーション広告ネットワークに追加情報を提供する方法を確認してください。

ProGuard の設定を構成する

ProGuard を使用する場合、メディエーション処理で使用する一部のコードが難読化するのを防ぐように設定する必要があります。AdMob メディエーションでは、2 つのクラスの元の名前を最終の APK で維持する必要があります(AdUrlAdapterAdMobAdapter)。どちらかのクラス名が ProGuard によって変更されると、メディエーションを行う広告ユニットの AdMob 要求に対して SDK から誤って「広告掲載なし」応答が返される原因となります。

この 2 つのクラスが ProGuard によって変更されないようにするには、次のオプションを ProGuard 設定ファイルに追加します。

-keep class com.google.ads.mediation.admob.AdMobAdapter {
    *;
}

-keep class com.google.ads.mediation.AdUrlAdapter {
    *;
}

広告オブジェクトを Activity インスタンスで初期化する

新しい広告オブジェクトのコンストラクタ(AdView など)で、Context タイプのオブジェクトを渡す必要があります。メディエーションを使用している場合、この Context は他の広告ネットワークに渡されます。広告ネットワークによっては、Activity タイプのより限定的な Context が必要で、Activity インスタンスなしでは広告を配信できない場合があります。したがって、広告オブジェクトを初期化するときに Activity インスタンスを渡して、メディエーションを行う広告ネットワークで一貫した体験が得られるようにします。

追加のリクエスト パラメータを指定する(オプション)

ユーザー属性ターゲティング

オプションで、ユーザーの性別や生年月日などによるターゲティング情報を AdRequest に追加することができます。ネットワークは、このような情報に基づいてターゲットに合った広告を配信することができます。

AdMob では、性別や生年月日を設定するためのメソッドを提供しています。これらの情報は、対応しているすべてのネットワークに渡されます。 次に例を示します。

AdRequest request = new AdRequest.Builder()
    .setGender(AdRequest.GENDER_FEMALE)
    .setBirthday(new GregorianCalendar(1985, 1, 1).getTime())  // January 1, 1985
    .build();

ネットワーク固有のパラメータ

ネットワークによっては、他の独自のリクエスト パラメータをサポートしているところもあります。以下の「v1」または「v2」の手順を参照して、そのような他のパラメータをネットワークに提供する方法を確認してください。アダプタが v1 か v2 かわからない場合は、アダプタのクラスを指定して addNetworkExtrasBundle() を呼び出します(詳細は以下の v2 を参照)。アダプタをコンパイルできたら v2 アダプタで、できない場合は v1 アダプタです。1 つのアプリで v1 アダプタと v2 アダプタの両方を使用することができます。

v1

追加のパラメータを特定のメディエーション ネットワークに渡すには、addNetworkExtras() メソッド(AdRequest)を使用します。addNetworkExtras() メソッドは、NetworkExtras を実装しているクラスのインスタンスを受け取ります。

各ネットワークは独自の追加クラスを定義しています。次の表に、一部のネットワークの該当するクラス名を示します。

広告ネットワーク 追加のパラメータ クラス
Millennial Media com.google.ads.mediation.millennial.MillennialAdapterExtras
InMobi com.google.ads.mediation.inmobi.InMobiAdapterExtras

たとえば、Millennial Media と InMobi では、ユーザーの収入を指定して関連性の高い広告を配信できます。これらのネットワークの広告をリクエストする際にメディエーション フレームワークで収入を渡すには、次のコードを使用します。

import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;
import com.google.ads.mediation.inmobi.InMobiAdapterExtras;
import com.google.ads.mediation.millennial.MillennialAdapterExtras;

/* … */

    /* Set parameters common to all networks in 'adRequest'. */

    // Millennial Media extra parameters.
    MillennialAdapterExtras millennialExtras = new MillennialAdapterExtras();
    millennialExtras.setIncomeInUsDollars(65000);

    // InMobi extra parameters.
    InMobiAdapterExtras inMobiExtras = new InMobiAdapterExtras();
    inMobiExtras.setIncome(65000);

    // Create the ad request with these extra parameters.
    AdRequest adRequest = new AdRequest.Builder()
        .addNetworkExtras(millennialExtras)
        .addNetworkExtras(inMobiExtras)
        .build();

    // Finally, request the ad.
    adView.loadAd(adRequest);
v2

追加のパラメータを特定のメディエーション ネットワークに渡すには、AdRequest.BuilderaddNetworkExtrasBundle() メソッドを使用します。パラメータの送信先にするアダプタのクラスと、アダプタで使用する値のバンドルを渡します。

次の例では、テキスト広告の背景色を AdMob に渡します。

Bundle bundle = new Bundle();
bundle.putString("color_bg", "0000FF");
AdRequest adRequest = new AdRequest.Builder()
    .addNetworkExtrasBundle(SampleAdapter.class, bundle)
    .build();

通常、アダプタで追加のパラメータをサポートしている場合、バンドルの適切なキーを表す定数、または有効なバンドルを生成してネットワークに渡すことをサポートするメソッドがあります。

リクエスト エージェント(サードパーティ ライブラリ用)

Mobile Ads SDK を参照するサードパーティ ライブラリは、setRequestAgent() メソッドを呼び出して、広告リクエストの発信元のプラットフォームを示す必要があります。たとえば「Cool Ad Network」という、サードパーティの広告ネットワークは、Mobile Ads SDK に対するリクエストのメディエーションを行い、Analytics 用にリクエストにタグを付ける場合、以下のように行うことができます。

AdRequest request = new AdRequest.Builder()
    .setRequestAgent("Cool Ad Network")
    .build();

よくある質問

特定のネットワークとメディエーションを行いたいのですが、それに対応しているアダプタがない場合はどうすればよいですか?
カスタム イベントを使用して、独自のメディエーション アダプタを記述できます。
広告リスナーはメディエーションでも使用できますか?
はい。すべてのメディエーション ネットワークで使用できます。
v1 メディエーション アダプタは Google Play 開発者サービスで使用できますか?
はい。Google Play 開発者サービスに含まれる Mobile Ads SDK は、v1 メディエーション アダプタとの後方互換を維持した設計になっています。
アプリの次のバージョンで使用するため、新しいネットワークをメディエーション設定に追加しようと思っています。このネットワークを含んでいない現在のバージョンのアプリには、どのような影響がありますか?
SDK はアダプタがないことを検出し、安全に失敗します。リクエストは、メディエーション ウォーターフォール内の次のネットワークに渡されます。
「メディエーション アダプタ x.y.z.SomeAdapter をインスタンス化できませんでした」というエラー メッセージの意味を教えてください。
このクラスを含むアダプタ ライブラリがプロジェクトにない可能性があります。メディエーション対象にするすべての広告ネットワークについて、ネットワーク アダプタと SDK を含める必要があります。

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