You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检查设备同意状态以配置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 18:41:06