🔒

iOS 14.5からのユーザトラッキング2: User Messaging Platform(UMP)とファンディングチョイス

2021/06/23に公開

Part 1では、iOS 14.5からのユーザのトラッキングやApp Tracking Transparency (ATT)について解説しました。Part 2では、Googleが提供するUser Messaging Platform (UMP)とファンディングチョイスについて書きます。

※Part 1はこちら。
https://zenn.dev/hituziando/articles/e3fa582291fbe7

ファンディングチョイスとは

ファンディングチョイスを利用すると、以下の種類のメッセージを作成して公開できます。「ファンディングチョイスの概要」より。

IDFAメッセージ - Apple iOS ATTアラートの直前にユーザーに表示されるIDFA説明メッセージ。iOSアプリの文章のスタイルやカラーパターンに合わせるなど、説明メッセージをカスタマイズできます。
EUユーザーへの同意メッセージ - 欧州経済領域(EEA)または英国(UK)からサイトやアプリにアクセスしている対象ユーザーに表示されるメッセージです。一般データ保護規則(GDPR)に関する同意を得ることを目的としています。

IDFAについてはPart 1で言及しました。GDPRに対応しているのも良いですね。

作成したメッセージは、ユーザにトラッキングの許可を求めるATTダイアログを表示する前に、説明や同意を求めるダイアログとして簡単に表示できます。以下のスクショは"EUユーザーへの同意メッセージ"の表示例です。

なお、概要には"カリフォルニア州のユーザーへのオプトアウトメッセージ"と"広告ブロッカーのメッセージ"も挙げらていますが、この記事の執筆時点(2021/06/21時点)では作成できないようです。

ファンディングチョイスの設定は、AdMobの管理画面から移動することができます。

  1. 「プライバシーとメッセージ」をクリック
  2. 「ファンディングチョイスに移動」をクリック

ファンディングチョイスでは以下のスクショのように、Web画面でダイアログのボタンカラーなどを編集することができます。

GDPRとは

EU一般データ保護規則(General Data Protection Regulation: GDPR)は、欧州経済領域(European Economic Area: EEA)における個人データ保護に関する法令のことです。ユーザが自分の個人データをコントロールする権利を取り戻すことを目的にしています。僕は法律の専門家ではないので、詳細はご自身で調べていただきたいですが、違反すると厳しい罰則が課せられる可能性があるため、EU圏にアプリを配信する方は注意が必要です。

User Messaging Platform (UMP)

UMPフレームワークを使ってアプリを実装することで、ファンディングチョイスで作成したメッセージ(ダイアログ)をユーザに表示することができます。

UMPフレームワークはCocoaPodsを利用してGoogle Mobile Ads SDKと一緒にインストールされます。

pod 'Google-Mobile-Ads-SDK'

以下に実装例を示します。

import UserMessagingPlatform

...

let parameters = UMPRequestParameters()
// Set tag for under age of consent. Here false means users are not under age.
// true: "EUユーザへの同意メッセージ"が表示されない代わりに"IDFAメッセージ"が表示される
// false: EU圏なら"EUユーザへの同意メッセージ"が表示され"IDFAメッセージ"は表示されない
parameters.tagForUnderAgeOfConsent = false

#if DEBUG
let debugSettings = UMPDebugSettings()
// デバイスIDをセットしないとEEAにしても同意メッセージは表示されない(IDFAメッセージが表示される)
debugSettings.testDeviceIdentifiers = ["テスト端末のIDFA"]
debugSettings.geography = .EEA
parameters.debugSettings = debugSettings
#endif

UMPConsentInformation.sharedInstance.requestConsentInfoUpdate(with: parameters) { error in
    if error != nil {
        // Handle the error.
    }
    else {
        let formStatus = UMPConsentInformation.sharedInstance.formStatus
        if formStatus == .available {
            loadForm(from: viewController)
        }
        else {
	    // Handle the error.
        }
    }
}

