iOS 14对使用iOS 13编译的应用程序的跟踪权限

3
在iOS14中,如果要使用广告标识符,则需要请求权限。但是对于已经在AppStore上可用的应用程序(使用iOS13 SDK编译),行为如何?
我已将设备更新到iOS14 Beta 4,并从AppStore下载了应用程序。一旦我打开该应用程序,它就不会自动请求任何跟踪权限,并且广告标识符显示为00000-0000-0000
这是否意味着我必须提交使用iOS14 SDK编译的应用程序更新,并请求跟踪权限,否则广告标识符将无法使用?
2个回答

6

是的,您需要提交新的应用程序版本。它不会自动要求跟踪权限,因为它应该通过开发人员进行实例化。 因此,您需要使用AppTrackingTransparency框架并请求用户权限:

if #available(iOS 14, *) {
   ATTrackingManager.requestTrackingAuthorization { _ in
   }
} else {
   // Fallback on earlier versions
}

2
您需要在iOS 14中实现AppTrackingTransparency以显示跟踪权限。通过此实现,您可以收集IDFA。
请在AppDelegate中完成此操作。
import AppTrackingTransparency

didFinishLaunchingWithOptions 中编写以下函数:
     if #available(iOS 14, *) {
self.requestIDFAPermission() 
}

然后编写这个函数。
   func requestIDFAPermission() {
    if #available(iOS 14, *) {
        let semaphore = DispatchSemaphore(value: 0)
        DispatchQueue.main.async {
            ATTrackingManager.requestTrackingAuthorization { (status) in
                if (status == .authorized) {
                    let idfa = ASIdentifierManager.shared().advertisingIdentifier
                    print("IDFA: " + idfa.uuidString)
                } else {
                    print("Failed to get IDFA")
                }
                semaphore.signal()
            }
        }
        semaphore.wait()
    }
}

还有一件事。您应该在Plist中添加隐私-跟踪使用说明


这会导致死锁,因为AppDelegate已经在主线程上运行。您正在主线程上等待信号量信号,因此异步块无法执行。另一个改进是,在函数本身中已经检查了iOS 14的可用性,因此无需再次检查。 - blackforest-tom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接