相册
- 新增Limited Photo Library Access模式
问题:iOS14用户选择PHAuthorizationStatusLimited时,调用相册功能时会反复提醒用户修改相册权限的情况。
- 解决方案:在info.plist文件中设置PHPhotoLibraryPreventAutomaticLimitedAccessAlert为YES。通过代码中相册拉起
[[PHPhotoLibrary sharedPhotoLibrary] presentLimitedLibraryPickerFromViewController:self];
- 解决方案:在info.plist文件中设置PHPhotoLibraryPreventAutomaticLimitedAccessAlert为YES。通过代码中相册拉起
官方推荐使用PHPickerViewController,UIImagePickerViewController功能受限,每次只能获取一张图片。
- PHPicker支持多选,支持搜索,支持按 image,video,livePhotos 等进行选择
- 注意⚠️:
- 在 limit Photo 模式下,AssetsLibrary 访问相册会失败
- 在 writeOnly 模式下,AssetLibrary 也会有显示问题
- 按旧版本获取相册授权时,PHAuthorizationStatusLimited 状态下也会返回PHAuthorizationStatusAuthorized
定位
- iOS14 新增用户大致位置选项。iOS14 授权弹窗新增的 Precise的开关默认会选中精确位置。用户通过这个开关可以进行更改,当把这个值设为 On 时,地图上会显示精确位置;切换为Off时,将显示用户的大致位置。
- iOS14用户可以在在 “隐私设置” 中设置来开启精确定位。
- iOS14 在 CLLocationManager 新增两个方法可用于向用户申请临时开启一次精确位置权限。
- 先配置info.plist,设置NSLocationTemporaryUsageDescriptionDictionary中的key和value
- 使用以下两个API ```objectivec
- (void)requestTemporaryFullAccuracyAuthorizationWithPurposeKey:(NSString *)purposeKey
completion:(void (^)(NSError *))completion;
(void)requestTemporaryFullAccuracyAuthorizationWithPurposeKey:(NSString *)purposeKey; ```
对位置不敏感的可以在info.plist文件设置NSLocationDefaultAccuracyReduced来获取大概的位置。但是这样设置之后用户想要为该 App 开启精确定位权限,也无法开启。
- 注意
- 当 App 在 Background 模式下,如果并未获得精确位置授权,那么 Beacon 及其他位置敏感功能都将受到限制
本地网络
- iOS14 当 App 要使用 Bonjour 服务时或者访问本地局域网,使用 mDNS 服务等,都需要授权,开发者需要在 Info.plist 中详细描述使用的为哪种服务以及用途。下图为需要无需申请权限与需要授权的服务:
- 如果应用中需要使用 LocalNetwork 需要在 Info.plist 中配置两个选项,详细描述为什么需要使用该权限,以及需要列出具体使用 LocalNetwork 的服务列表
WiFi Address
- iOS14 提供 Wifi 加密服务,每次接入不同的 WiFi 使用的 mac 地址都不同。每过 24 小时,mac 地址还会更新一次。需要关注是否有使用用户网络 mac 地址的服务
iOS13及之前
iOS14之后
- 用户也可以自行选择是否开启 private Wi-Fi address
剪切板
- 在 iOS14 中,读取用户剪切板的数据会弹出提示。
- 弹出提示的原因是使用 UIPasteboard 访问用户数据,访问以下数据都会弹出 toast 提示
- NSString *
string
- NSArray
strings
URL
- NSArray
URLs
image
NSArray<UIImage *>images
color
NSArray<UIColor *>colors
- NSString *
- 直接获取剪切板的数据,无法避免提示语。如果仅是判断是否是URL,则可以使用iOS14提供的新API,
UIPasteboardDetectionPattern
相机和麦克风
- iOS14 中 App 使用相机和麦克风时会有图标提示以及绿点和黄点提示,并且会显示当前是哪个 App 在使用此功能。我们无法控制是否显示该提示。
IDFA
在 iOS13 及以前,系统会默认为用户开启允许追踪设置,我们可以简单的通过代码来获取到用户的 IDFA 标识符。
if ([[ASIdentifierManager sharedManager] isAdvertisingTrackingEnabled]) {
NSString *idfaString = [[ASIdentifierManager sharedManager] advertisingIdentifier].UUIDString;
NSLog(@"%@", idfaString);
}
但是在 iOS14 中,这个判断用户是否允许被追踪的方法已经废弃。
- iOS14 中,系统会默认为用户关闭广告追踪权限。
- 获取权限需要在info.plist中配置
NSUserTrackingUsageDescription
及描述文案。- 使用 AppTrackingTransparency 框架中的 ATTrackingManager 中的
requestTrackingAuthorizationWithCompletionHandler
请求用户权限,在用户授权后再去访问 IDFA 才能够获取到正确信息。
- 使用 AppTrackingTransparency 框架中的 ATTrackingManager 中的
AppStore
更加严格的隐私审核,可以让用户在下载 App 之前就知道此 App 将会需要哪些权限。目前苹果商店要求所有应用在上架时都必须提供一份隐私政策。如果引入了第三方收集用户信息等SDK,都需要向苹果说明是这些信息的用途。