iOS15中ATT授权弹窗不显示问题原因分析及解决方案

发布网友 发布时间: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上一哥们也只发现了问题,底下没人回复,所以解决这个问题的确花费了一些时间。特地记录下自己踩过的坑。希望也能给他人避避坑。

如果有更好的解决办法,欢迎提出,共同进步!

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com