如何检查设备同意状态以配置SKAdNetwork的isAdvertiserTrackingEnabled?
iOS广告追踪同意状态检查与权限处理指南
针对你提到的使用SKAdNetwork时需根据设备同意状态配置isAdvertiserTrackingEnabled的问题,以下是具体实现方案:
一、检查用户广告追踪同意状态
iOS通过AppTrackingTransparency框架管理广告追踪权限,可直接借助ATTrackingManager获取当前授权状态:
Swift 实现代码
import AppTrackingTransparency import AdSupport func getTrackingConsentStatus() { let status = ATTrackingManager.trackingAuthorizationStatus switch status { case .authorized: // 用户已同意,可将isAdvertiserTrackingEnabled设为true print("用户允许广告追踪") case .denied: // 用户拒绝,需将isAdvertiserTrackingEnabled设为false print("用户拒绝广告追踪") case .notDetermined: // 用户尚未选择,需先请求权限 askForTrackingPermission() case .restricted: // 设备受限制(如开启家长控制),无法进行广告追踪 print("设备受限制,无法广告追踪") @unknown default: print("未知授权状态") } }
Objective-C 实现代码
#import <AppTrackingTransparency/AppTrackingTransparency.h> #import <AdSupport/AdSupport.h> - (void)getTrackingConsentStatus { ATTrackingManagerAuthorizationStatus status = [ATTrackingManager trackingAuthorizationStatus]; switch (status) { case ATTrackingManagerAuthorizationStatusAuthorized: NSLog(@"用户允许广告追踪"); break; case ATTrackingManagerAuthorizationStatusDenied: NSLog(@"用户拒绝广告追踪"); break; case ATTrackingManagerAuthorizationStatusNotDetermined: [self askForTrackingPermission]; break; case ATTrackingManagerAuthorizationStatusRestricted: NSLog(@"设备受限制,无法广告追踪"); break; default: NSLog(@"未知授权状态"); break; } }
二、请求广告追踪权限
若用户尚未做出授权选择(状态为.notDetermined),需主动发起权限请求,同时必须在Info.plist中配置权限说明:
权限请求代码
Swift
func askForTrackingPermission() { ATTrackingManager.requestTrackingAuthorization { [weak self] status in // 请求完成后回到主线程处理后续逻辑 DispatchQueue.main.async { self?.getTrackingConsentStatus() } } }
Objective-C
- (void)askForTrackingPermission { [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) { dispatch_async(dispatch_get_main_queue(), ^{ [self getTrackingConsentStatus]; }); }]; }
Info.plist 配置要求
必须添加NSUserTrackingUsageDescription键,填写向用户说明请求权限的原因,示例:
<key>NSUserTrackingUsageDescription</key> <string>我们需要此权限为您提供更贴合需求的个性化广告,并优化广告投放效果</string>
未配置该键时,系统会直接拒绝权限请求。
三、关键说明
SKAdNetwork本身无需用户同意广告追踪即可正常运作,但Facebook要求根据同意状态设置isAdvertiserTrackingEnabled,是为了对齐其事件追踪逻辑。- 即使用户拒绝广告追踪,
SKAdNetwork仍能完成归因,但无法获取IDFA这类用户级标识符。
内容的提问来源于stack exchange,提问作者Salome Tsiramua
相关产品推荐
相关产品推荐

