개발

Swift 위치 권한 팝업 요청 및 단말기 현재 위치 가져오기

소소ing 2021. 4. 1. 17:10
반응형

iOS 앱을 개발하다 위치 정보를 활용해야 할때 방법을 알아보자!

 

1. Info.plist의 권한 텍스트 작성하기!

<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>

<string>위치정보 권한이 필요합니다. (항상 or 앱을 사용하는 동안 위치정보를 수신합니다.)</string>

<key>NSLocationAlwaysUsageDescription</key>

<string>위치정보 권한이 필요합니다. (항상 위치정보를 수신합니다.)</string>

<key>NSLocationWhenInUseUsageDescription</key>

<string>위치정보 권한이 필요합니다. (앱을 사용하는 동안에만 위치정보를 수신합니다.)</string>

 

2. 위치 권한 팝업을 뜨우는 방법과 위치 정보 가져오기 

    - requestWhenInUseAuthorization : 앱을 사용하는 동안에만 위치 정보를 사용하겠다고 요청

    - requestAlwaysAuthorization : 백그라운드 상태에서도 위치 정보를 사용하겠다고 요청 

       = 하지만 iOS 13 이후 앱에서 명시적으로 백그라운드 상태 권한 팝업을 요청할 수 없게 되었다. 

          이 부분은 아래 글에서 확인 하기 

 

iOS 13 이후 위치 권한을 항상 받도록 설정하는 방법은?

앱을 개발하다 보면 단말기 위치 권한을 '항상 허용'이 필요한 경우가 발생된다. iOS 13 이후 어떻게 권한 승인이 가능한지 알아보자! 1. 기존 권한 요청 팝업을 '항상 허용'으로 출력하려면 아래

sosoingkr.tistory.com

import UIKit
import CoreLocation

class ViewController: UIViewController, CLLocationManagerDelegate {
    var locationManager:CLLocationManager!
    
    var lat: Double?
    var long: Double?
  
    
    override func viewDidLoad() {
        super.viewDidLoad()
        locationManager = CLLocationManager()
        locationManager.delegate = self
        
        // 아래 함수 요청 시 위치 권한 팝업 출력
        locationManager.requestWhenInUseAuthorization()  
        //배터리와 위치 정확도 센서 설정
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.startUpdatingLocation()
        
        //위도 경도
        let space = locationManager.location?.coordinate
        lat = space?.latitude
        long = space?.longitude
    }

}

 

Q. 위치 권한 팝업은 수시로 계속 호출 할 수 있나?

위치 권한 팝업의 경우 iPhone의 OS 레벨에서 호출되는 시스템 팝업으로 재 호출이 불가능하다. 

하지만 앱내 팝업을 구성하여 확인 버튼 시 앱의 설정으로 이동 시켜 위치 권한을 수정하도록 구성은 가능하다

 

Q. 사용자가 위치 권한 팝업을 거부 한것을 확인 할 수 있나?

아래 코드를 통해 체크가 가능하다. 

let gpsstatus = CLLocationManager.authorizationStatus()

if gpsstatus == CLAuthorizationStatus.denied || gpsstatus == CLAuthorizationStatus.restricted || gpsstatus == CLAuthorizationStatus.notDetermined {

    print("위도 경도 가져오기 - 권한 거부함")

}

반응형