iOS14适配方案

https://blog.csdn.net/a18339063397/article/details/108799233

 

1. 隐私适配

iOS14最重要的更新之一:用户隐私和安全。

(1) 广告标识符IDFA

广告标识符IDFA全称Identity for Advertisers,用来标记用户以便于投放广告、个性化推荐等。

更新前后区别如下:

IDFA权限提示:iOS13左、iOS14右

1> iOS13系统IDFA

iOS13及以前,系统会默认为用户 开启 广告追踪权限。

通过以下代码即可获得IDFA标识符:

  1.  
    // TODO: ----------------- ViewController类 -----------------
  2.  
    #import <AdSupport/AdSupport.h>
  3.  
     
  4.  
    - (void)obtainIDFA {
  5.  
    // 使用原方式访问 IDFA
  6.  
    if ([[ASIdentifierManager sharedManager] isAdvertisingTrackingEnabled]) {
  7.  
    NSString *idfaStr = [[ASIdentifierManager sharedManager] advertisingIdentifier].UUIDString;
  8.  
    NSLog(@"idfaStr - %@", idfaStr);
  9.  
    }
  10.  
    }

2> iOS14系统IDFA

iOS14中,系统会默认为用户 关闭 广告追踪权限。

且以上判断用户是否允许被追踪的方法被废弃:

ASIdentifierManager

3> iOS14系统IDFA配置

  • 首先在 info.plist 中配置权限:
    keyNSUserTrackingUsageDescription
    value获取设备信息用以精准推送您喜欢的内容

  • 然后通过以下代码获得IDFA标识符:

 

  1.  
    // TODO: ----------------- ViewController类 -----------------
  2.  
    #import <AdSupport/AdSupport.h>
  3.  
    #import <AppTrackingTransparency/AppTrackingTransparency.h>
  4.  
     
  5.  
    - (void)obtainIDFA {
  6.  
    // iOS14方式访问 IDFA
  7.  
    if (@available(iOS 14, *)) {
  8.  
    [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
  9.  
    if (status == ATTrackingManagerAuthorizationStatusAuthorized) {
  10.  
    NSString *idfaStr = [[ASIdentifierManager sharedManager] advertisingIdentifier].UUIDString;
  11.  
    NSLog(@"idfaStr - %@", idfaStr);
  12.  
    }
  13.  
    }];
  14.  
    } else {
  15.  
    // 使用原方式访问 IDFA
  16.  
    if ([[ASIdentifierManager sharedManager] isAdvertisingTrackingEnabled]) {
  17.  
    NSString *idfaStr = [[ASIdentifierManager sharedManager] advertisingIdentifier].UUIDString;
  18.  
    NSLog(@"idfaStr - %@", idfaStr);
  19.  
    }
  20.  
    }
  21.  
    }
  • 最后启动应用弹出申请,经过用户同意授权之后,才能最终获取正确的IDFA信息。

(2) 相册

更新前后区别如下:

相册权限提示:iOS13左、iOS14右

1> iOS13系统相册

iOS13及以前,App请求用户相册授权:用户同意App获取相册信息,当前App就可以获取到用户的整个照片库信息。

2> iOS14系统相册

iOS14新增了Limited Photo Library Access 模式,在授权弹窗中增加了 选择照片 选项。用户可以选择开放照片库或者特定的相册给App,保证用户隐私。


(3) 定位

更新前后区别如下:

定位权限提示:iOS13左、iOS14右

1> iOS13系统定位

iOS13及以前,App请求用户定位授权:用户同意App获取定位信息,当前App就可以获取到用户的精确定位。

2> iOS14系统定位

iOS14新增了精确定位模糊定位的概念,默认精确定位,用户可以手动关闭精确定位以开启模糊定位,可以选择允许一次使用App时允许

CLAccuracyAuthorization

请求精确定位方法

3> iOS14系统定位配置

倘若App需要精确定位:

  • 首先在 info.plist 中配置权限:
    NSLocationTemporaryUsageDescriptionDictionary
    keypreciseKey
    value申请定位用于给您做精准推荐

  • 然后通过以下代码单独请求一次精确定位:

 

  1.  
    // TODO: ----------------- ViewController类 -----------------
  2.  
    #import <CoreLocation/CoreLocation.h>
  3.  
     
  4.  
    - (void)obtainLocation {
  5.  
    // iOS14方式请求 精确定位
  6.  
    if (@available(iOS 14.0, *)) {
  7.  
    CLLocationManager *locationManager = [[CLLocationManager alloc] init];
  8.  
    [locationManager requestTemporaryFullAccuracyAuthorizationWithPurposeKey:@"preciseKey" completion:^(NSError * _Nullable error) {
  9.  
     
  10.  
    }];
  11.  
    } else {
  12.  
    // Fallback on earlier versions
  13.  
    }
  14.  
    }
  • 最后启动应用弹出申请,经过用户同意授权之后,才能最终获取正确的精确定位。

(4) 麦克风和相机

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

iOS14麦克风和相机亮点提示


(5) 剪切板

iOS14中App在读取剪切板内容时,会有toast提示,从顶部弹出。例如:手机淘宝 - 粘贴自:微信

iOS14剪切板提示


2. 控件适配

(1) UITableViewCell

contentView

iOS14推荐使用[cell.contentView addSubview:];方式添加控件。

因为UITableViewCell中使用 [cell addSubview:]方式添加的控件,会显示在contentView的下层,控件会被contentView遮挡并无法响应交互事件。


(2) UIDatePicker

更新前后区别如下:

UIDatePicker样式:iOS13左、iOS14中和右

1> iOS13系统UIDatePicker样式

iOS13及以前,UIDatePicker样式只有轮播样式。

2> iOS14系统UIDatePicker样式

iOS14中UIDatePicker样式有四种,可根据需求设置,默认是UIDatePickerStyleAutomatic,会自动选择当前平台和模式可用的最佳样式。

UIDatePickerStyle

需要使用轮播样式,设置为UIDatePickerStyleWheels即可:

 

self.datePicker.preferredDatePickerStyle = UIDatePickerStyleWheels;
posted @ 2020-10-05 18:23  itlover2013  阅读(1085)  评论(0编辑  收藏  举报