ios14 适配

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

2. 定位获取变更

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

申请的单次精准定位本次APP生命周期内有效,APP一个生命周期内可以多次申请。任何一次允许后则可正常获取精准定位。

申请方式:需要在info.plist中配置:



也可以不获取精准定位直接请求模糊定位: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并存储下来。

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

你可能感兴趣的:(ios14 适配)