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

Posted

技术标签:

【中文标题】使用 IOS 13 编译的应用程序的 IOS14 跟踪权限【英文标题】:IOS14 tracking permission for apps compiled with IOS 13 【发布时间】:2020-12-07 09:39:55 【问题描述】:

ios14 中要使用Advertising Identifier,您需要请求许可,但是 AppStore 上已经可用的应用程序的行为是什么(使用 IOS13 SDK 编译)?

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

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

您必须从 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

【讨论】:

这会导致死锁,因为 AppDelegate 已经在主线程上运行。您正在等待主线程上的信号量信号,因此异步块无法执行。作为另一项改进,当您已经在函数本身中执行此操作时,无需检查 ios 14 的可用性。

以上是关于使用 IOS 13 编译的应用程序的 IOS14 跟踪权限的主要内容,如果未能解决你的问题,请参考以下文章

命令 MergeSwiftModule 失败,退出代码为非零:为 iOS 13.0 编译,但模块“xxxTests”的最低部署目标为 iOS 14.2:

一个额外的 UITableViewCellContentView 覆盖出现在 iOS 14 上的 TableView 中,防止点击,但在 iOS 13 上工作正常

如何将我的应用程序从 IOS 13 迁移到 IOS 14?

从 iOS 13.6.1 升级到 iOS 14 时应用行为发生变化

从 iOS 14 开始,我的应用程序仅在使用调试器或使用 iOS 13 的设备时才显示图像。此外,键盘不会显示所有键

为啥需要在 pageControl 中为 iOS 13 和 iOS 14 设置不同的常量