前提条件
User Messaging Platform SDK をサポートする GMA Flutter プラグインのバージョン 1.3.0 のスタートガイドを完了していること
IAB の要件が EU ユーザー向け同意メッセージに与える影響についての記事をご確認ください。
はじめに
UMP SDK は、パブリッシャーがパーソナライズド広告について同意をリクエストし、Apple の App Tracking Transparency(ATT)要件を処理するためのツールを提供します。パブリッシャーは UMP SDK を使用して、1 つのフォームを表示することでこれらのリクエストのいずれかまたは両方を処理できます。すべての設定は アド マネージャーの「プライバシーとメッセージ」をご覧ください。
Google の EU ユーザーの同意ポリシーに基づき、広告主様は英国だけでなく欧州経済領域(EEA)のユーザーにも特定の情報を開示し、法律で義務付けられている場合に Cookie またはその他のローカル ストレージを使用すること、および広告を配信するための個人データ(AdID など)を使用することについてユーザーの同意を得る必要があります。このポリシーには、EU の e プライバシー指令と一般データ保護規則(GDPR)の要件が反映されています。
パブリッシャー様がこのポリシーで定められた義務を遂行できるよう、Google は User Messaging Platform(UMP)SDK を提供しています。最新の IAB 標準をサポートするように UMP SDK が更新されました。また、同意フォームの設定と広告パートナーのリスト作成のプロセスも簡素化されました。これらの設定はすべて、 アド マネージャーの「プライバシーとメッセージ」をご覧ください。
このガイドでは、SDK のインストール、IAB ソリューションの実装、テスト機能を有効にする方法について説明します。
App Tracking Transparency(iOS のみ)
UMP SDK を使用して Apple の App Tracking Transparency 要件に対応する場合は、 アド マネージャーの「プライバシーとメッセージ」をご覧ください。
UMP SDK でカスタム アラート メッセージを表示するには、Info.plist
を更新して、使用方法を説明するカスタム メッセージ文字列を NSUserTrackingUsageDescription
キーに追加します。
<key>NSUserTrackingUsageDescription</key>
<string>This identifier will be used to deliver personalized ads to you.</string>
この使用方法の説明文は、同意フォームを提示すると ATT ダイアログの中で次のように表示されます。
次に、AppTrackingTransparency
フレームワークをリンクする必要があります。
requestTrackingAuthorization:
は 1 回限りのリクエストであるため、Apple の要件に従い、IDFA ATT ダイアログは 1 回だけ表示されます。アラートをもう一度表示するには、テストデバイスでアプリをアンインストールしてから再インストールする必要があります。
SDK の使用
SDK は直線的に使用されるように設計されています。SDK を使用する手順は次のとおりです。
- 最新の同意情報をリクエストします。
- 同意が必要かどうかを確認します。
- フォームが利用可能なかどうかを確認し、利用できる場合はフォームを読み込みます。
- フォームを提示します。
- 同意を変更する方法をユーザーに提供します。
最新の同意情報をリクエストする
同意情報は、アプリを起動するたびに更新をリクエストすることをおすすめします。これにより、ユーザーが同意する必要があるかどうかを判断します。
final params = ConsentRequestParameters();
ConsentInformation.instance.requestConsentInfoUpdate(
params,
() async {
// The consent information state was updated.
// You are now ready to check if a form is available.
},
(FormError error) {
// Handle the error
},
);
利用可能な場合にフォームを読み込む
同意を取得するためのフォームは、 Ad ManagerUI で作成されます。ユーザーに同意を求めると判断したら、次のステップとして、フォームが使用可能かどうかを確認します。フォームが利用できない場合は、次のようなさまざまな理由が考えられます。
- ユーザーは広告トラッキング制限を有効にしています。
- ユーザーを同意年齢に満たないとしてタグ付けしました。
フォームが使用可能かどうかを確認するには、ConsentInformation
インスタンスで isConsentFormAvailable()
メソッドを使用します。フォームを読み込むためのラッパー メソッドを追加します。
final params = ConsentRequestParameters();
ConsentInformation.instance.requestConsentInfoUpdate(
params,
() async {
if (await ConsentInformation.instance.isConsentFormAvailable()) {
loadForm();
}
},
(FormError error) {
// Handle the error
},
);
フォームを読み込むには、ConsentForm
クラスで静的 loadConsentForm()
メソッドを使用します。loadForm()
メソッドを次のように変更します。
void loadForm() {
ConsentForm.loadConsentForm(
(ConsentForm consentForm) async {
// Present the form
},
(FormError formError) {
// Handle the error
},
);
}
必要に応じてフォームを提示する
同意フォームを表示するには、ConsentForm
クラスで show()
メソッドを使用します。デベロッパーは、フォームを提示する前に、ユーザーの同意を得る必要があるかどうかを判断する必要があります。同意が必要かどうかを確認するには、ConsentInformation
オブジェクトで getConsentStatus()
を呼び出します。これにより、ConsentStatus
タイプの列挙型が返されます。ConsentStatus
には次の 4 つの値を使用できます。
unknown
: 同意ステータスが不明です。required
: ユーザーの同意が必要ですが、まだ取得されていません。notRequired
: ユーザーの同意は不要です。たとえば、ユーザーが EEA または英国に居住していない。obtained
: ユーザーの同意が得られました。パーソナライズが定義されていません。
loadForm
メソッドを次のように変更します。
void loadForm() {
ConsentForm.loadConsentForm(
(ConsentForm consentForm) async {
var status = await ConsentInformation.instance.getConsentStatus();
if (status == ConsentStatus.required) {
consentForm.show(
(FormError formError) {
// Handle dismissal by reloading form
loadForm();
},
);
}
},
(formError) {
// Handle the error
},
);
}
同意が不要な場合は、ユーザーが同意ステータスを変更できるように、フォームへの参照を保持できます。
テスト
地域を強制的に適用する
UMP SDK では、ConsentDebugSettings.debugGeography
を使用して、デバイスが EEA 内にあるかのようにアプリの動作をテストできます。
デバッグ機能を使用するには、アプリのデバッグ設定でテスト用デバイスのハッシュ ID を指定する必要があります。この値を設定せずに requestConsentInfoUpdate()
を呼び出すと、実行時に必要な ID ハッシュがログに記録されます。
ConsentDebugSettings debugSettings = ConsentDebugSettings(
debugGeography: DebugGeography.debugGeographyEea,
testIdentifiers: ['TEST-DEVICE-HASHED-ID']);
ConsentRequestParameters params = ConsentRequestParameters(
consentDebugSettings: debugSettings);
ConsentInformation.instance.requestConsentInfoUpdate(
params,
() {},
(error) {});
デバイスを EEA または英国内にないものとして SDK で扱うには、DebugGeography.debugGeographyNotEea
を使用します。デバッグ設定はテストデバイスでのみ機能します。エミュレータはデフォルトでテストが有効になっているため、デバイス ID リストに追加する必要はありません。
同意ステータスをリセットする
UMP SDK でアプリをテストする際、ユーザーの初回インストール エクスペリエンスをシミュレーションできるように、SDK の状態をリセットすると便利な場合があります。SDK には、これを行う reset
メソッドが用意されています。
ConsentInformation.instance.reset();
UMP SDK をプロジェクトから完全に削除する場合は、reset も呼び出す必要があります。
アプリの測定を遅らせる(省略可)
デフォルトでは、Google Mobile Ads SDK はアプリの測定を初期化し、アプリが起動すると直ちにユーザーレベルのイベントデータを Google に送信し始めます。この初期化動作により、コードを追加変更することなく AdMob ユーザー指標を有効にできます。
ただし、これらのイベントを送信する前にアプリでユーザーの同意が必要な場合は、明示的に Mobile Ads SDK を初期化するか広告を読み込むまで、アプリの測定を遅らせることができます。
Android でアプリの測定を遅らせるには、次の <meta-data>
タグを AndroidManifest.xml
に追加します。
<manifest> <application> <!-- Delay app measurement until MobileAds.initialize() is called. --> <meta-data android:name="com.google.android.gms.ads.DELAY_APP_MEASUREMENT_INIT" android:value="true"/> </application> </manifest>
iOS でアプリの測定を遅らせるには、ブール値 YES
を持つ GADDelayAppMeasurementInit
キーをアプリの Info.plist
に追加します。この変更は、次のようにプログラムで行うことができます。
<key>GADDelayAppMeasurementInit</key>
<true/>
または、プロパティ リスト エディタで編集します。
メディエーション
メディエーションを使用する場合は、アプリで使用する同意フレームワークに応じて、メディエーション パートナーに関する同意の処理方法が異なる必要があります。Google は IAB 同意フレームワークをサポートしていますが、独自の同意ソリューションを用意することもできます。各オプションでのメディエーションの処理方法について詳しくは、以下をご覧ください。 Google の同意取得ソリューションの詳細
IAB 同意フレームワークとメディエーション
UMP SDK も Mobile Ads SDK も同意情報をメディエーション パートナーに転送しません。IAB ソリューションを使用すると、UMP SDK が同意ステータス情報をローカル ストレージに書き込みます。適切なキーを読み取ることは、各メディエーション パートナーの SDK の責任です。各第三者ネットワークに問い合わせて、IAB ソリューションをサポートしているかどうかを確認してください。
カスタムの同意ソリューションとメディエーション
カスタムの同意ソリューションを使用する場合は、デベロッパーがアプリの同意ステータスをサードパーティ SDK に通知する必要があります。各メディエーション ネットワークには、同意を処理するための独自の API があります(Android 用と iOS 用)。
これらの API を Dart から呼び出す方法については、ネットワーク固有の API の使用をご覧ください。
同意を Google Mobile Ads SDK に転送する
Google Mobile Ads SDK のデフォルトの動作では、パーソナライズド広告が配信されます。
ユーザーが非パーソナライズド広告のみを受け取ることに同意した場合は、次のコードを使用して AdManagerAdRequest
オブジェクトを設定し、非パーソナライズド広告のみをリクエストするように指定できます。
final AdManagerAdRequest = AdManagerAdRequest(nonPersonalizedAds: true);
非パーソナライズド広告がリクエストされた場合、現時点では、広告リクエスト URL には &npa=1
が含まれます。ただし、これは Google Mobile Ads SDK の内部実装の詳細であり、変更される可能性があります。