So bitten Sie um Erlaubnis für von Ihnen verwendete Ortungsdienste:
yourSharedLocationManager.requestWhenInUseAuthorization()
Wenn der Status derzeit unbestimmt ist, wird eine Warnung angezeigt, in der der Benutzer aufgefordert wird, den Zugriff zuzulassen. Wenn der Zugriff verweigert wird, wird Ihre App im CLLocationManagerDelegate benachrichtigt. Wenn die Berechtigung zu irgendeinem Zeitpunkt verweigert wird, werden Sie hier aktualisiert.
Es gibt zwei separate Status, die Sie überprüfen müssen, um die aktuellen Berechtigungen zu ermitteln.
- Wenn der Benutzer die allgemeinen Ortungsdienste aktiviert hat oder nicht
CLLocationManager.locationServicesEnabled()
- Wenn der Benutzer die richtige Berechtigung für Ihre App erteilt hat.
CLLocationManager.authorizationStatus() == .authorizedWhenInUse
Sie können eine Erweiterung hinzufügen, eine praktische Option:
extension CLLocationManager {
static func authorizedToRequestLocation() -> Bool {
return CLLocationManager.locationServicesEnabled() &&
(CLLocationManager.authorizationStatus() == .authorizedAlways || CLLocationManager.authorizationStatus() == .authorizedWhenInUse)
}
}}
Hier wird darauf zugegriffen, wenn der Benutzer zum ersten Mal eine Wegbeschreibung angefordert hat:
private func requestUserLocation() {
//when status is not determined this method runs to request location access
locationManager.requestWhenInUseAuthorization()
if CLLocationManager.authorizedToRequestLocation() {
//have accuracy set to best for navigation - accuracy is not guaranteed it 'does it's best'
locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation
//find out current location, using this one time request location will start the location services and then stop once have the location within the desired accuracy -
locationManager.requestLocation()
} else {
//show alert for no location permission
showAlertNoLocation(locationError: .invalidPermissions)
}
}
Hier ist der Delegierte:
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
if !CLLocationManager.authorizedToRequestLocation() {
showAlertNoLocation(locationError: .invalidPermissions)
}
}
manager.locationServicesEnabled()
nichtCLLocationManager.loationServicesEnabled()
gelöst!