ATTrackingManager.requestTrackingAuthorization 完成状态 returns 未确定

ATTrackingManager.requestTrackingAuthorization completion status returns notDetermined

我 运行 在模拟器上 iOS15,我的应用是 iOS14+。完成块中的状态总是 returns .notDetermined

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {    
    ATTrackingManager.requestTrackingAuthorization(completionHandler: { status in
        print(status) // .notDetermined
    })
}

我已经做过的事情:

这个问题不是 this question 的重复问题,因为我 运行 它通常在模拟器中而不是 UI 测试。

它与您链接到的问题本质上是重复的,根本原因是相同的。

问题是您要求系统在可以显示对话框的视图控制器之前显示同意对话框 来自

您最早可以在第一个视图控制器的 viewDidAppear 中显示跟踪同意对话框,因为那时您知道屏幕上有一个可见的视图控制器。

您链接到的问题中的答案通过在短暂延迟后发送跟踪请求来避免问题,这为初始视图控制器提供了足够的时间来呈现。

我不太喜欢这种修复方法,但如果您愿意,可以使用它。

更好的解决方案是将您的跟踪许可移动到适当的对象中,并在您的第一个视图控制器中调用该对象的方法。