iOS14のAppTrackingTransparencyに対応するためにやったこと
AppTrackingTransparency
とは
iOS 14.5、iPadOS 14.5、およびtvOS 14.5以降、ユーザーをトラッキングしたり、ユーザーのデバイスの広告識別子にアクセスしたりするには、AppTrackingTransparencyフレームワークを通じてユーザーの許可を得る必要があります。
次のようなダイアログでユーザーがオプトインすることにより有効になります。ダイアログを表示するタイミングとメッセージはアプリ側でコントロールできます。
ユーザーをトラッキングしたり、デバイスの広告識別子にアクセスしたりする許可をリクエストするには、AppTrackingTransparencyフレームワークを使用します。また、ユーザーをトラッキングする理由を説明した目的文字列をシステムプロンプトに記述する必要もあります。
以下は既に広告(AdMob)を表示していたアプリでAppTrackingTransparencyに対応するためにやったことです。
Info.plist
Info.plisにNSUserTrackingUsageDescription
を追加 (Privacy - Tracking Usage Description)
+ <key>NSUserTrackingUsageDescription</key>
+ <string>「許可」するとお客様に最適化された広告が表示されます</string>
コードの追加
ATTrackingManager.trackingAuthorizationStatus
が.notDetermined
の場合はオプトインが可能なのでATTrackingManager.requestTrackingAuthorization
を呼び出して同意画面を表示させます。同意画面はアプリインストール後に一度しか表示できないので表示するタイミングを調整した方が良いです。アプリを削除して再インストールすれば再び表示されます。iOSの設定 -> プライバシー -> トラッキング -> Appからのトラッキング要求を許可
の状態や各アプリごとのON/OFFの設定によって挙動が変わります。
なお、ATTrackingManager
はiOS14+で使用可能です、古いOSでは使用しません。
@Published var trackingAuthorized: Bool?
func checkTrackingAuthorizationStatus() {
switch ATTrackingManager.trackingAuthorizationStatus {
case .notDetermined:
requestTrackingAuthorization()
case .restricted:
updateTrackingAuthorizationStatus(false)
case .denied:
updateTrackingAuthorizationStatus(false)
case .authorized:
updateTrackingAuthorizationStatus(true)
@unknown default:
fatalError()
}
}
func requestTrackingAuthorization() {
ATTrackingManager.requestTrackingAuthorization { status in
switch status {
case .notDetermined: break
case .restricted:
self.updateTrackingAuthorizationStatus(false)
case .denied:
self.updateTrackingAuthorizationStatus(false)
case .authorized:
self.updateTrackingAuthorizationStatus(true)
@unknown default:
fatalError()
}
}
}
func updateTrackingAuthorizationStatus(_ b: Bool) {
GADMobileAds.sharedInstance().start { status in
self.trackingAuthorized = b
}
}
AdMobのサイトには以下のようなサンプルコードがあったので初期化コード GADMobileAds.sharedInstance().start()
は念の為authorization statusが確定した後に実行するようにしています。
func requestIDFA() {
ATTrackingManager.requestTrackingAuthorization(completionHandler: { status in
// Tracking authorization completed. Start loading ads here.
// loadAd()
})
}
App Store Connect
Appのプライバシー
のページでトラッキング目的でデータを収集することを宣言します、トラッキングを宣言しないと警告が表示されます。
AdMobが収集する可能性のあるデータはこちらに記載されています、これを参考にAppのプライバシーページから収集するデータタイプを選択します。
参考情報
Discussion