UMPフレームワークは、EUユーザかどうか自動判別して、EUユーザならば"EUユーザーへの同意メッセージ"を、それ以外のユーザには"IDFAメッセージ"を表示してくれます。開発中はUMPDebugSettingsを使えば、日本で開発している人でもEUユーザーへの同意メッセージを表示できます。

次にtagForUnderAgeOfConsentプロパティについての理解です。これは同意年齢に満たないEUユーザの場合、trueを設定します。trueを設定すると、"EUユーザーへの同意メッセージ"の代わりに"IDFAメッセージ"が表示されるようになります。

同意年齢に満たないEUユーザとは、16歳未満(国によっては年齢制限が異なる可能性あり)の子供には、個人情報を提供するリスクの判断ができないという理由により、保護者が代わりに同意しなければならない、ということらしいです。

ここで以下の問題があります。

  1. ユーザがEU圏の16歳未満かどうか知る方法を実装するのは難しい
  2. 保護者が代わりに同意したかどうか知る方法を実装するのは難しい

例えば、免許証のコピー画像を送ってもらうなどの方法が考えられますが、かなりハードルが高いですよね。僕が開発するアプリでは、tagForUnderAgeOfConsent = falseとした上で、App Storeで配信する年齢を17歳以上に指定することで対応しました。(私はこうしているとか、ご意見あれば教えてほしいです)

もし、tagForUnderAgeOfConsentをtrueにする場合はGADMobileAdsのtagForUnderAge(ofConsent:)もtrueにします。UMPの内部で連携しているかどうか不明なので、明示的にセットした方が無難かと思います。trueを設定した場合、同意年齢に満たないEUユーザに対して、適切な方法で広告リクエストが処理されるようになります。(参考

import GoogleMobileAds

GADMobileAds.sharedInstance().requestConfiguration.tagForUnderAge(ofConsent: true)

残りの実装を以下に示します。フォームを表示する部分になります。UI操作なのでメインスレッドで実行する必要があります。

func loadForm(from viewController: UIViewController) {
    DispatchQueue.main.async {
        UMPConsentForm.load { form, loadError in
            if loadError != nil {
                // Handle the error.
            }
            else {
                if UMPConsentInformation.sharedInstance.consentStatus == .required {
                    form?.present(from: viewController) { dismissError in
                        if UMPConsentInformation.sharedInstance.consentStatus == .obtained {
                            // App can start requesting ads.
                        }
                        else {
			    // Handle the error.
                        }
                    }
                }
                else {
                    // Keep the form available for changes to user consent.
                    if UMPConsentInformation.sharedInstance.consentStatus == .obtained {
                        // App can start requesting ads.
                    }
                    else {
		        // Handle the error.
                    }
                }
            }
        }
    }
}

"EUユーザへの同意メッセージ"または"IDFAメッセージ"が表示された後、ATTダイアログが表示されます(初回のみ)。ATTダイアログの表示は、UMPフレームワークが内部で行ってくれるので、自分で記述する必要はありません。

最後に、同意ステータスは以下のresetメソッドで初期状態に戻せます。開発中は何度か使うことになるでしょう。注意点としてはATTダイアログの表示ステータスはリセットされないため、ATTダイアログを再表示したい場合は、アプリをアンインストール → 再インストールする必要があります。

UMPConsentInformation.sharedInstance.reset()

まとめ

Part 1では、iOS 14.5からのユーザのトラッキングに関する変更点やApp Tracking Transparency (ATT)についてまとめました。
Part 2では、Googleが提供するUser Messaging Platform (UMP)とファンディングチョイスについてまとめました。
個人データの扱いはややこしい話なので、読者の理解に少しでも役立てば幸いです。

参考文献

https://support.google.com/fundingchoices/answer/9180084?hl=ja
https://developers.google.com/admob/ump/ios/quick-start
https://developers.google.com/admob/ios/targeting?hl=ja#users_under_the_age_of_consent
https://ja.wikipedia.org/wiki/EU一般データ保護規則
https://wired.jp/2018/06/04/gdpr-children-parental-consent/

Discussion