본문 바로가기

ios

위치서비스를 위한 권한 상태값 가져오기

위치서비스를 사용할 때 사용자에게 요청한 권한에 대한 상태값 정보가 필요할때가 있습니다. 
이 상태정보는 코어로케이션의 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