iOS基础应用iOS版本

IOS 14适配

2020-09-03  本文已影响0人  上帝是个女孩丶

1. IDFA隐私加强

IDFA默认关闭,需要向用户申请获取权限,需要在info.plist中明示用户申请权限:
key : NSUserTrackingUsageDescription
value: “获取设备信息用以精准推送您喜欢的内容”(用于显示给用户的话术)
申请代码:

// 调用request会弹窗提示用户是否授权,点拒绝则无法读取
[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
        if (status == ATTrackingManagerAuthorizationStatusAuthorized) {
            // 已授权
            NSString *idfa = [[ASIdentifierManager sharedManager].advertisingIdentifier UUIDString];
        } else {
            // 此时用户点击拒绝则无法读取
            NSString *idfa = [[ASIdentifierManager sharedManager].advertisingIdentifier UUIDString];
        }
    }];

注意:
需要用户在手机中打开追踪开关,该开关默认关闭(正式版延期至2021年,目前依然可读取)。
如果用户不打开该开关则无法获取idfa,也无法申请权限。细则见文章结尾。
另外需要引入系统库FrameWork: AppTrackingTransparency

\color{orange}{手机开关路径:“设置-隐私-Tracking”,ios 14默认关闭(延期)}

2. 定位获取变更

IOS 14可以授权模糊定位(Precise Location),默认给出精准定位。APP可以申请单次的精准定位。

申请的单次精准定位本次APP生命周期内有效,APP一个生命周期内可以多次申请。任何一次允许后则可正常获取精准定位。
申请方式:需要在info.plist中配置:

NSLocationTemporaryUsageDescriptionDictionary 
key:precise。用于request的PurposeKey值,自定义即可
value:申请定位用于给您做精准推荐。(用于显示给用户的话术)

[self.locationManager requestTemporaryFullAccuracyAuthorizationWithPurposeKey:@"precise" completion:^(NSError *error) {
            // 根据状态判断是否获取到了定位权限
            if (self.locationManager.accuracyAuthorization == CLAccuracyAuthorizationReducedAccuracy) {
                
            }
}];

也可以不获取精准定位直接请求模糊定位:NSLocationDefaultAccuracyReduced 值为true

注意:申请单次精准定位的前提是用户选择了给模糊定位。如果用户拒绝给定位或者已经给出精准定位,则无法申请单次精准定位。

3. 新特性Clips

类似于小程序,通过浏览器、短信消息、Maps、NFC、二维码等形式启动。待更新

4. UITableViewCell

IOS 14要求使用[cell.contentView addSubview],不推荐使用[cell addSubview]了,有人说会遮挡视图,目前没复现,点击也还正常,但是保不齐以后不让用,还是建议用contentView add吧。

5. KVC 不允许访问 UIPageControl的pageImage

新增了API:preferredIndicatorImage设置image

6. 相册新增选择部分照片权限类型

PHAuthorizationStatusLimited,会在弹窗相册权限时增加一个“选择照片”选项,点击可以勾选部分照片供该APP使用。
如果用户选择了部分照片,那么重启APP后再用到相册权限依然会弹窗提醒选择更多照片。
可以在Info.plist中设置“PHPhotoLibraryPreventAutomaticLimitedAccessAlert”为YES,来阻止弹窗反复弹出。
也可以在代码中配置在合适的位置弹窗:

[[PHPhotoLibrary sharedPhotoLibrary] presentLimitedLibraryPickerFromViewController:self];

7. 相机和麦克风

iOS14 中 App 在使用相机和麦克风时右上角会有绿点(相机)和黄点(麦克风)提示,无法隐藏。

8. 读取剪切板会弹提示

读取剪切板内容时,会有toast提示,从顶部弹出,例如:手机淘宝 - 粘贴自:QQ

备注

IDFA获取逻辑:

首先分总开关和小开关,总开关为设置里面的隐私开关,关闭后无论APP怎么处理都无法获取idfa,只有在APP设置中开关开启的状态下才能进行其它操作。下面介绍一下总开关开启的情况下:
IOS 14以下:
即便IDFA的状态为ATTrackingManagerAuthorizationStatusAuthorized,依然可以强制读取IDFA。
IOS 14以后:
如果APP不进行request idfa操作,那么默认开关是开启的,此时我们获取idfa状态,是未授权(ATTrackingManagerAuthorizationStatusAuthorized),但是可以不进行if判断强制读取。
如果APP进行了request idfa操作,那么会弹窗提醒用户,此时用户如果点了拒绝,那么idfa无法读取,强制读取亦失效。但是在APP弹窗之前是可以读取idfa的,所以如果APP是在使用期间进行request,那么request之前其实是可以拿到idfa并存储下来。

综合来说,目前的情形是不建议做弹窗授权,弹窗了反而会有无法读取的可能。

上一篇下一篇

猜你喜欢

热点阅读