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 *)#>];
        }
}