ในการขออนุญาตสำหรับบริการระบุตำแหน่งที่คุณใช้:
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()
แก้ไข!