如何编程启用NSCrossWebsiteTrackingUsageDescription或弹窗申请用户授权
iOS 跨网站跟踪权限启用方案
前置确认
你已经在Info.plist中完成了NSCrossWebsiteTrackingUsageDescription字段配置,系统设置页已生成对应选项,该字段是弹出授权弹窗的必要前提,无法省略。
操作步骤
- 导入权限依赖框架
Swift 项目在调用文件头部添加:import AppTrackingTransparency
Objective-C 项目在调用文件头部添加:#import <AppTrackingTransparency/AppTrackingTransparency.h> - 在合适的业务时机调用权限请求接口(建议选择用户能感知到跨站跟踪价值的场景触发,不要在App冷启动时直接弹出)
Swift 代码示例:
Objective-C 代码示例:if #available(iOS 14.0, *) { ATTrackingManager.requestTrackingAuthorization { status in switch status { case .authorized: // 用户已同意授权,系统设置页开关自动变为enabled状态 print("跨网站跟踪权限已启用") case .denied: // 用户已拒绝授权,可自行弹窗引导用户前往系统设置手动开启 print("跨网站跟踪权限已被用户拒绝") case .restricted: // 设备受家长控制等限制,无法获取该权限 break case .notDetermined: // 用户尚未做出选择 break @unknown default: break } } }if (@available(iOS 14.0, *)) { [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) { if (status == ATTrackingManagerAuthorizationStatusAuthorized) { NSLog(@"跨网站跟踪权限已启用"); } }]; }
注意事项
- 你无法直接通过代码将该权限设置为enabled状态,所有权限状态变更必须由用户主动操作:要么在系统弹出的授权窗中选择允许,要么手动前往系统设置页修改开关状态
- 如果用户之前已经拒绝过该权限,再次调用请求接口不会重复弹出系统授权窗,此时你可以自定义提示引导用户跳转系统设置修改
- 仅iOS 14及以上系统支持该权限接口,低于iOS 14的系统默认允许跨网站跟踪,无需申请权限
内容的提问来源于stack exchange,提问作者Anton_Lopez
相关产品推荐
相关产品推荐

