Untuk meminta izin layanan lokasi yang Anda gunakan:
yourSharedLocationManager.requestWhenInUseAuthorization()
Jika status saat ini belum ditentukan, peringatan akan muncul meminta pengguna untuk mengizinkan akses. Jika akses ditolak, aplikasi Anda akan diberi tahu di CLLocationManagerDelegate, demikian pula jika izin ditolak, Anda akan diperbarui di sini.
Ada dua status terpisah yang perlu Anda periksa untuk menentukan izin saat ini.
- Jika pengguna mengaktifkan layanan lokasi umum atau tidak
CLLocationManager.locationServicesEnabled()
- Jika pengguna telah memberikan izin yang benar untuk aplikasi Anda ..
CLLocationManager.authorizationStatus() == .authorizedWhenInUse
Anda dapat menambahkan ekstensi adalah opsi praktis:
extension CLLocationManager {
static func authorizedToRequestLocation() -> Bool {
return CLLocationManager.locationServicesEnabled() &&
(CLLocationManager.authorizationStatus() == .authorizedAlways || CLLocationManager.authorizationStatus() == .authorizedWhenInUse)
}
}
Ini sedang diakses ketika pengguna pertama kali meminta petunjuk arah:
private func requestUserLocation() {
locationManager.requestWhenInUseAuthorization()
if CLLocationManager.authorizedToRequestLocation() {
locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation
locationManager.requestLocation()
} else {
showAlertNoLocation(locationError: .invalidPermissions)
}
}
Berikut delegasinya:
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
if !CLLocationManager.authorizedToRequestLocation() {
showAlertNoLocation(locationError: .invalidPermissions)
}
}
manager.locationServicesEnabled()
daripadaCLLocationManager.loationServicesEnabled()
Dipecahkan!