Requesting Consent from European Users

Google の EU ユーザーの同意ポリシーの下で、お客様は欧州経済領域(EEA)のユーザーに対して特定の情報を開示し、Cookie などのローカル ストレージの使用に対するユーザーの同意(法律で義務付けられている場合)、および広告配信を目的とした個人データ(AdID など)の使用に対するユーザーの同意を得る必要があります。このポリシーには、EU の e プライバシー指令と一般データ保護規則(GDPR)の要件が反映されています。

パブリッシャー様がこのポリシーで定められた義務を遂行できるようサポートするため、Google は Consent SDK を提供しています。この SDK はオープンソース ライブラリで、ユーザーから同意を取得するためのユーティリティ関数が含まれています。そのソースコードの全文は、 GitHub でご覧いただけます。

Google が配信する広告は「パーソナライズド広告」と「パーソナライズされていない広告」に分類され、欧州経済領域ではどちらの広告でもユーザーからの同意が必要になります。Google への広告リクエストに対してはデフォルトでパーソナライズド広告が配信され、対象ユーザーから以前に取得したデータに基づいて広告が選ばれます。また、パーソナライズされていない広告を配信するよう広告リクエストも設定することもできます。 詳しくは、「パーソナライズド広告」と「パーソナライズされていない広告」に関する説明をご覧ください

このガイドでは、Consent SDK を使ってユーザーから同意を取得する方法を説明します。また、取得した同意を Google Mobile Ads SDK に転送する方法についても説明します。

前提条件

アプリで Consent SDK をインポートするには、Google の Maven リポジトリを指す Gradle 依存関係を使用します。このリポジトリを使うには、アプリのプロジェクト レベルの build.gradle ファイルで、このリポジトリを参照する必要があります。それには、このファイルを開いて次のような allprojects セクションを探します。

プロジェクト レベルの build.gradle の例(抜粋)

allprojects {
    repositories {
        jcenter()
        maven {
            url "https://maven.google.com"
        }
    }
}

上記の maven ディレクティブが存在しない場合は、追加してください。

次に、お客様のアプリレベルの build.gradle ファイルを開き、「dependencies」セクションを探します。

アプリレベルの build.gradle の例(抜粋)

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.google.android.ads.consent:consent-library:1.0.6'
}

そして、上記の太字の行(Consent SDK の最新バージョンを読み込むように Gradle に指示する行)を追加します。作業が終わったらファイルを保存し、Gradle 同期を実施します。

Consent SDK の他のメソッドを使用するにあたっては、必ず事前に同意の取得ステータスを更新し、AdMobUI でお客様が指定した広告技術プロバイダに関する最新情報が Consent SDK に反映されるようにしてください。対象ユーザーが前回同意してから広告技術プロバイダのリストが変わった場合、同意の取得ステータスは不明ステータスに戻ります。

メディエーションをご利用でない場合

メディエーションをご利用でない場合、Consent SDK を実装して同意を取得するには 2 つの方法があります。

1 つは Consent SDK を使用して、Google 提供の同意フォームをユーザーに提示する方法です。この同意フォームには、AdMobUI でお客様が指定した広告技術プロバイダのリストが表示されます。また、同意に関するユーザーからの回答が Consent SDK によって保存されます。

もう 1 つは、Consent SDK を使用して、広告技術プロバイダの全リストをAdMobから動的に取得する方法です(詳しくは、パブリッシャーの管理による同意の取得に関する説明をご覧ください)。ただし、この方法を使う場合は、ユーザーにプロバイダのリストを示す方法をお客様がご自身で決定し、独自の同意フォームをユーザーに提示する必要があります。

対象ユーザーが同意の回答を選んだら、その同意回答を保存するよう Consent SDK に指示できます(詳しくは、パブリッシャーの管理による同意の保存に関する説明をご覧ください)。

なお、同意の取得に際して、パーソナライズされていない広告の配信に限ってユーザーが同意した場合には、その同意を Google Mobile Ads SDK に転送する必要があります。

AdMobメディエーションをご利用の場合

