@TOC 在 iOS14之前,当用户首次访问APP时,会被要求开放很多权限,如相册、定位、通讯录等,实际上该APP可能只需一个选择图片功能,但却被要求开放整个照片库的权限,这是很不合理的。 对于相册,在 iOS14 中引入了 “LimitedPhotos Library” 的概念,用户可以授予应用访问其一部分的照片,对于应用来说,仅能读取到用户选择让应用来读取的照片,让我们看到了 Apple 对于用户隐私的尊重。这仅仅是一部分,在iOS14 中,可以看到诸多类似的保护用户隐私的措施,也需要我们升级适配。
1、project文件命名
iOS 14之前,Xcode中不同的project里面的文件命名可以相同,但ios14开始不同的project目录下也不能同时拥有相同命名的文件,不然会导致报错。
2、 广告标识符IDFA
IDFA 全称为 Identity for Advertisers ,即广告标识符。用来标记用户,目前最广泛的用途是用于投放广告、个性化推荐等。
更新前后区别如下:
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 无法得知其它照片的存在。