이전 글[https://greate-future.tistory.com/89] 에 이어서 ...
iOS14부터 정확한 위치정보를 수집할 수 있다.
위치정보 수집승인을 요청하면 아래와 같은 팝업이 발생하는데,
지도가 보이는 View에 “정확한 위치: 켬”이 보인다.
이 부분을 터치하면 끔으로 바뀌게 되는데 지도도 축소되고 내 위치의 범위가 수킬로미터로 늘어나게 된다. 한 눈에 봐도 정확한 위치를 안쓴다고 따악 알려주는구나.
정확한 위치정보를 수집하지 않으면 사용자의 위치를 제대로 가져오기가 힘들다.
만약 앱이 네비게이션같은 기능을 사용해야 하다면 반드시 정확한 위치에 접근 하도록 코드를 수정해야한다.
정확한 위치 정보를 사용하는 앱의 동작을 한번 예시로 보겠다.
네이버 지도앱에서 정확한 위치 권한을 끄고 켰을때의 내 위치가 변화되는것을 볼 수있다.
지금 상태는 정확한 위치 정보를 수집하고 있는 상태이다.
내 위치가 정확히 표시된다. 오차가 있을순 이겠지만 눈대중으로 봐도 내 위치가 맞다.
이제 설정-> 개인 정보 보호 -> 위치 서비스 -> 네이버 지도 이동하자.
정확한 위치 스위치가 우측으로 켬 상태로 보일텐데, 이걸 끄고 네이버 지도 앱으로 복귀하면…
내 위치가 바뀐것을 확인 할 수 있다.
(카카오 맵도 같은 동작을 하고 있더라)
CLAccuracyAuthorization
https://developer.apple.com/documentation/corelocation/claccuracyauthorization
위치 정확도의 수준을 나타내는 값이다.
코드로 확인하려면
var locationManager = CLLocationManager()
switch locationManager.accuracyAuthorization {
case .fullAccuracy:
case .reducedAccuracy:
}
- fullAccuracy: 사용자는 앱이 완전한 정확도로 위치 데이터에 액세스할 수 있도록 승인한 상태
- reducedAccuracy: 사용자는 정확도가 낮은 위치 데이터에 액세스할 수 있도록 앱을 승인한 상태
reducedAccuracy는 시간 간격을 길게 두고 현재위치를 조회하기 때문에, 네비게이션 앱이라면 reduced대신 fullAccuracy상태여야 한다.
정확한 위치 허용하기 팝업
만약 사용자가 위치정보 수집 허용을 할 때 "정확한 위치:끔" 으로 설정하고 허용했다고 치자!
기능을 사용함에 있어 정확한 위치정보가 필수인 경우가 있을 수 있다. 이 때 아래코드를 통해 정확한 위치를 사용하도록 허용하는 팝업을 발생시킬 수 있다.
locationManager.requestTemporaryFullAccuracyAuthorization(withPurposeKey: "Navigate") { error in
if self.locationManager.accuracyAuthorization == .fullAccuracy {
print("fullAccuracy")
}
}
여기에서 PurposeKey는 Info.plist로 이동하여
Privacy - Location Temporary Usage Description Dictionary를 추가하고
KeyName을 정해준걸 넣어주자.
그런데 말이죠...
requestTemporaryFullAcc...(withPurposeKey: "some keyName"...
이게 ... 동작을 안한다. 다 되는데 팝업이 발생하지 않는다. 호옥시 지나가는 누군가가 해결법을 알고 있다면 알려주시길. 또는 실행되는 코드를 갖고 계신다면 공유좀 부탁드립니다...
그리고 Location Temporary Usage Description 추가시 Xcode가 예기치 않은 오류를 발생한다며 실행이 종료되는 현상이 있다.
https://developer.apple.com/forums/thread/691232 . 이것은 XCode 버그인거같은데... 해결법을 모르겠다.
'난 iOS개발자 > iOS' 카테고리의 다른 글
Swift의 Property (0) | 2022.03.03 |
---|---|
Timer로 작업 예약하기 (0) | 2022.02.17 |
위치 정보 가져오기(CoreLocation, CLLocationManager) (0) | 2022.02.14 |
JsonString 에서 Dictionary로 변환 (0) | 2022.01.27 |
현재 네트워크 정보 가져오기 CNCopyCurrentNetworkInfo (0) | 2022.01.07 |