2017-10-13 117 views
1
  1. 我询问用户何时使用定位服务授权locationManager.requestWhenInUseAuthorization
  2. 然后,后来在我的应用程序,我要求升级到总是授权与locationManager.requestAlwaysAuthorization。但是,在iOS 11用户可以选择留在WhenInUse - 让我们假设。
  3. 假设用户再次打开应用程序,并且我想要显示一个对话框,说明“如果您希望应用程序在后台工作,请更改位置服务设置”。
  4. 然后,我检查授权状态是CLLocationManager.authorizationStatus(),我得到.authorizationWhenInUse。现在我不知道我之前是否已经要求过总是有权限。
  5. locationManager.requestAlwaysAuthorization将不会有任何影响 如果我已经问过有关它的用户,我怎么知道这是 的情况?

回答

0

我也有这种情况,我想知道如果请求总是授权有任何效果,但我找不到任何解决方案(这不包括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) 
}