定位权限请求
- 从iOS 6开始,苹果在保护用户隐私方面做了很大的加强,以下操作都必须经过用户批准授权
- 要想获得用户的位置
- 想访问用户的通讯录、日历、相机、相册等等
用户权限-弹框选择
-
当想访问用户的隐私信息时,系统会自动弹出一个对话框让用户授权
定位权限请求.png- 一旦用户选择了“Don’t Allow”,意味着你的应用以后就无法使用定位功能
定位权限请求2.png
--
- 为了使用户在弹框申请授权时拒绝授权,使应用部分功能无法使用,应该向用户解释授权的目的
- 开发者可以在Info.plist中设置NSLocationUsageDescription说明定位的目的(Privacy - Location Usage Description)
- 一般是让产品经理提供定位的目的
-
示例图:
定位权限请求3.png
iOS 8.0+ 的定位适配
- 从iOS 8.0开始,苹果进一步加强了对用户隐私的保护。
- 当APP想访问用户的隐私信息时,系统不再自动弹出一个对话框让用户授权
- 解决方案:
调用iOS 8.0的API,主动请求用户授权
// 请求允许在前后台都能获取用户位置的授权
- (void)requestAlwaysAuthorization
// 请求允许在前台获取用户位置的授权
- (void)requestWhenInUseAuthorization
-
务必在info.plist文件中配置对应的键值, 否则以上请求授权的方法不生效
- NSLocationAlwaysUsageDescription :允许在前后台获取GPS的描述
- NSLocationWhenInUseDescription : 允许在前台获取GPS的描述
iOS 9.0 定位
- iOS 9.0 如果当前处于前台授权状态,默认是不可以后台获取用户位置。
- 但可以设置以下属性为YES,就可以继续获取后台位置,但是会出现蓝条
@property(assign, nonatomic) BOOL allowsBackgroundLocationUpdates
- 使用注意:必须设置对应的后台模式:location updates
- iOS 9.0 可以单次请求用户位置
- (void)requestLocation
- (void)locationManager:(nonnull CLLocationManager *)manager didUpdateLocations:(nonnull NSArray<CLLocation *> *)locations // 成功调用
- (void)locationManager:(nonnull CLLocationManager *)manager didFailWithError:(nonnull NSError *)error // 失败调用