お客様は Google の EU ユーザーの同意ポリシーのもとで、欧州経済領域(EEA)と英国のユーザーに対して特定の情報を開示し、Cookie などのローカル ストレージの使用に対するユーザーの同意(法律で義務付けられている場合)、および広告配信を目的とした個人データ(AdID など)の使用に対するユーザーの同意を得る必要があります。このポリシーには、EU の e プライバシー指令と一般データ保護規則(GDPR)の要件が反映されています。
このガイドでは、UMP SDK の一部として GDPR IAB TCF v2 メッセージをサポートするために必要な手順について説明します。UMP SDK でアプリを実行する方法の概要とメッセージのセットアップの基本について説明する、スタートガイドも合わせてご参照ください。以下のガイダンスは GDPR IAB TCF v2 メッセージ専用です。詳しくは、IAB の要件が EU ユーザー向け同意メッセージに与える影響をご覧ください。
前提条件
- スタートガイドの手順を完了していること。
- アプリ向けの欧州の規制に関するメッセージを作成します。
同意の取り消し
GDPR では、ユーザーがいつでも同意を取り消せるように、同意の取り消しが義務付けられています。ユーザーが同意の選択を取り消す方法を実装するには、プライバシー オプションをご覧ください。
同意年齢に満たないユーザー向けのタグ
ユーザーが同意年齢に満たしているかどうかを示すには、
setTagForUnderAgeOfConsent
(TFUA)を設定します。TFUA を true
に設定すると、UMP SDK はユーザーの同意をリクエストしません。アプリの対象ユーザーが複数の年齢層にまたがっている場合は、子供ユーザーに対してこのパラメータを設定して、同意を求めないようにします。
次の例では、UMP の同意リクエストで TFUA を true に設定しています。
Java
ConsentRequestParameters params = new ConsentRequestParameters
.Builder()
// Indicate the user is under age of consent.
.setTagForUnderAgeOfConsent(true)
.build();
consentInformation = UserMessagingPlatform.getConsentInformation(this);
consentInformation.requestConsentInfoUpdate(
this,
params,
(OnConsentInfoUpdateSuccessListener) () -> {
// ...
},
(OnConsentInfoUpdateFailureListener) requestConsentError -> {
// ...
});
Kotlin
val params = ConsentRequestParameters
.Builder()
// Indicate the user is under age of consent.
.setTagForUnderAgeOfConsent(true)
.build()
consentInformation = UserMessagingPlatform.getConsentInformation(this)
consentInformation.requestConsentInfoUpdate(
this,
params,
ConsentInformation.OnConsentInfoUpdateSuccessListener {
// ...
},
ConsentInformation.OnConsentInfoUpdateFailureListener {
requestConsentError ->
// ...
})
メディエーション
公開済みの GDPR メッセージに広告パートナーを追加するの手順に沿って、メディエーション パートナーを広告パートナー リストに追加します。追加しない場合、アプリに広告が配信されないことがあります。
メディエーション パートナーには、GDPR 遵守に役立つツールも用意されています。詳しくは、パートナーごとの統合ガイドをご覧ください。
同意選択内容を確認する方法
GDPR の同意が収集されたら、TCF v2 仕様に沿ってローカル ストレージから同意の選択内容を読み取ることができます。IABTCF_PurposeConsents
キーは、各 TCF の目的に対する同意を示します。
次のコード スニペットは、目的 1 の同意を確認する方法を示しています。
Java
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context);
// Example value: "1111111111"
String purposeConsents = sharedPref.getString("IABTCF_PurposeConsents", "");
// Purposes are zero-indexed. Index 0 contains information about Purpose 1.
if (!purposeConsents.isEmpty()) {
String purposeOneString = purposeConsents.charAt(0);
boolean hasConsentForPurposeOne = purposeOneString.equals("1");
}
Kotlin
val sharedPref = PreferenceManager.getDefaultSharedPreferences(context)
// Example value: "1111111111"
val purposesConsents = sharedPref.getString("IABTCF_PurposeConsents", "")
// Purposes are zero-indexed. Index 0 contains information about Purpose 1.
if (!purposeConsents.isEmpty()) {
val purposeOneString = purposeConsents.first()
val hasConsentForPurposeOne = purposeOneString == "1"
}
よくある質問
- 欧州経済領域と英国で広告を配信するための同意管理プラットフォームの要件を満たすために対応を行わないとどうなりますか?
2024 年 1 月 16 日より、パートナー様が Google 認定の CMP を導入しなかった場合、EEA と英国のトラフィックで配信できる広告は 制限付き広告のみとなります。
2024 年 1 月 16 日に EEA と英国で発生する一部のトラフィックに対して要件の適用が開始され、同年 2 月末までには EEA と英国で発生するすべてのトラフィックに適用されます。収益への影響を避けるため、2024 年 1 月 16 日までに必ず認定 CMP の導入をご完了ください。
- ユーザーが同意したかどうかを確認するにはどうすればよいですか?
同意は 1 つのビットではなく、IAB TCF の仕様で定義されている一連の目的とベンダーで表されます。Google 広告のパーソナライズ条件については、同意に関するポリシー: パーソナライズド広告と非パーソナライズド広告をご覧ください。
また、TCF ベンダーリストに登録されていない Google の広告技術プロバイダ(ATP)リストに登録されている広告テクノロジーは、同意の取得に Google の追加同意の技術仕様を使用します。IAB に未登録の広告技術プロバイダとその ID のリストは、次の場所で公開されます。https://storage.googleapis.com/tcfac/additional-consent-providers.csv
個々の広告リクエストをデバッグするには、広告インスペクタの広告ユニットの高度なデバッグ機能を使用して、広告リクエスト文字列をエクスポートします。次に、次のクエリ パラメータを探します。
クエリ パラメータ 意味 gdpr
この広告リクエストに GDPR が適用されるかどうか。 gdpr_consent
TC 文字列。IAB は、値を手動でデコードできるウェブツールを提供しています。 addtl_consent
Google の追加同意の技術仕様の AC 文字列。 同意選択をプログラムで読み取るには、同意選択を読み取る方法をご覧ください。
- CMP の要件を満たすために、Google の UMP SDK を使用する必要がありますか?
いいえ。Google 認定の CMP のリストに記載されている CMP であれば、どれでも広告の配信に使用できます。
- ユーザーがすでに同意している場合でも、UMP SDK を使用して同意フォームを再度表示するにはどうすればよいですか?
ユーザーがすでに同意を決定している場合、TC 文字列が期限切れになるか無効になるまで、Google の同意管理ソリューションでは新しい同意の取得がリクエストされません。
GDPR では、ユーザーがいつでも同意を取り消せるように、同意の変更が義務付けられています。ユーザーが同意を取り消す方法を実装するには、プライバシー オプションをご覧ください。同意フォームをもう一度表示するには、
showPrivacyOptionsForm()
を呼び出します。- Google 認定の CMP を統合しましたが、同意したユーザーからでも、メディエーション パートナーに広告リクエストが送信されません。変更の理由
TCF に基づき、Google では広告技術プロバイダおよびその他のプログラマティック デマンドソースが Google のポリシーに違反していないこと、およびデータ処理を実施するための法的根拠を少なくとも 1 つは有することを、メディエーションの順次処理に追加する前に確認します。詳しくは、メディエーション セクションをご覧ください。
Google の広告技術プロバイダ(ATP)リストに登録されているメディエーション パートナーの中には、TCF ベンダー リストに登録されていないものもあります。これらのパートナーは、代わりに Google の追加同意の技術仕様を使用して同意を取得しています。IAB に未登録の広告技術プロバイダとその ID のリストは、次の場所で公開されます。https://storage.googleapis.com/tcfac/additional-consent-providers.csv
UMP SDK は ACString の保存をサポートしているため、パートナーが TCF に登録されているかどうかを把握しなくても、公開済みの GDPR メッセージに広告パートナーを追加できます。サードパーティの CMP を使用する場合は、次のことを行う必要があります。
- サードパーティの CMP が ACString の保存をサポートしていることを確認します。
- サードパーティの CMP が同意の取得に使用する広告技術プロバイダのリストに、各メディエーション パートナーを含めます。
- ユーザーが同意しない場合、アプリの機能を変更できますか?これはポリシーで許可されていますか?
パブリッシャーは、アプリで IAB TCF 文字列を読み取ることができます。同意選択をプログラムで読み取る方法については、同意選択を読み取る方法をご覧ください。パブリッシャーは、関連する規制に基づく義務について、法務顧問と確認する必要があります。
- [オプションの管理] を選択し、すべての目的に同意しても、広告が表示されません。変更の理由
目的の同意を収集するだけでなく、ベンダーの同意も収集する必要があります。Google などのベンダーが適切な広告を配信するには、目的の同意とベンダーの同意の両方が必要です。
- バージョン 1 にすでに同意しているユーザーに対して AC 文字列のバージョン 2 を実装するにはどうすればよいですか?
Google の追加同意に関する技術仕様に沿ってローカル ストレージの
IABTCF_AddtlConsent
キーを確認し、ユーザーが AC 文字列バージョン 2 に同意したかどうか、同意フォームを再度表示する必要があるかどうかを判断します。Java
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context); // Example value: "2~1.35.41.101~dv.9.21.81" String additionalConsent = sharedPref.getString("IABTCF_AddtlConsent", ""); // Index 0 contains information about the specification version number. if (!additionalConsent.isEmpty()) { String specACVersion = additionalConsent.charAt(0); boolean isACVersion2 = purposeOneString.equals("2"); }
Kotlin
val sharedPref = PreferenceManager.getDefaultSharedPreferences(context) // Example value: "2~1.35.41.101~dv.9.21.81" val additionalConsent = sharedPref.getString("IABTCF_AddtlConsent", "") // Index 0 contains information about the specification version number. if (!additionalConsent.isEmpty()) { val specACVersion = additionalConsent.first() val isACVersion2 = specACVersion == "2" }