如何在iOS 15.1系统上正常显示AppTrackingManager权限申请弹窗
iOS 15.1 应用跟踪权限弹窗无法弹出解决方案
- 首先修正AppDelegate的方法签名错误
你当前编写的application:applicationDidBecomeActive:launchOptions不是系统回调的标准方法,系统不会触发该方法执行,导致权限请求代码从未运行。请替换为以下正确代码:
// 系统标准的应用启动完成回调 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 可在这里提前判断权限状态 return YES; } // 系统标准的应用进入活跃状态回调 - (void)applicationDidBecomeActive:(UIApplication *)application { [self requestIDFA]; } - (void)requestIDFA { if (@available(iOS 14, *)) { ATTrackingManagerAuthorizationStatus status = [ATTrackingManager trackingAuthorizationStatus]; // 仅权限状态为未申请时,调用接口才会弹出弹窗 if (status == ATTrackingManagerAuthorizationStatusNotDetermined) { [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) { NSLog(@"跟踪权限状态:%ld", (long)status); }]; } else { NSLog(@"已申请过权限,当前状态:%ld", (long)status); } } else { // 低版本系统兼容逻辑 } }
- 检查Info.plist配置
必须在Info.plist中添加NSUserTrackingUsageDescription字段,字段值为你申请跟踪权限的业务说明文案(例如「为向您提供更个性化的内容推荐,需要获取您的广告标识符权限」),缺少该字段时调用权限接口会直接无响应或崩溃。 - 检查系统全局跟踪开关
进入iOS系统【设置】-【隐私与安全性】-【跟踪】,确认「允许App请求跟踪」总开关处于开启状态,该开关关闭时所有App都无法弹出权限申请弹窗,会直接返回拒绝状态。 - 检查框架引入是否正确
你提到引入的是AppTransparencyFramework,正确的框架名称应为AppTrackingTransparency.framework,引入时注意不要写错名称,同时需要在头文件中导入正确依赖:
#import <AppTrackingTransparency/AppTrackingTransparency.h> #import <AdSupport/AdSupport.h>
- 权限状态重置验证
如果之前已经调用过一次权限申请接口,后续再次调用不会重复弹出弹窗,需要卸载重装App才能将权限状态重置为未申请,重新验证弹窗逻辑。
内容的提问来源于stack exchange,提问作者Omer
相关产品推荐
相关产品推荐

