iOS开发之iOS14详解

52 阅读2分钟

@TOC 在 iOS14之前,当用户首次访问APP时,会被要求开放很多权限,如相册、定位、通讯录等,实际上该APP可能只需一个选择图片功能,但却被要求开放整个照片库的权限,这是很不合理的。 对于相册,在 iOS14 中引入了 “LimitedPhotos Library” 的概念,用户可以授予应用访问其一部分的照片,对于应用来说,仅能读取到用户选择让应用来读取的照片,让我们看到了 Apple 对于用户隐私的尊重。这仅仅是一部分,在iOS14 中,可以看到诸多类似的保护用户隐私的措施,也需要我们升级适配。

1、project文件命名

iOS 14之前,Xcode中不同的project里面的文件命名可以相同,但ios14开始不同的project目录下也不能同时拥有相同命名的文件,不然会导致报错。

2、 广告标识符IDFA

IDFA 全称为 Identity for Advertisers ,即广告标识符。用来标记用户,目前最广泛的用途是用于投放广告、个性化推荐等。

更新前后区别如下:IDFA权限提示

IDFA权限提示:iOS13左、iOS14右

2.1、iOS13之前

系统会默认为用户开启允许追踪设置,我们可以简单的通过代码来获取到用户的 IDFA 标识符。

if ([[ASIdentifierManager sharedManager] isAdvertisingTrackingEnabled]) {
        NSString *idfaStr = [[ASIdentifierManager sharedManager] advertisingIdentifier].UUIDString;
        NSLog(@"idfaStr : %@", idfaStr);
    }

2.2、iOS14

  • ASIdentifierManager这个判断用户是否允许被追踪的方法已经废弃。
  • 系统会默认为用户关闭广告追踪权限

对于这种情况,我们需要去请求用户权限。

首先在 info.plist 中配置权限: key:NSUserTrackingUsageDescription value:获取设备信息用以精准推送您喜欢的内容

然后通过以下代码获得IDFA标识符:

 if (@available(iOS 14, *)) {
        [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
            if (status == ATTrackingManagerAuthorizationStatusAuthorized) {
                NSString *idfaStr = [[ASIdentifierManager sharedManager] advertisingIdentifier].UUIDString;
                NSLog(@"idfaStr : %@", idfaStr);
            }
        }];
    } else {
        // 使用原方式访问 IDFA
        if ([[ASIdentifierManager sharedManager] isAdvertisingTrackingEnabled]) {
            NSString *idfaStr = [[ASIdentifierManager sharedManager] advertisingIdentifier].UUIDString;
            NSLog(@"idfaStr : %@", idfaStr);
        }
    }

  • 最后启动应用弹出申请,经过用户同意授权之后,才能最终获取正确的IDFA信息。

3、相册

更新前后区别如下: 相册权限提示

相册权限提示:iOS13左、iOS14右

3.1、iOS13之前

iOS13及以前,App请求用户相册授权:用户同意App获取相册信息,当前App就可以获取到用户的整个照片库信息。

3.2、iOS14

新增了“Limited Photo Library Access” 模式,在授权弹窗中增加了 Select Photo 选项。用户可以在 App 请求调用相册时选择部分照片让 App 读取。从 App 的视⻆来看,你的相册里就只有这几张照片,App 无法得知其它照片的存在。