首页 > 编程知识 正文

ios照片权限,ios麦克风权限

时间:2023-05-03 17:00:46 阅读:219747 作者:2436

iOS14及以上系统,获取IDFA的方式有所变化,
苹果通知
App 需要通过 AppTrackingTransparency 征得用户的许可,才能追踪用户以及访问其设备的广告标识符,类似相机,相册,地图等弹出用户授权框,下面介绍ATT设置。

1、隐私中打开app跟踪总开关,否则无法弹框
若开关打开,仍然无法弹框,则重启iphone试试,亲测有效哦。

2、info.plist文件中添加
描述根据自己的app自定义。

<key>NSUserTrackingUsageDescription</key><string>是否允许xx使用您的IDFA信息,以此来优化您的使用体验</string>

3、在app初始化时 获取ATT权限

+ (void)getAdvertisingTrackingAuthority { if (@available(iOS 14, *)) { ATTrackingManagerAuthorizationStatus status = ATTrackingManager.trackingAuthorizationStatus; switch (status) { case ATTrackingManagerAuthorizationStatusDenied: NSLog(@"用户拒绝IDFA"); break; case ATTrackingManagerAuthorizationStatusAuthorized: NSLog(@"用户允许IDFA"); break; case ATTrackingManagerAuthorizationStatusNotDetermined: { NSLog(@"用户未做选择或未弹窗IDFA"); //请求弹出用户授权框,只会在程序运行是弹框1次,除非卸载app重装,通地图、相机等权限弹框一样 [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) { NSLog(@"app追踪IDFA权限:%lu",(unsigned long)status); }]; } break; default: break; } } else { // Fallback on earlier versions if ([ASIdentifierManager.sharedManager isAdvertisingTrackingEnabled]) { NSLog(@"用户开启了广告追踪IDFA"); }else { NSLog(@"用户关闭了广告追踪IDFA"); } }}

4、问题描述
现象:当我们请求调起IDFA授权弹框后,程序仍然会往下走,不会等待到用户选择后 再往下执行。 此时如果调起弹框后面就有获取IDFA,是可以获取到的,因为用户未选择前app是默认运行的,那么如何做到同步呢? 可以在授权完成后再进行后续逻辑,如下:

授权操作完成后 再做相关获取操作 eg下图伪代码

case ATTrackingManagerAuthorizationStatusDenied: { NSLog(@"用户拒绝IDFA"); finishBlock(); } break;case ATTrackingManagerAuthorizationStatusAuthorized: { NSLog(@"用户允许IDFA"); finishBlock(); } break;case ATTrackingManagerAuthorizationStatusNotDetermined: { NSLog(@"用户未做选择或未弹窗IDFA"); [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) { dispatch_async(dispatch_get_main_queue(), ^{ finishBlock(); }); } break;

注意:切记不可在此加锁,来实现同步,根据调用场景不同,可能会造成死锁(eg:didFinishLaunchingWithOptions)

如何使用CSS设置div半透明的效果

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。