iOS14以上系统获取idfa的方式有一些变化,这里我们来讨论一下如何在IOS14以上系统获取idfa。
所需环境
1.xcode需要升级到12.0以上版本。
2.手机需要升级到14.0以上版本。
iOS14系统之前获取idfa
1.先导入框架#import
2.获取广告标识
// 判断在设置-隐私里用户是否打开了广告跟踪
if ([[ASIdentifierManager sharedManager] isAdvertisingTrackingEnabled]) {
NSString *idfa = [[ASIdentifierManager sharedManager].advertisingIdentifier UUIDString];
NSLog(@"%@",idfa);
} else {
NSLog(@"请在设置-隐私-广告中打开广告跟踪功能");
}
iOS14及以上系统 获取广告标识idfa
iOS14.0以上系统,需要先请求跟踪权限,用户同意后才能获取到广告标识。
1.在info.plist文件里添加跟踪权限请求描述文字
注意:该权限只有xcode12及以上版本才有,大家只能去下载xcode12以上版本的来使用。
NSUserTrackingUsageDescription
此标识符将用于向您推荐个性化广告。
info.plist文件截图
2.导入框架
#import
#import
3.获取idfa
if (@available(iOS 14, *)) {
// iOS14及以上版本需要先请求权限
[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
// 获取到权限后,依然使用老方法获取idfa
if (status == ATTrackingManagerAuthorizationStatusAuthorized) {
NSString *idfa = [[ASIdentifierManager sharedManager].advertisingIdentifier UUIDString];
NSLog(@"%@",idfa);
} else {
NSLog(@"请在设置-隐私-跟踪中允许App请求跟踪");
}
}];
} else {
// iOS14以下版本依然使用老方法
// 判断在设置-隐私里用户是否打开了广告跟踪
if ([[ASIdentifierManager sharedManager] isAdvertisingTrackingEnabled]) {
NSString *idfa = [[ASIdentifierManager sharedManager].advertisingIdentifier UUIDString];
NSLog(@"%@",idfa);
} else {
NSLog(@"请在设置-隐私-广告中打开广告跟踪功能");
}
}
iOS14广告权限的位置已经变动到 设置->隐私->跟踪 里了。而且每个应用都会有自己单独的权限控制开关。在第一次请求权限的地方,还会弹出权限请求弹窗,供用户选择。
image.png
image.png
image.png
image.png
发现了个规律:手机在第一次安装时会弹出权限框,后面卸载再安装则会直接延续第一次的权限选择,不会再弹出权限弹窗。
发现个bug: 有些手机升级系统后会出现无法获得idfa的问题,不管有没有打开权限总开关,都无法弹出权限框,直接返回的是拒绝状态。推测这是苹果系统的一个bug,希望后面苹果能修复。问题详细描述博客链接
补充一点:
iOS14.0-14.5系统不弹权限框也可以直接获取IDFA,但是iOS14.5及以上系统必须弹这个权限授权框后才可以获取到。