Consent SDK を使用すると、広告技術プロバイダの全リストをAdMobから動的に取得できます(詳しくは、パブリッシャーの管理による同意の取得に関する説明をご覧ください)。ただし、他の広告ネットワークで使用する追加の広告技術プロバイダについては、同意の取得に向けてユーザーに提示すべきものをご自身で判断する必要があります。

お客様はアプリ デベロッパーとして、Consent SDK から返される広告技術プロバイダと他の広告ネットワークのプロバイダの両方について、ユーザーの同意を取得する必要があります。また、同意に関するユーザーからの回答をご自身で保存して Google Mobile Ads SDK に転送することも必要になります。

Google では現在のところ、メディエーション ネットワークに関する同意については取得も処理もできません。そのため、それぞれの広告ネットワークについて、お客様がご自身で個別に同意を取得して処理する必要があります。現在 Google では、オープンソースとバージョン対応のすべてのメディエーション ネットワークと積極的に連携し、同意の転送方法に関する詳しいドキュメントを更新するよう努めています。次のメディエーション ネットワークについては、すでにドキュメントが公開されています。

Consent SDK を使う場合は、アプリを起動するたびにユーザーの同意ステータスを把握することをおすすめします。これを行うには、ConsentInformation インスタンスで requestConsentInfoUpdate() を呼び出します。

import com.google.ads.consent.*;

public class MainActivity extends Activity {
    ...

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        ConsentInformation consentInformation = ConsentInformation.getInstance(context);
        String[] publisherIds = {"pub-0123456789012345"};
        consentInformation.requestConsentInfoUpdate(publisherIds, new ConsentInfoUpdateListener() {
            @Override
            public void onConsentInfoUpdated(ConsentStatus consentStatus) {
                 // User's consent status successfully updated.
            }

            @Override
            public void onFailedToUpdateConsentInfo(String errorDescription) {
                 // User's consent status failed to update.
            }
        });
        ...
    }
    ...
}

requestConsentInfoUpdate() を呼び出すには、次の 2 つの引数が必要です。

同意情報が正常に更新されると、ConsentInfoUpdateListeneronConsentInfoUpdated() メソッドを介して最新の同意ステータスが提供されます。返される ConsentStatus には、次のような値が含まれる可能性があります。

同意ステータス 定義
ConsentStatus.PERSONALIZED 対象ユーザーは、パーソナライズド広告について同意しています。
ConsentStatus.NON_PERSONALIZED 対象ユーザーは、パーソナライズされていない広告について同意しています。
ConsentStatus.UNKNOWN 対象ユーザーは、パーソナライズド広告やパーソナライズされていない広告について、同意も拒否もしていません。

同意情報が正常に更新されると、ConsentInformation.getInstance(context).isRequestLocationInEeaOrUnknown() をチェックすることによって、対象ユーザーが欧州経済領域にいるか、またはリクエスト元の地域が不明かどうかを確認できます。

isRequestLocationInEeaOrUnknown() メソッドが false を返した場合は、対象ユーザーが欧州経済領域にいないため、EU ユーザーの同意ポリシーに基づく同意の取得は不要となり、Google Mobile Ads SDK に対して広告リクエストを行えます。

isRequestLocationInEeaOrUnknown() メソッドが true を返した場合:

  • 返された ConsentStatus の値が PERSONALIZED または NON_PERSONALIZED だった場合は、対象ユーザーがすでに同意済みなので、Google Mobile Ads SDK に同意を転送できます

  • 返された ConsentStatus の値が UNKNOWN だった場合については、同意の取得に関する下の説明で、同意を取得するためのユーティリティ メソッドの使用方法をご確認ください。

Google の Consent SDK には、ユーザーからの同意を取得する 2 つの方法があります。

なお、同意を変更または撤回するためのオプションをユーザーに忘れずに提供してください。

Google 提供の同意フォームは全画面表示可能なフォームで、アプリ コンテンツの上に重ねて表示されます。このフォームは、次のオプションを組み合わせて対象ユーザーに提示するよう設定できます。

  • パーソナライズド広告の表示に同意する
  • パーソナライズされていない広告の表示に同意する
  • アプリの有料版(広告表示なし)を使用する

