参考:
AppTrackingTransparency
截止至2020年4月25日,实测更新iOS系统至iOS14.4.2,设置->隐私->跟踪
中允许App请求数据
的总开关是默认开启的(可能由更新之前旧系统中允许获取idfa的开关决定的),因此如果使用旧的代码,不需要调用授权代码,仍然可以获取到idfa。
苹果官网明确指出:
确保您的应用已准备好用于iOS 14.5,iPadOS 14.5和tvOS 14.5。在即将发布的公共发行版中,所有应用都必须使用AppTrackingTransparency框架来请求用户允许其跟踪或访问其设备的广告标识符的权限。除非您获得用户允许启用跟踪的权限,否则设备的广告标识符值将全为零,并且您可能无法跟踪它们。
因此 AppTrackingTransparency
是必须适配的,后面更新到 iOS14.5 ,旧的获取方式就不好使了。两个步骤:
1、工程 Info.plist
文件新增用户授权提示文案,用 Source Code
的方式打开Info.plist
文件,添加如下代码,string值可根据实际需要自行设置:
<key>NSUserTrackingUsageDescription</key>
<string>允许广告追踪以获取更多相关广告</string>
2、代码适配:
导入框架:
#import <AdSupport/AdSupport.h>
#import <AppTrackingTransparency/AppTrackingTransparency.h>
iOS版本判断:
- (NSString*)idfa {
__block NSString *idfa = @"";
ASIdentifierManager *manager = [ASIdentifierManager sharedManager];
if (@available(iOS 14, *)) {
[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
if (status == ATTrackingManagerAuthorizationStatusAuthorized) {
idfa = [[manager advertisingIdentifier] UUIDString];
}
}];
}else{
if ([manager isAdvertisingTrackingEnabled]) {
idfa = [[manager advertisingIdentifier] UUIDString];
}
}
return idfa;
}
在iOS14 以上的系统,一旦执行授权代码requestTrackingAuthorizationWithCompletionHandler
,只有第一次授权会弹出系统提示框,如下:
应用也会增加到 设置->隐私->跟踪
的列表中:
注意:
1、如果关闭列表中对应的应用的开关,再开启,该应用的idfa值不变;
2、如果关闭总跟踪开关(“允许App请求跟踪”)再开启,则应用的开关需要单独开启,且应用的idfa值会改变;