Щоб попросити дозволу на послуги локації, якими ви користуєтесь:
yourSharedLocationManager.requestWhenInUseAuthorization()
Якщо статус наразі не визначений, на екрані з'явиться сповіщення із запитом дозволити користувачеві доступ. Якщо в доступі відмовлено, ваш додаток отримає сповіщення в CLLocationManagerDelegate, так само, якщо в будь-який момент вам буде відмовлено в доступі, ви будете оновлені тут.
Є два окремі статуси, які потрібно перевірити, щоб визначити поточні дозволи.
- Якщо у користувача ввімкнено загальні служби визначення місцезнаходження чи ні
CLLocationManager.locationServicesEnabled()
- Якщо користувач надав правильний дозвіл для вашого додатка ..
CLLocationManager.authorizationStatus() == .authorizedWhenInUse
Ви можете додати розширення - це зручний варіант:
extension CLLocationManager {
static func authorizedToRequestLocation() -> Bool {
return CLLocationManager.locationServicesEnabled() &&
(CLLocationManager.authorizationStatus() == .authorizedAlways || CLLocationManager.authorizationStatus() == .authorizedWhenInUse)
}
}
Тут доступ до нього здійснюється, коли користувач вперше запитав вказівки:
private func requestUserLocation() {
locationManager.requestWhenInUseAuthorization()
if CLLocationManager.authorizedToRequestLocation() {
locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation
locationManager.requestLocation()
} else {
showAlertNoLocation(locationError: .invalidPermissions)
}
}
Ось делегат:
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
if !CLLocationManager.authorizedToRequestLocation() {
showAlertNoLocation(locationError: .invalidPermissions)
}
}
manager.locationServicesEnabled()
замістьCLLocationManager.loationServicesEnabled()
вирішено!