OS14以上系统获取idfa的方式有一些变化,这里我们来讨论一下如何在IOS14以上系统获取idfa。
所需环境
1.xcode需要升级到12.0以上版本。
2.手机需要升级到14.0以上版本。
iOS14系统之前获取idfa
1.先导入框架#import <AdSupport/ASIdentifierManager.h>
2.获取广告标识
// 判断在设置-隐私里用户是否打开了广告跟踪
if ([[ASIdentifierManager sharedManager] isAdvertisingTrackingEnabled]) {
NSString *idfa = [[ASIdentifierManager sharedManager].advertisingIdentifier UUIDString];
NSLog(@"%@",idfa);
} else {
NSLog(@"请在设置-隐私-广告中打开广告跟踪功能");
}
iOS14及以上系统 获取广告标识idfa
iOS14.0以上系统,需要先请求跟踪权限,用户同意后才能获取到广告标识。
1.在info.plist文件里添加跟踪权限请求描述文字
注意:该权限只有xcode12及以上版本才有,大家只能去下载xcode12以上版本的来使用。
<key>NSUserTrackingUsageDescription</key>
<string>此标识符将用于向您推荐个性化广告。</string>
info.plist文件截图
2.导入框架
#import <AppTrackingTransparency/AppTrackingTransparency.h>
#import <AdSupport/ASIdentifierManager.h>
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及以上系统必须弹这个权限授权框后才可以获取到。
iOS 中的“限制广告跟踪”设置
选中此方框,即表示您确认,在使用广告标识符(按照《Apple Developer Program 许可协议》(“PLA”)中的定义)投放任何广告之前,您(以及与您签约以投放广告的任何第三方)将查看用户的广告偏好设置(按照 PLA 中的定义),并遵守用户在 iOS 中的设置(当用户启用该设置时)。
对于广告标识符 (IDFA) 的使用,请务必作出准确的回答。如果您的 App 包含 IDFA 而您选择了“不”,则此二进制文件将被永久拒绝,您必须提交另一个二进制文件。
来源:www.jianshu.com/p/5f05bc839…
iOS14系统已经可以开始下载了,但是有一些需要适配的地方,比如获取idfa的方式。这里我们来讨论一下如何在IOS14系统下获取idfa。
所需环境
1.xcode需要升级到最新版本12.0版本。
2.手机需要升级到最新版本14.0版本。
iOS14系统之前获取idfa
1.先导入框架#import <AdSupport/ASIdentifierManager.h>
2.获取广告标识
// 判断在设置-隐私里用户是否打开了广告跟踪if([[ASIdentifierManager sharedManager]isAdvertisingTrackingEnabled]){NSString*idfa=[[ASIdentifierManager sharedManager].advertisingIdentifier UUIDString];NSLog(@"%@",idfa);}else{NSLog(@"请在设置-隐私-广告中打开广告跟踪功能");}
iOS14及以上系统 获取广告标识idfa
iOS14以上系统,需要先请求跟踪权限,用户同意后才能获取到广告标识。
1.在info.plist文件里添加跟踪权限请求描述文字
注意:该权限只有xcode12及以上版本才有,现在大家只能去下载xcode12版本的来使用了。
image.png
2.导入框架
#import#import
3.获取idfa
if(@available(iOS14,)){// iOS14及以上版本需要先请求权限[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status){// 获取到权限后,依然使用老方法获取idfaif(status==ATTrackingManagerAuthorizationStatusAuthorized){NSStringidfa=[[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广告权限的位置已经变动到 设置->隐私->跟踪 里了。而且每个应用都会有自己单独的权限控制开关。在第一次请求权限的地方,还会弹出权限请求弹窗,供用户选择。