使用Adjust申请ATT授权在iOS 14正常但iOS 15失效问题咨询
Adjust ATT授权iOS15不生效问题排查及解决方案
问题现象
现有ATT授权申请逻辑在iOS14系统运行完全正常,iOS15系统上无法触发授权弹窗、回调不执行,原始实现代码如下:
if #available(iOS 14, *) { Adjust.requestTrackingAuthorization(completionHandler: { status in //you got permission to track }) } else { //you got permission to track, iOS 14 is not yet installed }
排查方向及对应解决方案
- Adjust SDK版本兼容性校验
iOS15发布后,低于4.29.0版本的Adjust SDK未适配iOS15的ATT权限调用规则,调用接口会直接跳过弹窗与回调。
解决方案:将Adjust SDK升级至4.29.0及以上稳定版本,升级后验证基础接口调用逻辑是否正常。 - Info.plist权限声明校验
iOS15对NSUserTrackingUsageDescription字段的校验规则更严格,若字段为空、内容模糊不符合苹果规范,系统会直接拦截权限申请,不会弹出授权窗口。
解决方案:检查Info.plist中是否添加了NSUserTrackingUsageDescription字段,描述内容需明确告知用户权限用途,例如“我们将获取您的设备标识用于优化广告投放效果,提升应用使用体验”。 - 接口调用时机校验
iOS15要求ATT授权申请必须在应用处于前台激活状态时调用,若在didFinishLaunchingWithOptions中直接调用、或应用处于后台阶段触发调用,系统会直接忽略该请求。
解决方案:将ATT授权调用逻辑移至根控制器的viewDidAppear生命周期之后,或监听UIApplicationDidBecomeActiveNotification通知,收到通知后再触发Adjust的ATT申请接口。 - 全局ATT权限状态校验
若用户之前已经拒绝过ATT权限、或在系统设置-隐私与安全性-跟踪中关闭了「允许App请求跟踪」总开关,所有ATT申请都会直接返回拒绝状态,不会弹窗,属于系统规则限制。
解决方案:调用申请接口前先通过ATTrackingManager.trackingAuthorizationStatus属性预先获取当前权限状态,仅当状态为notDetermined时再发起申请,其他状态根据业务需求做对应处理。 - 重复调用冲突校验
若项目中其他第三方SDK、或自有逻辑已经先于Adjust调用过ATT申请接口,拿到确定的权限状态后,Adjust再调用该接口也不会触发弹窗与回调。
解决方案:统一管理ATT权限申请入口,全局仅发起一次ATT申请,拿到结果后同步给Adjust和其他需要该权限的业务模块。
修正后参考代码
import AdSupport import AppTrackingTransparency if #available(iOS 14, *) { let currentStatus = ATTrackingManager.trackingAuthorizationStatus guard currentStatus == .notDetermined else { // 已有明确权限状态,根据currentStatus处理对应业务逻辑 return } Adjust.requestTrackingAuthorization(completionHandler: { status in switch status { case .authorized: // 用户允许跟踪,执行后续上报逻辑 case .denied, .restricted: // 用户拒绝/权限受限,按无权限逻辑处理 case .notDetermined: // 未决定状态,常规流程不会走到该分支 @unknown default: break } }) } else { // iOS14以下系统默认支持追踪,执行对应逻辑 }
内容的提问来源于stack exchange,提问作者luc
相关产品推荐
相关产品推荐

