https://blog.csdn.net/a18339063397/article/details/108799233
1. 隐私适配
iOS14最重要的更新之一:用户隐私和安全。
(1) 广告标识符IDFA
广告标识符IDFA全称Identity for Advertisers,用来标记用户以便于投放广告、个性化推荐等。
更新前后区别如下:
IDFA权限提示:iOS13左、iOS14右
1> iOS13系统IDFA
iOS13及以前,系统会默认为用户 开启 广告追踪权限。
通过以下代码即可获得IDFA标识符:
-
// TODO: ----------------- ViewController类 -----------------
-
-
-
- (void)obtainIDFA {
-
// 使用原方式访问 IDFA
-
if ([[ASIdentifierManager sharedManager] isAdvertisingTrackingEnabled]) {
-
NSString *idfaStr = [[ASIdentifierManager sharedManager] advertisingIdentifier].UUIDString;
-
NSLog(@"idfaStr - %@", idfaStr);
-
}
-
}
2> iOS14系统IDFA
iOS14中,系统会默认为用户 关闭 广告追踪权限。
且以上判断用户是否允许被追踪的方法被废弃:
ASIdentifierManager
3> iOS14系统IDFA配置
-
首先在 info.plist 中配置权限:
key
:NSUserTrackingUsageDescription
value
:获取设备信息用以精准推送您喜欢的内容
-
然后通过以下代码获得IDFA标识符:
-
// TODO: ----------------- ViewController类 -----------------
-
-
-
-
- (void)obtainIDFA {
-
// iOS14方式访问 IDFA
-
if (@available(iOS 14, *)) {
-
[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
-
if (status == ATTrackingManagerAuthorizationStatusAuthorized) {
-
NSString *idfaStr = [[ASIdentifierManager sharedManager] advertisingIdentifier].UUIDString;
-
NSLog(@"idfaStr - %@", idfaStr);
-
}
-
}];
-
} else {
-
// 使用原方式访问 IDFA
-
if ([[ASIdentifierManager sharedManager] isAdvertisingTrackingEnabled]) {
-
NSString *idfaStr = [[ASIdentifierManager sharedManager] advertisingIdentifier].UUIDString;
-
NSLog(@"idfaStr - %@", idfaStr);
-
}
-
}
-
}
- 最后启动应用弹出申请,经过用户同意授权之后,才能最终获取正确的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
:key
:preciseKey
value
:申请定位用于给您做精准推荐
-
然后通过以下代码单独请求一次精确定位:
-
// TODO: ----------------- ViewController类 -----------------
-
-
-
- (void)obtainLocation {
-
// iOS14方式请求 精确定位
-
if (@available(iOS 14.0, *)) {
-
CLLocationManager *locationManager = [[CLLocationManager alloc] init];
-
[locationManager requestTemporaryFullAccuracyAuthorizationWithPurposeKey:@"preciseKey" completion:^(NSError * _Nullable error) {
-
-
}];
-
} else {
-
// Fallback on earlier versions
-
}
-
}
- 最后启动应用弹出申请,经过用户同意授权之后,才能最终获取正确的精确定位。
(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;