https://www.jianshu.com/p/4541cd070423
### 一、前言
大数据时代,用户对自己的隐私安全越来越关注,所以,随着iOS系统更新,苹果对用户隐私相关(定位、相册、网络、粘贴板等)权限控制持续升级。其中定位权限相关申请API与配置项较多,本文旨在记录说明 iOS8.0 - 14.0beta 从权限申请到获取定位数据流程。
内容包括定位权限、获取定位数据、定位权限API调用实践。定位权限模块按照系统相关性分别介绍该系统下权限配置与API调用细节、注意事项与表格总结;获取定位数据模块介绍定位关键参数、单次/连续定位等;调用实践模块介绍了从 iOS8.0 - 14.0beta 系统定位权限的适配实践。
### 二、定位权限
#### 1、iOS8.*
-前台定位
-需要在info.plist配置NSLocationWhenInUseUsageDescription字段;
-首次使用定位时,通过API接口requestWhenInUseAuthorization申请应用使用时权限;
注意:此权限下,如果Xcode勾选 Capabilities -> UIBackgroundModes > Location updates,则app退到后台仍可获取定位数据,但此时在手机上方会有定位小蓝条提示;
-后台定位
-需要在info.plist配置NSLocationAlwaysUsageDescription字段;
-需要Xcode勾选 Capabilities -> UIBackgroundModes > Location updates;
-首次使用定位时,通过API接口requestAlwaysAuthorization申请应用未使用时权限;
#### 2、iOS9.*与iOS10.*
-**前台定位**
-需要在info.plist配置NSLocationWhenInUseUsageDescription字段;
-首次使用定位时,通过API接口requestWhenInUseAuthorization申请应用使用时权限,如下图;
注意:此权限下,如果Xcode勾选 Capabilities -> UIBackgroundModes > Location updates并且allowsBackgroundLocationUpdates设为YES,则app退到后台仍可获取定位数据,但此时在手机上方会有定位小蓝条提示;
-**后台定位**
-需要在info.plist配置NSLocationAlwaysUsageDescription字段;
-需要Xcode勾选 Capabilities -> UIBackgroundModes > Location updates;
-需要CLLocationManager设置allowsBackgroundLocationUpdates为YES;
-首次使用定位时,通过API接口requestAlwaysAuthorization申请应用未使用时权限,如下图;
-**与iOS8.*版本相比不同点**
-iOS9.*后台增加了allowsBackgroundLocationUpdates属性,可以认为在iOS8.*下allowsBackgroundLocationUpdates永远为YES;
#### 3、iOS11.*与iOS12.*
-**前台定位**
-需要在info.plist配置NSLocationWhenInUseUsageDescription字段;
-首次使用定位时,通过API接口requestWhenInUseAuthorization申请应用使用时权限,如下图;
注意:此权限下,如果Xcode勾选 Capabilities -> UIBackgroundModes > Location updates并且allowsBackgroundLocationUpdates设为YES,则app退到后台仍可获取定位数据,但此时在手机上方会有定位小蓝条提示,此小蓝条不可隐藏;
-**后台定位**
-需要在info.plist配置NSLocationWhenInUseUsageDescription、NSLocationAlwaysAndWhenInUseUsageDescription字段;
-需要Xcode勾选 Capabilities -> UIBackgroundModes > Location updates;
-需要CLLocationManager设置allowsBackgroundLocationUpdates为YES;
-首次使用定位时,通过API接口requestAlwaysAuthorization申请应用未使用时权限,如下图;
注意:此权限下,当app在后台时,系统默认不展示定位小蓝条,可通过showsBackgroundLocationIndicator控制小蓝条是否显示;
-**与iOS10.*版本相比不同点**
-iOS11.*变更了后台定位权限配置字段;
-iOS11.*以后如果申请后台定位,info.plist需要同时配置
作者:谢见章
链接:https://www.jianshu.com/p/4541cd070423
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。