发布网友 发布时间:2024-10-11 23:14
共1个回答
热心网友 时间:2024-10-14 18:44
背景
刚开发完一个迭代,千辛万苦实现了产品需求和设计的交互。然而再最后审核的时候被拒了。按理说审核被拒的理由再千奇百怪,Google一圈下来应该有答案,然而并没有。怎么办呢?
拒绝理由Guideline2.1-InformationNeeded
We'relookingforwardtocompletingourreview,butweneedmoreinformationtocontinue.YourappusestheAppTrackingTransparencyframework,butweareunabletolocatetheAppTrackingTransparencypermissionrequestwhenreviewedoniOS15.0.
看到这个oniOS15.0就知道苹果又要整什么幺蛾子了,明明iOS14都没问题的。
Google中...
找着找着找到了官方文档...
官方解释大致意思:调用这个APIrequestTrackingAuthorization必须是在App在前台活跃的前提下。
解决办法分析:
对于这种权限请求,通常情况下是写在了AppDelegate的didFinishLaunchingWithOptions中,但明显已经不符合官方的要求了,App还没有到Active的状态。
解决方式:
AppDelegate:
funcapplicationDidBecomeActive(_application:UIApplication){if#available(iOS14.0,*){ATTrackingManager.requestTrackingAuthorization{(status:ATTrackingManager.AuthorizationStatus)in//...}}}补充一点,因为的项目里面还用到了SceneDelegate,那么iOS13之后AppDelegate是不执行了的,所以改成在SceneDelegate的sceneDidBecomeActive方法中做权限请求。同时增加了1秒的延迟,避免和其他的权限弹窗冲突不显示的问题。
funcsceneDidBecomeActive(_scene:UIScene){DispatchQueue.global().asyncAfter(deadline:.now()+1){ATTrackingManager.requestTrackingAuthorization{(status:ATTrackingManager.AuthorizationStatus)in//...}}}结语:由于iOS15刚出没多久,Google资料特别少,StackOverflow上一哥们也只发现了问题,底下没人回复,所以解决这个问题的确花费了一些时间。特地记录下自己踩过的坑。希望也能给他人避避坑。
如果有更好的解决办法,欢迎提出,共同进步!