前回のあらすじ
前回はAdMobのGDPRメッセージ対応行うため、AndroidアプリでGDPRメッセージを表示するための方法をまとめました。なので今回はiOSアプリで実装したいと思います。
ひょっとしてATTも対応してくれる?
プライバシーとメッセージを見てみると「IDFA説明メッセージ」というものがあり、これはiOSアプリで広告などを出すときに必ず必要な「ATT(App Tracking Transparency:アプリトラッキングの透明性)」を通知するアラート機能をついでに実装してくれるようです。今までは個別に実装してましたが、この機能を使うとついでに実装できそうなので実装してみましょう
実装方法はAdMobの画面から「プライバシーとメッセージ」→ 「IDFA説明メッセージ」を選択し「メッセージの作成」ボタンを押下します。
アプリを選択
IDFA説明メッセージを表示するアプリ(iOS)を選択してください。言語を選択
デフォルトを英語にして日本語を追加で入れてますが、余力があれば対応言語全ていれてください。設定すると下記のような画面が表示されます。
この画面は「ATTメッセージ」が出る直前に表示され、「続行」を押すと「ATTメッセージ」が表示されます。
要は「このアプリは広告で成り立ってるから次の画面で「許可」を押してね」という内容にすればOKかと思いますので、文言やボタンのデザインなどの変更を行ってください。
最後に「公開」を押すと、アプリからこの画面を呼び出すことができます。
iOSアプリで実装する。
実装する前にアプリ上でinfo.plistを更新し、NSUserTrackingUsageDescription キーを設定する必要があります。
こちらは過去にエントリーした「【Apple】iOS14以降でトラッキング許可を行うお話」をご覧いただき、「App Tracking Transparency で許可をリクエストする」まで進めてください。
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 |
func createAdMobGDPR(isReload: Bool){ let parameters = UMPRequestParameters() // Set tag for under age of consent. Here false means users are not under age. parameters.tagForUnderAgeOfConsent = false // Request an update to the consent information. UMPConsentInformation.sharedInstance.requestConsentInfoUpdate( with: parameters, completionHandler: { [self] error in // The consent information has updated. if error != nil { // Handle the error. } else { // The consent information state was updated. // You are now ready to see if a form is available. let formStatus = UMPConsentInformation.sharedInstance.formStatus if formStatus == UMPFormStatus.available { loadForm(isReload: isReload) }else if formStatus == UMPFormStatus.unavailable{ // AdMob表示させる } } }) } func loadForm(isReload: Bool) { UMPConsentForm.load(completionHandler: { form, loadError in if loadError != nil { // Handle the error. self.createAdMobGDPR(isReload: false) } else { // Present the form. You can also hold on to the reference to present // later. if UMPConsentInformation.sharedInstance.consentStatus == UMPConsentStatus.required { form?.present( from: self, completionHandler: { dismissError in if UMPConsentInformation.sharedInstance.consentStatus == UMPConsentStatus.obtained { // App can start requesting ads. print(self.TAG+" App can start requesting ads.") } // Handle dismissal by reloading form. self.loadForm(isReload: false); }) } else { // Keep the form available for changes to user consent. print(self.TAG+" Keep the form available for changes to user consent.") // AdMob表示させる } } }) } |
関数名および処理はAndroid版の時とほぼ同じです。
この状態ではチェックができないのでデバッグモード+リセットを追記します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
/* * 202307 GDPR対応 */ func createAdMobGDPR(isReload: Bool){ let parameters = UMPRequestParameters() // デバッグパラメータ let debugSettings = UMPDebugSettings() debugSettings.testDeviceIdentifiers = ["テストデバイスID(IDFA)"] debugSettings.geography = UMPDebugGeography.EEA parameters.debugSettings = debugSettings // 同意をリセット UMPConsentInformation.sharedInstance.reset() // Set tag for under age of consent. Here false means users are not under age. parameters.tagForUnderAgeOfConsent = false // 以下略 } |
IDFA(端末ID)の確認ですが、chatGPTに確認したところ以下の記述で簡単に取得できるそうです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import AppTrackingTransparency import AdSupport func requestIDFA() { ATTrackingManager.requestTrackingAuthorization { status in DispatchQueue.main.async { if status == .authorized { let idfa = ASIdentifierManager.shared().advertisingIdentifier let idfaString = idfa.uuidString print("IDFA: \(idfaString)") } else { print("IDFAが利用できません") } } } } // IDFAの取得をリクエストする例 requestIDFA() |
実機でチェックを行う場合はこちらで取得してください(最初にATTの許諾が必要になるのですが)
設定を行うと下記のような画面が表示されます。
IDFAメッセージ
ATTメッセージ
GDPRメッセージ
表示順的には
- ATTのアラートが表示されていない場合、IDFAメッセージが表示(全てのユーザー)
- その後ATTメッセージが表示(全てのユーザー)
- GDPRメッセージが表示(ユーザーがEEAまたは英国在住の場合 or ターゲットが全部)
ここら辺を自動でやってくれますが、3に関しては例えば他の許諾などのアラートが表示されると、そちらが優先されてるような気がします。