🍿

App Tracking Transparencyのダイアログ 対応

2024/10/03に公開

App Tracking Transparencyとは?(以降、ATT)

iOS 14.5、iPadOS 14.5、およびtvOS 14.5以降、ユーザーをトラッキングしたり、ユーザーのデバイスの広告識別子(IDFA)にアクセスしたりするには、AppTrackingTransparencyフレームワークを通じてユーザーの許可を得る必要があります。

https://developer.apple.com/documentation/apptrackingtransparency

info.plist

info.plistにNSUserTrackingUsageDescriptionを追加
ダイアログで表示するDescriptionを決めれる
※Titleは仕様上、変更は許されていない。

+       <key>NSUserTrackingUsageDescription</key>
+       <string>トラッキングを許可すると、お客様に適した広告が表示されます。また広告効果の測定や分析などのためにIDFA(広告識別子)を利用します。</string>

ATTの実装

ATTstatus.notDeterminedの場合のみオプトインが可能。
なので、まずユーザのステータスを確認後、.notDeterminedの場合はATTダイアログを表示する。それ以外のステータスの場合はスキップする。

(adjustの初期化、呼び出し元は省略)
:
enum AppTrackingAuthorizationStatus: Int32 {
    /// ユーザーがプロンプトに未応答の状態
    case notDetermined = 0
    /// デバイスレベルでアクセス拒否されている状態
    case restricted = 1
    /// アプリレベルでアクセス拒否されている状態
    case denied = 2
    /// アクセス許可されている状態
    case authorized = 3
    /// アクセスステータス取得不可の状態
    case unknown = -1
}

func getAppTrackingAuthorizationStatus() -> AppTrackingAuthorizationStatus {
    let status = adjust.appTrackingAuthorizationStatus()
    switch status {
    case AppTrackingAuthorizationStatus.notDetermined.rawValue:
        return .notDetermined
    case AppTrackingAuthorizationStatus.restricted.rawValue:
        return .restricted
    case AppTrackingAuthorizationStatus.denied.rawValue:
        return .denied
    case AppTrackingAuthorizationStatus.authorized.rawValue:
        return .authorized
    default:
        return .unknown
    }
}

func requestTrackingAuthorization() {
    adjust.requestTrackingAuthorization()
}

※iPhoneの設定 -> プライバシー -> トラッキング -> Appからのトラッキング要求を許可の状態や各アプリごとのON/OFFの設定にてトラッキング許諾状態を変更できます。

他参考情報

https://zenn.dev/serima/articles/011b7d0028d73513a1a0

Discussion