iOS14.5之前,苹果默认用户允许app访问追踪权限,之后需要明确弹框进行权限申请。
iphone手机设置相关:
系统-隐私与安全性-跟踪,这里若关闭“允许App请求跟踪“则所有App请求权限时都不会弹框,直接会回调用户没有开启权限。 开启总开关后还须单独打开-对应App-“允许跟踪”开关。如图:
iOS14系统之前获取idfa
1.先导入框架#import <AdSupport/ASIdentifierManager.h>
2.获取广告标识
if ([[ASIdentifierManager sharedManager] isAdvertisingTrackingEnabled]) {
NSString *idfa = [[ASIdentifierManager sharedManager].advertisingIdentifier UUIDString];
NSLog(@"%@",idfa);
} else {
NSLog(@"请在设置-隐私-广告中打开广告跟踪功能");
}
iOS14系统之后获取idfa
1.info.plist文件添加跟踪权限请求描述文字
<key>NSUserTrackingUsageDescription</key>
<string>此标识符将用于向您推荐个性化广告。</string>
2.导入框架
#import <AppTrackingTransparency/AppTrackingTransparency.h>
#import <AdSupport/ASIdentifierManager.h>
3.获取广告标识
- (void)applicationDidBecomeActive:(UIApplication *)application {
if (@available(iOS 14, *)) {
// iOS14及以上版本需要先请求权限
[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
// 获取到权限后,依然使用老方法获取idfa
if (status == ATTrackingManagerAuthorizationStatusAuthorized) {
NSString *idfa = [[ASIdentifierManager sharedManager].advertisingIdentifier UUIDString];
NSLog(@"%@",idfa);
} else {
NSLog(@"请在设置-隐私-跟踪中允许App请求跟踪");
}
//无论是否获取到idfa 在收到系统回调函数后调用热云SDK init函数
[Tracking initWithAppKey:<#(nonnull NSString *)#> withChannelId:<#(nonnull NSString *)#> withCAID:<#(nullable NSString *)#> withCAID2:<#(nullable NSString *)#> withMobDNAOid:<#(nullable NSString *)#> withParams:<#(nullable NSDictionary *)#>];
}];
} else {
// iOS14以下版本依然使用老方法
// 判断在设置-隐私里用户是否打开了广告跟踪
if ([[ASIdentifierManager sharedManager] isAdvertisingTrackingEnabled]) {
NSString *idfa = [[ASIdentifierManager sharedManager].advertisingIdentifier UUIDString];
NSLog(@"%@",idfa);
} else {
NSLog(@"请在设置-隐私-广告中打开广告跟踪功能");
}
//无论是否获取到idfa 直接调用热云SDK init函数
[Tracking initWithAppKey:<#(nonnull NSString *)#> withChannelId:<#(nonnull NSString *)#> withCAID:<#(nullable NSString *)#> withCAID2:<#(nullable NSString *)#> withMobDNAOid:<#(nullable NSString *)#> withParams:<#(nullable NSDictionary *)#>];
}
}