Para pedir permissão para os serviços de localização que você usa:
yourSharedLocationManager.requestWhenInUseAuthorization()
Se o status for indeterminado no momento, um alerta será exibido, solicitando que o usuário permita o acesso. Se o acesso for negado, seu aplicativo será notificado no CLLocationManagerDelegate, da mesma forma se a permissão for negada a qualquer momento, você será atualizado aqui.
Existem dois status separados que você precisa verificar para determinar as permissões atuais.
- Se o usuário tem os serviços gerais de localização habilitados ou não
CLLocationManager.locationServicesEnabled()
- Se o usuário concedeu a permissão correta para seu aplicativo ..
CLLocationManager.authorizationStatus() == .authorizedWhenInUse
Você pode adicionar uma extensão é uma opção útil:
extension CLLocationManager {
static func authorizedToRequestLocation() -> Bool {
return CLLocationManager.locationServicesEnabled() &&
(CLLocationManager.authorizationStatus() == .authorizedAlways || CLLocationManager.authorizationStatus() == .authorizedWhenInUse)
}
}
Aqui, ele está sendo acessado quando o usuário solicitou as direções pela primeira vez:
private func requestUserLocation() {
locationManager.requestWhenInUseAuthorization()
if CLLocationManager.authorizedToRequestLocation() {
locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation
locationManager.requestLocation()
} else {
showAlertNoLocation(locationError: .invalidPermissions)
}
}
Aqui está o delegado:
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
if !CLLocationManager.authorizedToRequestLocation() {
showAlertNoLocation(locationError: .invalidPermissions)
}
}
manager.locationServicesEnabled()
vez deCLLocationManager.loationServicesEnabled()
Resolvido!