2017-10-13 118 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) 
}