Google の EU ユーザーの同意ポリシーに基づき、欧州経済領域(EEA)および英国のユーザーに対して特定の開示を行い、法的に義務付けられている場合に Cookie などのローカル ストレージを使用すること、および広告配信に個人データ(AdID など)を使用することについて同意を得る必要があります。このポリシーには、EU の e プライバシー指令と一般データ保護規則(GDPR)の要件が反映されています。
パブリッシャー様がこのポリシーで定められた義務を遂行できるよう、Google は User Messaging Platform(UMP)SDK を提供しています。UMP SDK は、最新の IAB 標準をサポートするように更新されました。これらの構成はすべて、[プライバシーとメッセージ] で Ad Manager 簡単に処理できます。
前提条件
- スタートガイドを完了している。
- GDPR 関連の要件を検討している場合は、IAB 要件が EU 同意メッセージに与える影響
メッセージ タイプを作成する
アド マネージャーアカウントの [プライバシーとメッセージ] タブで、 利用可能なユーザー メッセージ のいずれかでユーザー メッセージを作成します。UMP SDK は、プロジェクトで設定された Ad Manager アプリケーション ID から作成されたユーザー メッセージを表示しようとします。アプリケーションにメッセージが構成されていない場合、SDK はエラーを返します。
詳しくは、 プライバシーとメッセージについて
アプリケーション ID を追加する
アプリケーション ID は、 アド マネージャーの管理画面をご覧ください。 次のコード スニペットを使用して、に ID を追加します。
同意情報のリクエスト
requestConsentInfoUpdate()
を使用して、アプリが起動されるたびにユーザーの同意情報の更新をリクエストする必要があります。これにより、ユーザーがまだ同意していない場合や、同意の有効期限が切れている場合に、ユーザーが同意する必要があるかどうかが決まります。
アプリ起動時のステータスの確認方法の例を次に示します。
@override
void initState() {
super.initState();
// Create a ConsentRequestParameters object.
final params = ConsentRequestParameters();
// Request an update for the consent information.
ConsentInformation.instance.requestConsentInfoUpdate(
params,
() async {
// TODO: Load and present the consent form.
},
(FormError error) {
// Handle the error.
},
);
}
必要に応じて同意フォームを読み込んで表示する
最新の同意ステータスを取得したら、ConsentForm
クラスのloadAndShowConsentFormIfRequired()
を呼び出して同意フォームを読み込みます。同意ステータスが必要な場合は、SDK によってフォームが読み込まれ、 指定された からすぐに表示されます。 callback
は、 フォームが閉じられると呼び出されます。同意が必要ない場合は、直ちに callback
が 呼び出されます。
@override
void initState() {
super.initState();
// Create a ConsentRequestParameters object.
final params = ConsentRequestParameters();
// Request an update for the consent information.
ConsentInformation.instance.requestConsentInfoUpdate(
params,
() async {
ConsentForm.loadAndShowConsentFormIfRequired((loadAndShowError) {
if (loadAndShowError != null) {
// Consent gathering failed.
}
// Consent has been gathered.
});
},
(FormError error) {
// Handle the error.
},
);
}
ユーザーが選択またはフォームを閉じた後でアクションを実行する必要がある場合は、そのロジックをフォームの callbackに配置します。
広告をリクエスト
アプリで広告をリクエストする前に、 canRequestAds()
を使用してユーザーから同意を得ているかどうかを確認してください。同意を取得する際には、次の 2 つの場所を確認します。
- 現在のセッションで同意が得られたら、
-
requestConsentInfoUpdate()
を呼び出した直後。前回のセッションで同意を取得した可能性があります。レイテンシに関するベスト プラクティスとして、コールバックの完了を待たずに、アプリの起動後できるだけ早く広告の読み込みを開始できるようにすることをおすすめします。
同意取得プロセス中にエラーが発生した場合でも、広告のリクエストを試みる必要があります。UMP SDK は前回のセッションの同意ステータスを使用します。
class AppExampleState extends State<AppExample> {
// Use a bool to initialize the Mobile Ads SDK and load ads once.
var _isMobileAdsInitializeCalled = false;
@override
void initState() {
super.initState();
// Create a ConsentRequestParameters object.
final params = ConsentRequestParameters();
// Request an update for the consent information.
ConsentInformation.instance.requestConsentInfoUpdate(
params,
() async {
ConsentForm.loadAndShowConsentFormIfRequired((loadAndShowError) {
if (loadAndShowError != null) {
// Consent gathering failed.
}
// Consent has been gathered.
_initializeMobileAdsSDK();
});
},
(FormError error) {
// Handle the error.
},
);
// Check if you can initialize the Mobile Ads SDK in parallel while
// checking for new consent information. Consent obtained in the
// previous session can be used to request ads.
_initializeMobileAdsSDK();
}
void _initializeMobileAdsSDK() async {
if (_isMobileAdsInitializeCalled) {
return;
}
// Initialize the Mobile Ads SDK if the SDK has gathered consent aligned with
// the app's configured messages.
var canRequestAds = await ConsentInformation.instance.canRequestAds();
if (canRequestAds) {
setState(() {
_isMobileAdsInitializeCalled = true;
});
// Initialize the Mobile Ads SDK.
MobileAds.instance.initialize();
// TODO: Request an ad.
}
}
}
プライバシー設定
一部の同意フォームでは、ユーザーがいつでも同意を変更する必要があります。必要に応じて、次の手順に沿ってプライバシー オプション ボタンを実装してください。
手順は次のとおりです。
- アプリの設定ページのボタンなど、プライバシー オプション フォームをトリガーする UI 要素を実装します。
-
loadAndShowConsentFormIfRequired()
が完了したら、getPrivacyOptionsRequirementStatus()
を確認して、プライバシー オプション フォームを表示できる UI 要素を表示するかどうかを決定します。 - ユーザーが UI 要素を操作したら、
showPrivacyOptionsForm()
を呼び出してフォームを表示し、ユーザーがいつでもプライバシー オプションを更新できるようにします。
class AppExampleState extends State<AppExample> {
static const _privacySettingsText = 'Privacy Settings';
// Use a bool to initialize the Mobile Ads SDK and load ads once.
var _isMobileAdsInitializeCalled = false;
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'App Example',
home: Scaffold(
appBar: AppBar(
title: const Text('App Example'),
actions: _isMobileAdsSDKInitialized
// Regenerate the options menu to include a privacy setting.
? _privacySettingsAppBarAction()
: null
),
body: // ...
),
);
}
List<Widget> _privacySettingsAppBarAction() {
return <Widget>[
FutureBuilder(
future: ConsentInformation.instance.isPrivacyOptionsRequired(),
builder: (context, snapshot) {
final bool visibility = snapshot.data ?? false;
return Visibility(
visible: visibility,
child: PopupMenuButton<String>(
onSelected: (String result) {
if (result == _privacySettingsText) {
ConsentForm.showPrivacyOptionsForm((formError) {
if (formError != null) {
debugPrint(
"${formError.errorCode}: ${formError.message}");
}
});
}
},
itemBuilder: (BuildContext context) =>
<PopupMenuEntry<String>>[
const PopupMenuItem<String>(
value: _privacySettingsText,
child: Text(_privacySettingsText))
],
));
})
];
}
}
テスト
開発中にアプリで統合をテストする場合は、次の手順に沿ってテストデバイスをプログラムに登録します。アプリをリリースする前に、これらのテストデバイス ID を設定するコードを必ず削除してください。
-
requestConsentInfoUpdate()
を呼び出します。 ログ出力で、次の例のようなメッセージを確認します。このメッセージには、デバイス ID と、テストデバイスとして追加する方法が示されています。
Android
Use new ConsentDebugSettings.Builder().addTestDeviceHashedId("33BE2250B43518CCDA7DE426D04EE231") to set this as a debug device.
iOS
<UMP SDK>To enable debug mode for this device, set: UMPDebugSettings.testDeviceIdentifiers = @[2077ef9a63d2b398840261c8221a0c9b]
テストデバイス ID をクリップボードにコピーします。
コードを変更して、 呼び出し
ConsentDebugSettings.testIdentifiers
を設定し、 テストデバイス ID のリストを渡します。ConsentDebugSettings debugSettings = ConsentDebugSettings( testIdentifiers: ["TEST-DEVICE-HASHED-ID"], ); ConsentRequestParameters params = ConsentRequestParameters(consentDebugSettings: debugSettings); ConsentInformation.instance.requestConsentInfoUpdate(params, () async { // ... };
地域を強制的に適用する
UMP SDK では、 the DebugGeography
field on ConsentDebugSettings
を使用して、デバイスが EEA または英国にあるかのようにアプリの動作をテストできます。デバッグ設定はテストデバイスでのみ機能します。
ConsentDebugSettings debugSettings = ConsentDebugSettings(
debugGeography: DebugGeography.debugGeographyEea,
testIdentifiers: ["TEST-DEVICE-HASHED-ID"],
);
ConsentRequestParameters params =
ConsentRequestParameters(consentDebugSettings: debugSettings);
ConsentInformation.instance.requestConsentInfoUpdate(params, () async {
// ...
};
同意ステータスをリセットする
UMP SDK でアプリをテストする場合は、SDK の状態をリセットして、ユーザーの最初のインストール エクスペリエンスをシミュレートすると便利です。SDK には、これを行うための reset()
メソッドが用意されています。
ConsentInformation.instance.reset();