使用IOS 13编译的应用程序的IOS14跟踪权限

问题描述

在IOS14中,要使用Advertising Identifier,您需要请求权限,但是AppStore(与IOS13 SDK一起编译)上已经可用的应用程序的行为是什么?

我已将设备更新为IOS14 Beta 4,并从AppStore下载了应用程序。打开应用后,它不会自动请求任何跟踪权限,并且Advertising Identifier00000-0000-0000

这是否意味着我必须提交使用IOS14 SDK编译的应用更新并请求跟踪许可,否则Advertising Identifier将不可用?

解决方法

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

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

您必须在 ios 14 中实现 AppTrackingTransparency 才能显示跟踪权限。从此实现中,您可以收集 IDFA。

在 AppDelegate 中执行此操作

import AppTrackingTransparency

didFinishLaunchingWithOptions launchOptions中写一个这样的函数

     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 中添加 Privacy - Tracking Usage Description

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...