定位权限请求

定位权限请求

  • 从iOS 6开始,苹果在保护用户隐私方面做了很大的加强,以下操作都必须经过用户批准授权
    • 要想获得用户的位置
    • 想访问用户的通讯录、日历、相机、相册等等

用户权限-弹框选择

  • 当想访问用户的隐私信息时,系统会自动弹出一个对话框让用户授权


    定位权限请求_第1张图片
    定位权限请求.png
    • 一旦用户选择了“Don’t Allow”,意味着你的应用以后就无法使用定位功能
定位权限请求2.png

--

  • 为了使用户在弹框申请授权时拒绝授权,使应用部分功能无法使用,应该向用户解释授权的目的
  • 开发者可以在Info.plist中设置NSLocationUsageDescription说明定位的目的(Privacy - Location Usage Description)
    • 一般是让产品经理提供定位的目的
    • 示例图:


      定位权限请求_第2张图片
      定位权限请求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 *)locations  // 成功调用
- (void)locationManager:(nonnull CLLocationManager *)manager didFailWithError:(nonnull NSError *)error // 失败调用

你可能感兴趣的:(定位权限请求)