检查是否已经询问过位置服务授权

时间:2017-10-13 12:36:20

标签: swift core-location ios11

  1. 我要求用户使用locationManager.requestWhenInUseAuthorization进行位置服务的 WhenInUse 授权。
  2. 然后,稍后在我的应用中,我要求使用locationManager.requestAlwaysAuthorization升级到始终授权。但是,在iOS 11中,用户可以选择使用 WhenInUse - 让我们假设。
  3. 让我们说用户再次打开应用程序,我想显示一个对话框,如果您希望应用程序在后台运行,请更改位置服务设置"在那种情况下。
  4. 然后,我检查CLLocationManager.authorizationStatus()的授权状态是什么,我得到.authorizationWhenInUse。现在我不知道我之前是否已经要求获得Always权限。
  5. locationManager.requestAlwaysAuthorization没有任何效果 如果我已经向用户询问过这个问题,我怎么知道这个问题 情况?

1 个答案:

答案 0 :(得分:0)

我也有这种情况,我想知道请求Always授权是否有任何影响,但我找不到任何解决方案(这不包括我的应用程序的UX重新设计),所以最终我使用了用户默认值,如:

// Define a defaults key
fileprivate struct DefaultsKeys {
    static let hasAlreadyRequestedAlwaysAuthorization = 
        "hasAlreadyRequestedAlwaysAuthorization"
}

// Then in later your code
UserDefaults.standard.register(defaults:[DefaultsKeys.hasAlreadyRequestedAlwaysAuthorization: false])
let hasAlreadyRequestedAlwaysAuthorization = UserDefaults.standard.bool(forKey: DefaultsKeys.hasAlreadyRequestedAlwaysAuthorization)
if hasAlreadyRequestedAlwaysAuthorization {
    // E.g. show a dialog saying user needs to change it manually in settings etc.
} else {
    locationManager.requestAlwaysAuthorization()
    UserDefaults.standard.set(true, forKey: DefaultsKeys.hasAlreadyRequestedAlwaysAuthorization)
}