自分なりに調べた結果ですので、間違いがあるかもしれません。
参考程度にお願いします。
GDPRとかいうのが発行されたそうで
欧州に適用される個人情報のなんたらとか。広告で使っているその人がどんな検索をしたかとか、そういうのも個人情報になり、テキトーに扱ったら罰則があるらしいです。
ほとんどのアプリは広告を出していると思うので、スマホアプリのデベロッパーは対応する必要がある。はず。
欧州で公開しなければOKなんて記事もあるけど、どうなんだろう。
Admobで対処する方法がGoogleAdsの公式ページになんか乗ってる。
英語だけど。
自分なりに調べてみます。
先にまとめを載せておきますと、
- 個人情報を使う場合、同意を得る必要がある
- AdMobでは個人向けの広告と共通の広告があるが、どちらの広告も同意は必要
- 同意を得る処理をつくる
- Admob専用ならGoogleAdsの用意した同意画面がある
- 同意については、アプリ使用者がいつでも変更できるようにしておく
- 同意を求めるテキストについての助言は無く、デフォルトで表示されるテキストはAdmobを使う場合だけのテキスト
- 面倒なのはアプリで使う個人情報(アプリで使うIDとかプレイヤーデータも含まれるっぽい)をユーザーがいつでも消せるようにすることだと思う
表示するテキストを変えたいときは \アプリプロジェクト名\appbuild\intermediates\assets\ フォルダ内のconsentform.htmlを変えればよいはずです。
GoogleAdsには書いてあるのはAdmobの同意書の作り方のみです。
個人情報の取り扱い方については、個人で調べる必要があります。
開発者自身が、個人情報を扱う場合は、必要な記入事項について調べた方がよさそうです。
広告についての同意を得る処理について
アプリ開始時、同意情報を取得する。
同意してるかしてないか初回起動なのか。
これだけは使いまわしてもよさそう。
同意情報の更新 import com.google.ads.consent; public class MainActivity extends Activity { ... @Override protected void onCreate(Bundle savedInstanceState) { ... ConsentInformation consentInformation = ConsentInformation.getInstance(context); //ここのpublisherIdsは自身のAdmobサイトの 「ブロックの管理」➡「EUユーザーの同意」画面の下部にあるやつなはず。 String[] publisherIds = {"pub-0123456789012345"}; consentInformation.requestConsentInfoUpdate(publisherIds, new ConsentInfoUpdateListener() { @Override public void onConsentInfoUpdated(ConsentStatus consentStatus) { // 同意情報を取得できた. ここで、アプリ使用者が、許可している広告の種類を取得できる。 引数のconsentstatusのnameプロパティに PERSONALIZED,NON_PERSONALIZED,UNKNOWN がある。 } @Override public void onFailedToUpdateConsentInfo(String errorDescription) { //アプリ使用者の同意情報を取得できなかった どんな場合に呼ばれるのか不明、気にする必要なさそう } }); }
consentstatusの情報は以下の意味をもつ。
PERSONALIZED–個人情報を使った広告に同意している。
NON_PERSONALIZED–個人情報を使わない広告に同意している
UNKNOWN–同意も拒否もしていない。未設定。この時は同意書を表示する。
同意書の作成
一番考えるべき内容かと。扱う個人情報だとかどんな目的で使用するか。
自分のアプリでは個人情報を使わず、広告もGoogleのAdmobだけの場合はGoogleAdsの公式にある同意画面でよいはず。
下は公式の同意画面を使った場合の表示とGoogle翻訳にかけた日本語
私たちはあなたのプライバシーとデータセキュリティを心配しています。
広告を表示してこのアプリを無料で保ちます。
引き続きデータを使用して広告を作成できますか?
アプリの設定でいつでも自分の選択を変更することができます。
Googleのパートナーはデータを収集し、デバイスに固有の識別子を使用して広告を表示します。
<私のアプリケーションとパートナがどのようにデータを収集して使用するかを学ぶ(注:ここからGoogleのプライバシーポリシーのサイトと後述のprivacyUrlに設定したURLへのリンクが張られた画面に飛ぶ)>
デフォルトでは、広告なしの有料版を使う選択肢も表示されます。課金には対応しない人も多いと思うので、文章は変える必要がありそう。
/アプリプロジェクト名/app\build\intermediates\assets\
フォルダ内のconsentform.htmlを変えればよいはずです。
前述の画像を表示するのに必要な処理が以下。
公式ページのコピー
privacyURLに自分のサイトのプライバシーポリシーの記載してあるURLを入れる
同意フォームからブラウザを通して見ることができる。
ConsentForm form = new ConsentForm.Builder(context, privacyUrl)
.withListener(new ConsentFormListener() {
@Override
public void onConsentFormLoaded() {
// Consent form loaded successfully.
// loadが終わったところで表示する
form.show();
}
@Override
public void onConsentFormOpened() {
// Consent form was displayed.
}
@Override
public void onConsentFormClosed(
ConsentStatus consentStatus, Boolean userPrefersAdFree) {
// ここで同意情報を取得し、consentstatusから同意情報を取得できる。
ConsentInfomation.getInstance(context).
setConsentStatus(consentStatus);
userPrefersAd~~は広告なしの有料版を選んだ場合にTrueになる
}
@Override
public void onConsentFormError(String errorDescription) {
// Consent form error.
コンセントフォームが表示されないときは
ここのエラーメッセージを見ると良いかも
}
})
.withPersonalizedAdsOption()
.withNonPersonalizedAdsOption()
.withAdFreeOption()
.build();
これで同意書画面のフォームのひな型ができた、はず。
できたConsentformの
ConsentForm.load()で読み込み
ConsentForm.show()で表示する。
show()はloadで読み終わってから表示しないといけないから
onConsentFormLoaded(){}内で呼び出すべき。
これで同意書画面を作れる。でも注意しないといけないのは、この画面はGoogleのAdmobのみしか使えないみたい。
自身のAdmobのサイト「EUユーザーの同意」画面から「広告技術プロバイダの選択」内の「広告技術プロバイダのカスタムグループ」を選んでいる場合のみつかえる。
これ以外だと”consent form can be used with custom provider selection only“のエラーがでるはず。
AdMobサイトでチェックを入れてもすぐには反映されないのでしばらく待つ必要がある。自分の時にはしばらく待って、実行するとコードを変えなくてもエラーにならずに表示された。
これで同意画面はできた(Admobのみ)。
上述のコードにも書いてあるけど、onConsentFormClosed内で同意情報の処理ができる。
ConsentInfomation.getInstance(context).SetContentStatus(Consentstatus)
でセットして
以降は
ConsentInfomation.getInstance(context).getConsentStatus()
で取得できる。
広告情報の設定
同意を得ている場合、個人専用の広告と共通の広告、どちらを使うか選ぶ必要がある。
同意情報がPERSONALIZEの場合は、今まで通りの広告でよい。
NON_PERSONALIZEの場合は、AdRequestをインスタンス化するとき、以下の処理を入れる。
Bundle extras = new Bundle();
extras.putString("npa", "1");
AdRequest request = new AdRequest.Builder()
.addNetworkExtrasBundle(AdMobAdapter.class, extras)
.build();
テストで広告を出すときは
エミュレーターを使うときはaddTestDeviceはいらない ConsentInformation.getInstance(context) .addTestDevice("33BE2250B43518CCDA7DE426D04EE231") ConsentInfomation.getInstance(context). setDebugGeography(DebugGeography.DEBUG_GEOGRAPHY_EEA);
を最初のほうで呼び出しておいて、EU内にいることにしておく。
これで同意書の作成と広告の出し方はまあ、分かったような……
- アプリ開発者と広告プロバイダーのプライバシーポリシーを載せる
- GoogleAdsの同意フォームでは個人向けの広告を表示するかしないかの選択ができる
- 個人向けに同意しない場合、共通の広告を載せる
共通の広告を載せる場合は、個人情報を扱わないから、今回のGDRPは関係ないという理解でいいのだろうか。でも同意は得る必要があるから何か情報を使っているのかな?
ちなみに、広告プロバイダーのプライバシーURLは
ConsentInfomation.getInstance(this).getAdProviders()
でAdmobサイトで設定した広告プロバイダーのListが取得できる。
それぞれに、広告プロバイダー名とプライバシーポリシーのURLがセットされている模様。
公式を見ていると、アプリ使用者が欧州地域にいるか、それ以外にいるかを判断するメソッドが書いてあった。
よくわからない。
ConsentInformation.getInstance(context).isRequestLocationInEeaOrUnknown()
解説は以下(原文)。
If the isRequestLocationInEeaOrUnknown() method returns false, the user is not located in the European Economic Area and consent is not required under the EU User Consent Policy. You can make ad requests to the Google Mobile Ads SDK.
isRequestLocationInEeaOrUnknown()メソッドがfalseの時は、アプリ使用者は欧州地域にいないため、同意は必要ない。普通に広告出せる。
ていう意味だと思う。
「欧州でダウンロードしても、欧州にいなければGDRPは関係ない」
という理解でいいのかな?
欧州の外でダウンロードした人が、欧州でアプリを使うときはGDRPに保護される? 欧州人以外でも?
とりあえず、欧州にいるときは同意処理を通すようにすれば間違いないんだろうけど。
AdMobの同意のさせ方は分かったけど、どんな場合にGDRPに違反したことになるのかとか、破ったらどうなるのかとか、ほんとに罰金くるのかとか、色々分からないことが残ってしまった。
別なサイトも見てみないと……
GDPRが施行されて2か月くらい経つけど、いろんなサイトを見た感じ実例なんかはまだ見ない気がする。
コメント