AATやGDPRをちゃんと対応しようと、
いろいろ調べてみたときの備忘録(*´ω`*)
どちらともAdMobで対応できたので便利
流れ
同メッセージの表示などのために、
User Messaging Platform(UMP)というのがあるらしい。
GDPRだけでなくIDFA(ATT)もサポート
メッセージを作成する
- AdMobの「プライバシーとメッセージ」に移動
- 「欧州の規制(GDPR)」と「IDFA説明メッセージ」を作成
- 多言語対応もできるので、「別の言語」からサポート言語を選択する
- 左上の言語選択から、各言語のメッセージを編集できる
- ATT用のメッセージをInfo.plistに設定
google_mobile_adsでの実装
FlutterからUser Messaging Platform(UMP)を使う形。
google_mobile_adsパッケージから利用できる。
各メソッドのFuture化
UMP周りのコードはコールバック関数だけでFutureじゃない。。
ちょっとめんどくさいので、Future化していく
必要な関数は以下の3つ
requestConsentInfoUpdate
... リクエストloadAndShowConsentFormIfRequired
... メッセージを表示showPrivacyOptionsForm
... プライバシー設定フォームの表示
import 'dart:async'; import 'package:flutter/material.dart'; import 'package:google_mobile_ads/google_mobile_ads.dart'; /// 同意のリクエスト Future<void> _requestConsentInfoUpdate(ConsentRequestParameters params) { final completer = Completer<void>(); ConsentInformation.instance.requestConsentInfoUpdate( params, () => completer.complete(), (FormError error) => completer.completeError(error), ); return completer.future; } /// 必要に応じて同意フォームの読み込み&同意メッセージを表示 Future<FormError?> _loadAndShowConsentFormIfRequired() { final completer = Completer<FormError?>(); ConsentForm.loadAndShowConsentFormIfRequired((error) { completer.complete(error); }); return completer.future; } /// プライバシー設定フォームの表示 Future<FormError?> _showPrivacyOptionsForm() { final completer = Completer<FormError?>(); ConsentForm.showPrivacyOptionsForm((formError) { completer.complete(formError); }); return completer.future; }
初回実行時
まだ一度もリクエストしておらず、
同意も拒否も確認していないときの処理
import 'dart:async'; import 'package:flutter/material.dart'; import 'package:google_mobile_ads/google_mobile_ads.dart'; // 同意のリクエスト Future<void> checkAndRequestAdConsent() async { // リクエストパラメタの作成 final params = ConsentRequestParameters(); // 同意情報のリクエスト await _requestConsentInfoUpdate(params); // 現在の同意ステータスの読み込み完了後、 // 必要に応じて同意フォームの読み込み&同意メッセージを表示 final error = await _loadAndShowConsentFormIfRequired(); if (error != null) { // TODO: 同意ステータスが取得できなかったとき } // 広告をリクエストできる同意ステータス化の確認 final canRequestAds = await ConsentInformation.instance.canRequestAds(); // 広告の初期化 if (canRequestAds) MobileAds.instance.initialize(); }
プライバシー設定フォームの表示時
以下によると、プライバシー設定を変更できる必要があるらしい
一部の同意フォームでは、ユーザーがいつでも同意内容を変更する必要があります。必要に応じて、次の手順に沿ってプライバシー オプション ボタンを実装します。
処理としては、こんな感じで、設定画面などに配置しておけばOK
/// プライバシー設定フォームの表示時 Future<void> showPrivacyOptionsForm() async { // 同意ステータスの取得 final status = await ConsentInformation.instance.getConsentStatus(); // 確認済みでない場合は、表示しない if (status != ConsentStatus.obtained) return; final error = await _showPrivacyOptionsForm(); if (error != null) { // TODO: 同意ステータスが取得できなかったとき } }
同意状態のリセット/クリア
開発/テスト時に同意状態をリセットするときはこれでOK。
アンインストールして再インストールするのでもOK
/// 同意のリセット void resetConsent() { ConsentInformation.instance.reset(); }
地域の指定
開発/テスト時に、動きを確認するため、
デバッグ用の設定で地域を指定できる
final consentDebugSettings = ConsentDebugSettings( // 地域の指定: EEA(欧州経済地域) debugGeography: DebugGeography.debugGeographyEea, // テスト端末のIdentifier testIdentifiers: [ "33BE2250B43518CCDA7DE426D04EE231", "2077ef9a63d2b398840261c8221a0c9b", ], );
テスト端末のIdentifierは、ログを見て確認
# 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]
以上!! AdMobというかUMP、便利だな(*´ω`*)
参考にしたサイト様
- ATT(App Tracking Transparency/Appleで必須)
- GDPR(ヨーロッパでは必須)
- ATT と GDPR の両立【プログラム・テクニカル】|AdMob|Flutter|THE CUTBOSS POST
- 参考リンクもよさそう
- app-ads.txt