위치서비스를 사용할 때 사용자에게 요청한 권한에 대한 상태값 정보가 필요할때가 있습니다.
이 상태정보는 코어로케이션의 CLLocationManager.authorizationStatus() 함수를 통해 알아낼 수 있습니다.
enum CLAuthorizationStatus
rawValue | value | description |
0 | notDetermined | 사용자가 아직 아무런 결정도 하지 않은 상태 |
1 | restricted | 위치정보를 사용할 수 있는 권한이 없는 상태 |
2 | denied | 사용자가 권한을 명시적으로 거부했거나 설정에서 위치 서비스가 비활성화되어 있는 상태, 위치접근허용: 안 함 |
3 | authorizedAlways | 사용자가 언제든지 자신의 위치를 사용할 수 있는 권한이 있는 상태, 위치접근허용: 항상 |
4 | authorizedWhenInUse | 사용자가 앱을 사용하는 동안에만 위치를 사용할 수 있는 권한이 있는 상태, 위치접근허용: 앱을 사용하는 동안 |
다음과 같이 상태를 확인하여 설정페이지로 이동시킬수 있습니다.
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
let status = CLLocationManager.authorizationStatus()
Logger.debug("status is \(status), value is \(status.rawValue)")
if status != CLAuthorizationStatus.authorizedAlways {
Logger.debug("not authorizedAlways")
//Alert 생성 후 액션 연결
let alertController = UIAlertController(title: "위치권한 설정이 '항상'으로 되어 있지 않습니다.", message: "앱 설정 화면으로 이동하시겠습니까?", preferredStyle: .alert)
alertController.addAction(UIAlertAction(title: "네", style: .default, handler: { (action) -> Void in
Logger.debug("네 touched..")
if let appSettings = URL(string: UIApplication.openSettingsURLString){
UIApplication.shared.open(appSettings, options: [:], completionHandler: nil)
}
}))
alertController.addAction(UIAlertAction(title: "아니오", style: .destructive, handler: { (action) -> Void in
Logger.debug("아니오 touched..")
}))
self.present(alertController, animated: true, completion: nil)
}
}
'ios' 카테고리의 다른 글
Alamofire 간단하게 사용하기 (0) | 2020.04.24 |
---|---|
Xcode 에서 GitLab 연동하기 (0) | 2020.04.22 |
Location updates in Background Modes (0) | 2020.04.19 |
Migration in Realm (0) | 2020.04.18 |
Use Realm in Swift (0) | 2020.04.17 |