检查是否已询问位置服务授权
Check if already asked about location services authorization
- 我要求用户 WhenInUse 授权使用
locationManager.requestWhenInUseAuthorization
的定位服务。
- 然后,稍后在我的应用程序中,我要求使用
locationManager.requestAlwaysAuthorization
升级到 Always 授权。然而,在 iOS 中,有 11 个用户可以选择继续使用 WhenInUse - 让我们假设。
- 假设用户再次打开应用程序,在这种情况下我想显示一个对话框说 "Change Location Services settings if you want the app to work in background"。
- 然后,我使用
CLLocationManager.authorizationStatus()
检查授权状态,我得到 .authorizationWhenInUse
。现在我不知道我之前是否已经请求过Always权限。
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)
}
- 我要求用户 WhenInUse 授权使用
locationManager.requestWhenInUseAuthorization
的定位服务。 - 然后,稍后在我的应用程序中,我要求使用
locationManager.requestAlwaysAuthorization
升级到 Always 授权。然而,在 iOS 中,有 11 个用户可以选择继续使用 WhenInUse - 让我们假设。 - 假设用户再次打开应用程序,在这种情况下我想显示一个对话框说 "Change Location Services settings if you want the app to work in background"。
- 然后,我使用
CLLocationManager.authorizationStatus()
检查授权状态,我得到.authorizationWhenInUse
。现在我不知道我之前是否已经请求过Always权限。 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)
}