Kullandığınız konum hizmetleri için izin istemek için:
yourSharedLocationManager.requestWhenInUseAuthorization()
Durum şu anda belirlenmemişse, kullanıcıdan erişime izin vermesini isteyen bir uyarı gösterilecektir. Erişim reddedilirse, uygulamanız CLLocationManagerDelegate'de bilgilendirilir, aynı şekilde herhangi bir noktada izin reddedilirse, burada güncellenirsiniz.
Mevcut izinleri belirlemek için kontrol etmeniz gereken iki ayrı durum vardır.
- Kullanıcının genel konum hizmetlerinin etkin olup olmadığı
CLLocationManager.locationServicesEnabled()
- Kullanıcı, uygulamanız için doğru izni verdiyse ..
CLLocationManager.authorizationStatus() == .authorizedWhenInUse
Bir uzantı ekleyebilirsiniz, kullanışlı bir seçenektir:
extension CLLocationManager {
static func authorizedToRequestLocation() -> Bool {
return CLLocationManager.locationServicesEnabled() &&
(CLLocationManager.authorizationStatus() == .authorizedAlways || CLLocationManager.authorizationStatus() == .authorizedWhenInUse)
}
}
Burada, kullanıcı ilk yol tarifi istediğinde erişilir:
private func requestUserLocation() {
locationManager.requestWhenInUseAuthorization()
if CLLocationManager.authorizedToRequestLocation() {
locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation
locationManager.requestLocation()
} else {
showAlertNoLocation(locationError: .invalidPermissions)
}
}
Temsilci şöyle:
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
if !CLLocationManager.authorizedToRequestLocation() {
showAlertNoLocation(locationError: .invalidPermissions)
}
}
manager.locationServicesEnabled()
yerineCLLocationManager.loationServicesEnabled()
!