问题描述
在某些设备上, trackingAuthorizationStatus 总是返回 .denied,即使“允许应用程序请求跟踪”开关打开。这意味着应用程序永远不能请求跟踪权限。在“设置”>“隐私”>“跟踪”中,应用程序没有重新打开权限的开关。我们团队有几台测试设备,两台相同型号的 iPhone 与相同版本的 iOS 产生了不同的结果。一个能够显示 requestTrackingAuthorization 提示并按预期运行,而另外两个则无论如何都保持 ATTrackingManagerAuthorizationStatusDenied 状态。我们已经尝试了常规 > 重置 > 重置位置和隐私以及删除应用程序、重新安装、重新启动、升级操作系统。没有什么可以修复 .denied 状态。代码如下:
override func viewDidLoad() {
super.viewDidLoad()
let status = ATTrackingManager.trackingAuthorizationStatus
switch status {
case .authorized:
idfaLabel.text = "Yay"
case .denied:
idfaLabel.text = "Goodbye IDFA"
case .notDetermined:
idfaLabel.text = "You've got a choice to make"
case .restricted:
idfaLabel.text = "can't help you there"
default:
print("New case???")
}
ATTrackingManager.requestTrackingAuthorization(completionHandler: {_ in
print("Tracking Requested")
})
}
提前感谢您提供任何线索。
解决方法
这是操作系统级别的问题,已在 14.5.1 版本中修复,因此只需更新您的操作系统即可在首次启动时获得 ATT 对话框。
iOS 和 iPadOS 14.5.1 发行说明
此更新修复了 App Tracking Transparency 的一个问题,其中一些 以前禁用允许应用程序请求跟踪的用户 重新启用后,设置可能不会收到来自应用程序的提示。这 更新还提供重要的安全更新,推荐用于 所有用户。