"Determine the authorization your app needs to access location data."
위치 데이터에 접근하기 위해 앱이 필요한 권한을 결정합니다.
앱이 갖는 권한 상태는 위치 이벤트를 받을지 여부와 언제 받을지에 대한 시점을 결정합니다. 앱이 요청할 수 있는 권한 타입은 두 가지가 있습니다.
앱이 사용중일 때
앱이 사용중인 동안에만 모든 위치 서비스를 사용할 수 있고 이벤트를 받을 수 있습니다. 일반적으로 iOS 앱은 포어그라운드에 있거나 백그라운드 위치 사용 인디케이터가 활성화된 상태의 백그라운드 실행중일 때 사용중인 것으로 간주됩니다.
항상
앱은 사용자가 앱이 실행중이지 않다고 인식할 때에도 모든 위치 서비스를 사용할 수 있고 이벤트를 받을 수 있습니다. 앱이 사용중이지 않은 경우 시스템은 앱을 launch 하고 이벤트를 전달합니다.
가능하다면 '앱이 사용중일 때' 권한을 요청하시기 바랍니다. 이 모드는 앱이 다음을 허용할 수 있도록 하면서 강력한 기능을 제공합니다.
UNLocationNotificationTrigger
를 사용할 수 있습니다. 사용자가 노티피케이션을 통해 클릭하면 시스템은 앱을 launch하고, 위치 이벤트를 받을 수 있도록 해줍니다. 이 메소드는 사용자가 앱에 사용자의 위치를 공유하는 시점을 결정할 수 있도록 해줍니다.Handling Location Events in the Background
https://developer.apple.com/documentation/corelocation/getting_the_user_s_location/handling_location_events_in_the_background
https://velog.io/@panther222128/Handling-Location-Events-in-the-Background
위치 서비스는 앱이 '사용중'인 동안에만 CLAuthorizationStatus.authorizedWhenInUse
를 갖는 앱을 사용할 수 있습니다. '앱이 사용중일 때' 권한을 지원하는 모든 플랫폼에서 앱은 아래의 경우에 사용중인 것으로 간주됩니다.
showsBackgroundLocationIndicator
)를 보여주고 있을 때입니다. iOS에서 인디케이터는 파란색 바이거나 화면 상단의 알약 모양입니다. watchOS에서는 작은 아이콘입니다.watchOS에서 시스템은 현재 워치 모습에서 complication을 사용중인 것으로 간주합니다. 그러나 complication이 위치 업데이트를 받는 동안 메인 워치 앱으로부터 권한 프롬프트를 요청할 수 있습니다. watchOS에서 백그라운드 위치 사용 인디케이터를 보여줄 수 있는 선택 방법이 없습니다.
앱은 사용자가 위치 정보가 필요할 때마다 항상 앱을 사용할 수 없거나 사용하지 않길 바라는 상황에서 '항상' 권한을 요청하게 될 것입니다. 아래의 경우에 '항상' 권한을 요청할 필요가 있을 것입니다.
권한 요청이 항상 권한을 받지 못할 수도 있다는 것을 기억해야 합니다. '항상' 권한을 요청하는 경우 사용자는 '앱이 사용중일 떄'를 선택할 수 있는 옵션을 갖게 됩니다. 항상 '앱이 사용중일 때'의 권한에 대비할 수 있어야 합니다.
Note
'앱이 사용중일 때' 권한을 요청하거나 받으면 이후에 '항상' 권한에 대한 요청을 분리시킬 수 있습니다. 그러나 앱은 '항상' 권한에 대해서는 오직 한 번만을 만들 것입니다.
모든 플랫폼이 '앱이 사용중일 떄' 권한을 지원하는 동안 '항상' 권한의 사용성 및 기능은 플랫폼마다 달라집니다. 아래와 같습니다.
tvOS
'앱이 사용중일 때' 권한만을 지원합니다.
watchOS
보통 앱은 '앱이 사용중일 때'권한만 필요할 것입니다. 워치 화면 컨텍스트는 항상 사용중일 때 효과적입니다. complication을 개발하고 있다면 앱은 '앱이 사용중일 때' 권한만 필요할 가능성이 높습니다. 코어 로케이션 API는 watchOS를 위한 launch 동작을 제공하지 않습니다.
macOS
코어 로케이션은 로케이션 서비스 시작 시 자동으로 사용자에게 허용을 프롬프트합니다. 사용자는 권한을 허용하거나 거부할 수 있습니다. '앱이 사용중일 때'와 '항상' 권한은 동일한 기능으로 작동합니다.
Mac Catalyst
UIKit
코드는 iOS에서 합리적인 권한만을 요청할 수 있고, 요청할 수 있어야 합니다. 같은 선택은 앱이 맥에서 동작할 때에도 작동할 것입니다. '앱이 사용중일 때'와 '항상' 권한은 맥에서 동일한 기능으로 작동합니다.
iOS
'앱이 사용중일 떄'와 '항상' 권한을 지원합니다.
iOS 13 혹은 이후 버전의 SDK에서 컴파일된 앱이면서 iOS 12 혹은 이전 버전에서 실행되는 앱은 '앱이 사용중일 때' 권한에서 iOS 12와 동일한 동작을 보여줄 것입니다. 구체적으로 iOS 12 혹은 이전 버전은 몇 가지 위치 서비스에 대해서 '항상' 권한일 때에만 앱에서 사용이 가능합니다. 아래 테이블에서 보여주는 것과 같습니다.
Table 1 Authorizations required to use location services in iOS 11 and iOS 12
Service | When In Use | Always |
---|---|---|
Standard location service | Supported | Supported |
Significant-change location service | Not available | Supported |
Visits service | Not available | Supported |
Region monitoring | Not available | Supported |
iBeacon ranging | Supported | Supported |
Heading service | Supported | Supported |
Geocoding services | Supported | Supported |
사용자 위치에 접근 할 수 있도록 사용자에게 허가를 요청합니다.
https://developer.apple.com/documentation/corelocation/requesting_authorization_for_location_services
https://velog.io/@panther222128/Requesting-Authorization-for-Location-Services
딜리게이트 메소드에서 앱의 권한상태에 대한 변경사항을 받고 응답합니다.
https://developer.apple.com/documentation/corelocation/responding_to_changes_in_authorization_status
https://velog.io/@panther222128/Responding-to-Changes-in-Authorization-Status