目次
どうしたAdMob?
ふとAdMobのページを見ていると年内には、欧州経済領域と英国のユーザーをターゲットとして広告を配信するすべてのパブリッシャー様に、Google 認定の同意管理プラットフォーム(CMP)の使用が義務付けられます。この目的のためには、Google 独自の同意管理ソリューションなど、 Google 認定の CMP を使用できます。Google の同意管理ソリューションに関心をお持ちの場合は、まず GDPR メッセージを設定し、 UMP SDK を実装してください。詳細
とアラートが表示されました。
GDPR自体は昔から対応していましたが、AdMob上でも今後は義務づけられるので早めに対応しましょうって話です。
そこで今回はAndroidアプリでの対応方法をまとめました。
AdMobの画面からアプリ向けメッセージの作成
AdMobの管理画面から「プライバシーとメッセージ」を選択し「メッセージの作成」ボタンを押すとGDPRメッセージを作成できます。アプリを選択
AdMobに登録しているアプリを選択してください。なおアプリごとにプライバシーポリシーのURLが必要となるので、プラポリを必ず作成してサイト上に公開しておきましょう。
内容としては「このアプリはどのような情報をユーザーから取得して管理し、削除方法がある場合は削除方法を提示、無ければない旨を提示する」と言った内容です。
言語を選択
表示される言語を選択します。GDPRの性質上基本的に英語でいいと思いますが、日本語も設定しておくと端末設定が日本語だと日本語で表示されます。
後述するAppleの「ATT(アプリトラッキングの透明性」表示は全アプリに表示されるので、英語と日本語は最低限入れておいた方がよいですね(アプリのターゲット国にもよりますが)
ユーザーの同意オプション
これはGDPRメッセージの中で「同意する」「オプションの管理」の他に「同意しない」ボタンの表示有無や「閉じる(同意しない」を選択できます。デフォルトは「同意する、オプションの管理」なのでこれでいいと思いますが、「同意しない」を選択肢に入れたい場合は「同意する、同意しない、オプションの管理」を選んでください。
ターゲティング
GDPRが適用される国は(EEAおよび英国)なのですが、日本国内でも表示させたい場合は「全体」を選んでください。個人的には「GDPRが適用される国(EEAおよび英国)」でいいと思いますが、会社によっては「我が社は全世界で同意を取るぞ!」と言う場合もあると思いますので
以上を選んで「続行」を押すと下記の画面が表示されます。
次回以降はこの画面を触っていくのですが、この画面から様々なカスタマイズが行えます。
先ほど設定した言語ごとに自動的に文面を作成してくれます。日本語の場合は下記のようになります。
この文面については簡単に変更できることが可能なので、変更する場合はここから変えてください。
また、ボタンの色やフォントなどをスタイルから変更することができるので、こちらでカスタマイズすることでアプリのデザインに近いアラートを出すことが可能です。
一通り設定を行った後に「公開」をすると、GDPRアラートの設定が完了します。
公開後でも変更は可能ですので、まずは設定を行ってください。
次はアプリ側で対応を行います。
Androidアプリに実装する。
既にAdMobをアプリ側で実装している場合はかなり簡単ですが、gmsのバージョンはできるだけ最新にしておきましょう。AdMobの実装については割愛します。
基本的にAdMob広告を出すタイミングにアラートを出せばいいと思います。
例えばAdMob広告を設定するloadAdMob関数があるとして、その関数を呼び出すタイミングで
GDPRメッセージを作成するcreateGDPRMessage関数を新たに作成し、そこで問題が無ければloadAdMob関数を呼び出すという風にしたいと思います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
private fun checkGDPRMessage(){ val params = ConsentRequestParameters .Builder() .setTagForUnderAgeOfConsent(false) .build() consentInformation = UserMessagingPlatform.getConsentInformation(this) consentInformation.requestConsentInfoUpdate( this, params, { // The consent information state was updated. // You are now ready to check if a form is available. if (consentInformation.isConsentFormAvailable) { Log.w(TAG," consentStatus:"+consentInformation.consentStatus) Log.w(TAG,"広告同意フォーム利用可能 ") loadForm() }else{ Log.w(TAG,"広告同意フォーム利用不可") loadAdmob() } }, { // Handle the error. Log.e(TAG,"requestConsentInfoUpdate error_code:"+it.errorCode +"/ message:"+it.message) }) } private fun loadForm() { Log.d(TAG,"LoadForm") Log.d(TAG, consentInformation.toString()) // Loads a consent form. Must be called on the main thread. UserMessagingPlatform.loadConsentForm( this, { this.consentForm = it when (consentInformation.consentStatus) { ConsentInformation.ConsentStatus.REQUIRED -> { Log.w(TAG,"広告表示の同意が必要") consentForm.show( this ) { if (consentInformation.consentStatus == ConsentInformation.ConsentStatus.OBTAINED) { // App can start requesting ads. Log.w(TAG, "ユーザーから広告の同意が得られた 広告表示") } // Handle dismissal by reloading form. loadForm() } } ConsentInformation.ConsentStatus.NOT_REQUIRED -> { Log.w(TAG,"地域として必要ではない 広告表示") isPersonalizeAds = true loadAdmob() } ConsentInformation.ConsentStatus.OBTAINED -> { Log.w(TAG,"既にユーザーから広告の同意が得られている 広告表示") isPersonalizeAds = true loadAdmob() } } }, { // Handle the error. Log.e(TAG,"loadConsentForm error_code:"+it.errorCode +"/ message:"+it.message) } ) } |
checkGDPRMessage関数ではGDPRメッセージを表示するかどうかの判断を行い、実際のメッセージはloadForm関数で行います。
loadForm関数の中では同意が必要かどうかの判定を来ない不要の場合と同意済みの場合はloadAdmob関数を呼び出します。
ただこれだと実装はできても確認ができないので、デバッグモードを設定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
private fun checkGDPRMessage(){ //デバッグ用 val debugSettings = ConsentDebugSettings.Builder(this) .setDebugGeography(ConsentDebugSettings.DebugGeography.DEBUG_GEOGRAPHY_EEA) .addTestDeviceHashedId("あなたのデバイスID") .build() val params = ConsentRequestParameters .Builder() .setConsentDebugSettings(debugSettings) .setTagForUnderAgeOfConsent(false) .build() consentInformation = UserMessagingPlatform.getConsentInformation(this) // 同意の強制リセット consentInformation.reset() ~(以下略)~ } |
後半は割愛してますが、デバッグ用の設定ファイルをパラメータにつけます。
addTestDeviceHashdIdにつけるデバイスIDの確認方法ですが、addTestDeviceHashdIdを外した状態で実行するとLogcatに表示されるので、それを使ってください。
また、基本的に1度同意するとアプリをアンインストールしない限りGDPRメッセージが表示されませんが、
consentInformation.reset()
をつけることで何度もGDPRメッセージを表示されることが可能です。
(アプリ申請する場合は外しましょう)
私たちがリリースしている「みまもりキッズ」の場合、このような表示がされます。
(GDPRが適用される国以外は非表示なので、この画面が表示されるのはかなりのレアなのですが)
後はGoogle Play Consoleにアプリを登録して審査→リリースすればOKです。
(おまけ)データセーフティを申告する
いつのまにかデータセーフティの申告内容が細かくなりました。簡単に言うと「アプリ上で取得や共有するユーザーデータ全てを申請してどのような利用をするか申請しろ」ということで、今までもありましたが、今回もう少し厳しくなったようです。
「特に個人情報を取ってないし、広告載せてるだけだよ」という場合でも実は申告する必要があります。
参考までにAdMobの場合のデータセーフティの申告例を簡単にまとめました。
こちらを元に申告する上での参考にしていただければ幸いです。
(あくまでAdMobだけなので、アプリで他の情報を取得する場合は追加してください)
データの収集とセキュリティ
「アプリは対象になる種類のユーザーデータの収集または共有しますか?」→ はい
アプリで収集するユーザーデータは全て、転送時に暗号化されますか?
→ はい
次のうち、アプリが対応しているアカウントの作成方法はどれですか?該当するものをすべて選択してください。(任意)
→ ユーザーによるアカウントの作成をアプリで許可していない
データの種類
アプリで収集または共有するユーザーデータの種類をすべて選択してください。デバイスまたはその他のID
データの使用と処理
デバイスまたはその他のID 未対応の場合
「収集」
このデータを一時的に処理しますか
→ はい、この収集済みデータを一時的に処理します。
このユーザーデータを収集するのはどうしてですか?あてはまるものをすべてお選びください
→ データ収集は必須である(ユーザーはこのデータ収集をオフにできない)
このユーザーデータを収集するのはどうしてですか?あてはまるものをすべてお選びください
→ 広告、マーケティング
以上の流れで保存を行い、こちらも審査に出します。
(以前に設定で「広告だけだから情報を収集してないわ」とやっていて、そのまま審査に出したらリジェクトで帰ってきたことがあったので、久しぶりに更新する際は見直しておきましょう)
最後に
GDPRメッセージはSDKでやってくれるのと、メッセージ内容などはAdMobの画面から簡単に設定変更できるのでメンテナンスがかなり楽ですね。ただボタンデザインなどはGoogleの青ボタンなので、アプリ内では浮くと思いますので、ボタンの調整は必要かなと思います。
(上記のキャプチャもボタンの色は調整しています)
今回はAndroidアプリ対応でしたが、次回はiOSアプリの対応を行っていきます。
参考
https://support.google.com/admob/answer/10113207https://developers.google.com/admob/android/privacy?hl=ja