IOS 14适配

作者: 上帝是个女孩丶 | 来源:发表于2020-09-03 19:21 被阅读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并存储下来。

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

    相关文章

      网友评论

        本文标题:IOS 14适配

        本文链接:https://www.haomeiwen.com/subject/rcwwsktx.html