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

Check if already asked about location services authorization

  1. 我要求用户 WhenInUse 授权使用 locationManager.requestWhenInUseAuthorization 的定位服务。
  2. 然后,稍后在我的应用程序中,我要求使用 locationManager.requestAlwaysAuthorization 升级到 Always 授权。然而,在 iOS 中,有 11 个用户可以选择继续使用 WhenInUse - 让我们假设。
  3. 假设用户再次打开应用程序,在这种情况下我想显示一个对话框说 "Change Location Services settings if you want the app to work in background"。
  4. 然后,我使用 CLLocationManager.authorizationStatus() 检查授权状态,我得到 .authorizationWhenInUse。现在我不知道我之前是否已经请求过Always权限。
  5. locationManager.requestAlwaysAuthorization 不会有任何影响 如果我已经询问过用户,我怎么知道那是 案例?

我也遇到过这种情况,我想知道请求 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)
}