🤖️ SwiftUI ATTrackingManager 跟踪权限弹窗

2023/11/29

iOS 14 广告追踪

iOS 14 追踪权限一般用于广告追踪,例如用户授权 ATTracking 权限可能使得广告收入增多。info.plist 配置了追踪权限时,APP 内必须有弹窗授权,不然直接被拒审~😯

Privacy - Tracking Usage Description : 描述文本

多语言可以配置 "NSUserTrackingUsageDescription" = "描述文本";

解决方案:

当 iOS 追踪授权弹窗遇到其他弹窗执行时(如网络授权)将无法被执行弹出。以下有两种方案:

方案一: 当用户首次进入程序,且是活跃状态 didBecomeActiveNotification 时异步执行弹出。在 SwiftUI 应用入口,可以在 ContentView onReceive 中监听程序进入活跃状态,执行 ATTrackingManager.requestTrackingAuthorization ,此时应该是异步执行,建议延迟 1s

import AppTrackingTransparency
import AdSupport

ContentView()
    .onReceive(NotificationCenter.default.publisher(for: UIApplication.didBecomeActiveNotification)) { _ in

    self.setupGAD() // 同时加载广告
}

// 广告
private func setupGAD() {
    DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
        ATTrackingManager.requestTrackingAuthorization { status in
            GADMobileAds.sharedInstance().start()
                #if DEBUG
                    print("IDFA: \(ASIdentifierManager.shared().advertisingIdentifier.uuidString)")
                #endif
            }
        }
}

方案二: 在登录等按钮,执行授权 API。