被拒原因:
Guideline 2.1 - Information Needed
We're looking forward to completing our review, but we need more information to continue. Your app uses the AppTrackingTransparency framework, but we are unable to locate the App Tracking Transparency permission request when reviewed on iOS 15.0.
这个东西在iOS14上是没有问题的,但是前两天发布新版本的时候意外的被拒了,原因也很简单,就是项目中使用了ATT库,但是没有说明是干什么的,通俗的说就是app没有弹窗。
我看了一下代码:
if #available(iOS 14.0, *) {
let status = ATTrackingManager.trackingAuthorizationStatus
switch status {
case .denied:
logDebug("用户拒绝IDFA")
case .authorized:
logDebug("用户允许IDFA")
case .notDetermined:
logDebug("用户未做选择或未弹窗IDFA")
ATTrackingManager.requestTrackingAuthorization { _ in
}
default:
break
}
} else {
if ASIdentifierManager.shared().isAdvertisingTrackingEnabled {
logDebug("用户开启了广告追踪IDFA")
} else {
logDebug("用户关闭了广告追踪IDFA")
}
}
完全没有问题啊,凭借多年的经验,感觉像是多个系统权限弹窗同时请求,导致的不显示弹窗,但是以前不管有多少个系统弹窗都会一一弹出来的,只能猜猜了,加了个延时函数,出乎意料的是竟然可以了……,此时感觉这个大概率是iOS15的bug,继续测试,把其他的请求权限先注释,单独留下ATT,去掉延时函数,竟然也不会弹,what?啥情况,有点懵,把ATT放到登录的首页面,竟然也没弹。
那就只能在延时上做文章了, 看看这个方案可不可行。 实际上这个方案是不可行的,我们知道,系统弹窗如果你不点的话,会一直存在,如果延时到时间了,用户没有让其他的系统权限弹窗消失,ATT还是不会弹出来的。
后来请教了一下群里的兄弟们,有个兄弟遇到了这个问题,他也发现了用延时函数可以,还说把ATT放到某个页面中也可以,然后我也把延时方案的缺点给他说了……讨论结束😄。
两个方案:
1: 延时,但是要注意不能有其他的系统弹窗存在。
2: 在登录注册的某一个页面,流程中一定一定要进入这个页面。
我采用了第二种方案,因为我首次进入app其他的权限请求,延时方案不保险。 但是你可以都用,权限请求不管你app有多少个请求,只有第一次会弹窗,没问题的。
大家如果有其他的方案也可以评论一下,共同进步。
后续:按住option点击,看到了文档上的一句话……,要在active状态时调用,在applicationDidBecomeActive方法中写请求ATT权限方法即可,上面写的几个方法不需要了。