iOS开发 ios14.0以上系统广告标识idfa获取适配

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.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及以上系统必须弹这个权限授权框后才可以获取到。

二、某些手机上,如果获取idfa的方法调用时机太靠前,会直接返回ATTrackingManagerAuthorizationStatusNotDetermined ,这种情况需要延迟获取。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。