同意テキストは内容をよくご確認ください。デフォルトで表示されるメッセージは、アプリの収益化に Google を利用している場合には適切だと考えられます。しかしながら、この同意テキストがお客様に適しているかどうかについて、Google が法律的な助言をすることはできかねます。Google 提供の同意フォームの同意テキストを更新するには、Consent SDK に含まれている consentform.html ファイルを必要に応じて変更してください。

Google 提供の同意フォームは、ConsentForm クラスを使って設定および表示されます。次のコードは、3 つの同意オプションすべてを含む ConsentForm の作成方法を示しています。

URL privacyUrl = null;
try {
    // TODO: Replace with your app's privacy policy URL.
    privacyUrl = new URL("https://www.your.com/privacyurl");
} catch (MalformedURLException e) {
    e.printStackTrace();
    // Handle error.
}
ConsentForm form = new ConsentForm.Builder(context, privacyUrl)
    .withListener(new ConsentFormListener() {
        @Override
        public void onConsentFormLoaded() {
            // Consent form loaded successfully.
        }

        @Override
        public void onConsentFormOpened() {
            // Consent form was displayed.
        }

        @Override
        public void onConsentFormClosed(
                ConsentStatus consentStatus, Boolean userPrefersAdFree) {
            // Consent form was closed.
        }

        @Override
        public void onConsentFormError(String errorDescription) {
            // Consent form error.
        }
    })
    .withPersonalizedAdsOption()
    .withNonPersonalizedAdsOption()
    .withAdFreeOption()
    .build();

上記のメソッドでは、次のオプションを使って Google 提供の同意フォームを構成しています。

withListener()
ConsentForm のリスナーを登録します。ConsentFormListener 内のオーバーライド可能なメソッドは、それぞれが同意フォームのライフサイクルのイベントに対応しています。
オーバーライド可能なメソッド
onConsentFormLoaded 同意フォームを読み込みました。
onConsentFormError 同意フォームを読み込めませんでした。errorDescription パラメーターには、エラーの説明が含まれます。
onConsentFormOpened 同意フォームが開かれました。
onConsentFormClosed 同意フォームが閉じられました。メソッドのパラメータには、次の情報が含まれます。
  • consentStatus の値は、対象ユーザーの最新の同意ステータスを表す ConsentStatus になります。
  • userPrefersAdFree の値は、対象ユーザーが広告表示のない有料版アプリの使用を選んだ場合 true になります。
withPersonalizedAdsOption()
パーソナライズド広告のオプションが同意フォームに表示されることを示します。
withNonPersonalizedAdsOption()
パーソナライズされていない広告のオプションが同意フォームに表示されることを示します。
withAdFreeOption()
広告表示のないアプリのオプションが同意フォームに表示されることを示します。

ConsentForm オブジェクトを作成したら、ConsentFormload() メソッドを呼び出すことで同意フォームを読み込みます。次の例をご覧ください。

form.load();

対象ユーザーに Google 提供の同意フォームを提示するには、ConsentForm インスタンスで show() を呼び出します。次の例をご覧ください。

form.show();

対象ユーザーがオプションを選んでフォームを閉じると、Consent SDK はそのユーザーの選択を保存し、onConsentFormClosed イベントを呼び出します。お客様はこのイベントをリッスンして、Google Mobile Ads SDK に同意を転送できます。

ご自身で同意を取得する場合は、ConsentInformation クラスの getAdProviders() メソッドを使うと、アプリ内で使われたパブリッシャー ID に関連する広告技術プロバイダの情報を取得できます。なお、ユーザーの同意は、お客様のパブリッシャー ID で設定されたすべての広告技術プロバイダについて必要です。

List<AdProvider> adProviders =
    ConsentInformation.getInstance(context).getAdProviders();

そうすると、広告技術プロバイダのリストを使用して、ご自身で同意を取得できるようになります。

同意の取得にあたっては、ConsentInformation クラスの setConsentStatus() メソッドを使って、対象ユーザーの回答に対応する ConsentStatus を記録します。

ConsentInformation.getInstance(context)
    .setConsentStatus(ConsentStatus.PERSONALIZED);

Consent SDK に同意をレポートすると、Google Mobile Ads SDK に同意を転送できるようになります。

ユーザーが同意を更新できるようにするため、ユーザーが同意ステータスの更新を選んだ場合には、同意取得の手順を繰り返してください。

