앱을 개발하다 보면 단말기 위치 권한을 '항상 허용'이 필요한 경우가 발생된다.
iOS 13 이후 어떻게 권한 승인이 가능한지 알아보자!
1. 기존 권한 요청 팝업을 '항상 허용'으로 출력하려면 아래 코드를 요청해야 한다.
import CoreLocation
var locationM = CLLocationManager()
locationM.requestAlwaysAuthorization()
- 물론 아래와 같이 Info.plist에 권한 문구도 작성을 해 주어야 한다.
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>위치정보 권한이 필요합니다. (항상 or 앱을 사용하는 동안 위치정보를 수신합니다.)</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>위치정보 권한이 필요합니다. (항상 위치정보를 수신합니다.)</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>위치정보 권한이 필요합니다. (앱을 사용하는 동안에만 위치정보를 수신합니다.)</string>
- 위 코드 실행 시 아래와 같이 권한 팝업이 나타난다. 하지만 기존과 다르게 '항상 허용' 항목이 보이지 않는것을 확인 할 수 있다.
- iOS 13에서는 앱에서 권한 팝업을 요청하여 명시적인 '항상 허용'을 하지 못하도록 수정되었다.
- 위 권한 팝업에서 앱을 사용하는 동안 허용을 선택할 경우 func locationManager( _ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus ) 함수를 통해 확인을 해보면 status 값이 항상 허용으로 들어오는 것을 확인 할 수 있지만 단말기-설정-권한을 요청한 앱으로 들어가 보면 위치 권한이 앱을 사용하는 동안으로 되어 있는 재미있는 현상을 확인할 수 있다.
2. 그렇다면 어떻게 '항상 허용' 권한을 획득 할 수 있을까?
- 아래의 조건에 부합이 될 경우 iPhone의 OS에서 다음과 같은 팝업을 추가로 요청하게 된다.
- 부합 조건
1) 앱이 백그라운드 상태일때,
2) 앱에서 위치 정보를 백그라운드 상태에서 사용하겠다고 정의해 놓은 경우
[코드 설정]
let locationM = CLLocationManager()
locationM.allowsBackgroundLocationUpdates = true
[Xcode Capabilities 설정]
3) 이 후 백그라운드에서 단말기의 위치 정보가 변경될때
'개발' 카테고리의 다른 글
iOS Swift Firebase Auth Twitter 로그인 팁 (0) | 2021.04.07 |
---|---|
iOS Swift UITextField 입력시 특수문자 제외방법 (0) | 2021.04.07 |
Swift 위치 권한 팝업 요청 및 단말기 현재 위치 가져오기 (0) | 2021.04.01 |
Android Java로 Kakao Login V2 이용해 보기 (0) | 2021.03.18 |
iOS 14.5 부터 변경될 IDFA 수집에 관한 정책 정리 (0) | 2021.03.16 |