ATTrackingManager 在第一次安装时返回 .denied 并启用“允许应用程序请求跟踪”

问题描述

在某些设备上, 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 的一个问题,其中一些 以前禁用允许应用程序请求跟踪的用户 重新启用后,设置可能不会收到来自应用程序的提示。这 更新还提供重要的安全更新,推荐用于 所有用户。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...