対象ユーザーが同意年齢に満たないことをパブリッシャーが認識した場合は、すべての広告リクエストに TFUA(Tag For Users under the Age of Consent in Europe: 同意年齢に満たない欧州ユーザーに対するタグ)を設定してください。アプリからのすべての広告リクエストにこのタグを含めるには、 setTagForUnderAgeOfConsent(true) を呼び出します。この設定は、その後のすべての広告リクエストで有効になります。

ConsentInformation.getInstance(context).setTagForUnderAgeOfConsent(true);

TFUA 設定が有効になると、Google 提供の同意フォームが読み込まれなくなります。TFUA を含むすべての広告リクエストがパーソナライズド広告とリマーケティングの対象から外れます。TFUA によって、第三者広告技術プロバイダ(広告測定ピクセル事業者や第三者配信事業者など)へのリクエストも無効になります。

広告リクエストから TFUA を削除するには、 setTagForUnderAgeOfConsent(false) を呼び出します。

テスト

Consent SDK は、 ConsentInformation.getInstance(context).isRequestLocationInEeaOrUnknown() の値に応じて動作が異なります。 たとえば、対象ユーザーが欧州経済領域にいない場合は、同意フォームを読み込めません。

欧州経済領域の内外の両方でアプリを簡単にテストできるよう、Consent SDK にはデバッグ オプションが用意されており、Consent SDK の他のメソッドを呼び出す前に設定することができます。

  1. 同意ステータスの更新の手順に沿って、requestConsentInfoUpdate を呼び出します。そのうえでアプリを起動して、logcat の出力で次のログを確認します。

    I/ConsentInformation: Use
    ConsentInformation.getInstance(context).addTestDevice("**33BE2250B43518CCDA7DE426D04EE231**")
    to get test ads on this device.
  2. logcat の広告 ID を使用して、ご利用の端末をデバッグ端末として次のようにホワイトリストに登録します。

    ConsentInformation.getInstance(context).addTestDevice("33BE2250B43518CCDA7DE426D04EE231");
    
  3. 最後に、setDebugGeography を呼び出して、ご希望のテスト対象地域を設定します。

    // Geography appears as in EEA for test devices.
    ConsentInformation.getInstance(context).
        setDebugGeography(DebugGeography.DEBUG_GEOGRAPHY_EEA);
    // Geography appears as not in EEA for debug devices.
    ConsentInformation.getInstance(context).
        setDebugGeography(DebugGeography.DEBUG_GEOGRAPHY_NOT_EEA);
    

上記の手順が完了すると、同意ステータスの更新を行う呼び出しで、デバッグ対象地域が考慮されるようになります。

Google Mobile Ads SDK のデフォルトの動作では、パーソナライズド広告が配信されます。パーソナライズされていない広告の配信に限ってユーザーが同意した場合には、AdRequestオブジェクトを設定し、パーソナライズされていない広告だけをリクエストするように指定できます。次のコードでは、ユーザーが欧州経済領域にいるかどうかにかかわらず、パーソナライズされていない広告がリクエストされます。

Bundle extras = new Bundle();
extras.putString("npa", "1");

AdRequest request = new AdRequest.Builder()
        .addNetworkExtrasBundle(AdMobAdapter.class, extras)
        .build();

現在のところ、パーソナライズされていない広告をリクエストした場合、その広告リクエストの URL には &npa=1 が含まれます。ただし、この情報は Google Mobile Ads SDK に関する内部の実装情報であり、変更される可能性があります。

よくある質問

Consent SDK でサポートされる広告技術プロバイダの数はどれくらいですか?
Consent SDK では、パブリッシャー様が有効にできる広告技術プロバイダの数に制限を設けていません。
AdMobUI での設定を変更した場合、SDK から返される広告技術プロバイダのリストは自動的に更新されますか?
はい。お客様がAdMobUI で広告技術プロバイダのリストに変更を加えた場合、その変更内容は 1 時間ほどで Google の広告サーバーに反映されます。

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

Google AdMob > Mobile Ads SDK > Android
Google AdMob > Mobile Ads SDK > Android
ご不明な点がありましたら、Google のサポートページをご覧ください。