Choosing the Location Services Authorization to Request

Panther·2021년 8월 21일
0

https://developer.apple.com/documentation/corelocation/choosing_the_location_services_authorization_to_request

"Determine the authorization your app needs to access location data."

위치 데이터에 접근하기 위해 앱이 필요한 권한을 결정합니다.

Overview

앱이 갖는 권한 상태는 위치 이벤트를 받을지 여부와 언제 받을지에 대한 시점을 결정합니다. 앱이 요청할 수 있는 권한 타입은 두 가지가 있습니다.

앱이 사용중일 때
앱이 사용중인 동안에만 모든 위치 서비스를 사용할 수 있고 이벤트를 받을 수 있습니다. 일반적으로 iOS 앱은 포어그라운드에 있거나 백그라운드 위치 사용 인디케이터가 활성화된 상태의 백그라운드 실행중일 때 사용중인 것으로 간주됩니다.

항상
앱은 사용자가 앱이 실행중이지 않다고 인식할 때에도 모든 위치 서비스를 사용할 수 있고 이벤트를 받을 수 있습니다. 앱이 사용중이지 않은 경우 시스템은 앱을 launch 하고 이벤트를 전달합니다.

Prefer When In Use Authorization

가능하다면 '앱이 사용중일 때' 권한을 요청하시기 바랍니다. 이 모드는 앱이 다음을 허용할 수 있도록 하면서 강력한 기능을 제공합니다.

  • 사용자가 앱을 사용중인 동안 모든 사용 가능한 위치 서비스에 접근할 수 있습니다. 사용자가 앱 사용을 멈추면 사용자가 앱을 재개하기까지 모든 요청이 일시정지됩니다.
  • Xcode 프로젝트에서 백그라운드 위치 업데이트를 활성화시킨 경우 앱이 백그라운드에 진입하더라도 위치 업데이트를 계속 가져옵니다. 이에 대한 더 많은 정보는 Handling Location Events in the Background를 보시기 바랍니다.
  • 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에서 백그라운드 위치 사용 인디케이터를 보여줄 수 있는 선택 방법이 없습니다.

Ask for Always Authorization

앱은 사용자가 위치 정보가 필요할 때마다 항상 앱을 사용할 수 없거나 사용하지 않길 바라는 상황에서 '항상' 권한을 요청하게 될 것입니다. 아래의 경우에 '항상' 권한을 요청할 필요가 있을 것입니다.

  • 프롬프트가 불편하거나 바람직하지 않다고 여겨지는 동안 자동화된 작업을 수행하는 경우입니다. 예를 들어 앱이 사용자가 위치에 진입할 때 자동 액션을 트리거하는 경우(조명을 키는 것처럼) 앱은 '항상' 권한을 요구할 수 있습니다.
  • 다이어리 앱처럼 앱이 하루 동안 여러 위치를 기록하는 경우입니다. 사용자가 앱이 사용중이지 않고 사용자에게 프롬프트하지 않아도 위치를 계속 기록할 수 있도록 '항상' 권한을 선호하는 경우입니다.

권한 요청이 항상 권한을 받지 못할 수도 있다는 것을 기억해야 합니다. '항상' 권한을 요청하는 경우 사용자는 '앱이 사용중일 떄'를 선택할 수 있는 옵션을 갖게 됩니다. 항상 '앱이 사용중일 때'의 권한에 대비할 수 있어야 합니다.

Note
'앱이 사용중일 때' 권한을 요청하거나 받으면 이후에 '항상' 권한에 대한 요청을 분리시킬 수 있습니다. 그러나 앱은 '항상' 권한에 대해서는 오직 한 번만을 만들 것입니다.

모든 플랫폼이 '앱이 사용중일 떄' 권한을 지원하는 동안 '항상' 권한의 사용성 및 기능은 플랫폼마다 달라집니다. 아래와 같습니다.

tvOS
'앱이 사용중일 때' 권한만을 지원합니다.

watchOS
보통 앱은 '앱이 사용중일 때'권한만 필요할 것입니다. 워치 화면 컨텍스트는 항상 사용중일 때 효과적입니다. complication을 개발하고 있다면 앱은 '앱이 사용중일 때' 권한만 필요할 가능성이 높습니다. 코어 로케이션 API는 watchOS를 위한 launch 동작을 제공하지 않습니다.

macOS
코어 로케이션은 로케이션 서비스 시작 시 자동으로 사용자에게 허용을 프롬프트합니다. 사용자는 권한을 허용하거나 거부할 수 있습니다. '앱이 사용중일 때'와 '항상' 권한은 동일한 기능으로 작동합니다.

Mac Catalyst
UIKit 코드는 iOS에서 합리적인 권한만을 요청할 수 있고, 요청할 수 있어야 합니다. 같은 선택은 앱이 맥에서 동작할 때에도 작동할 것입니다. '앱이 사용중일 때'와 '항상' 권한은 맥에서 동일한 기능으로 작동합니다.

iOS
'앱이 사용중일 떄'와 '항상' 권한을 지원합니다.

Request Authorization for Apps Running in iOS 12 and Earlier

iOS 13 혹은 이후 버전의 SDK에서 컴파일된 앱이면서 iOS 12 혹은 이전 버전에서 실행되는 앱은 '앱이 사용중일 때' 권한에서 iOS 12와 동일한 동작을 보여줄 것입니다. 구체적으로 iOS 12 혹은 이전 버전은 몇 가지 위치 서비스에 대해서 '항상' 권한일 때에만 앱에서 사용이 가능합니다. 아래 테이블에서 보여주는 것과 같습니다.

Table 1 Authorizations required to use location services in iOS 11 and iOS 12

ServiceWhen In UseAlways
Standard location serviceSupportedSupported
Significant-change location serviceNot availableSupported
Visits serviceNot availableSupported
Region monitoringNot availableSupported
iBeacon rangingSupportedSupported
Heading serviceSupportedSupported
Geocoding servicesSupportedSupported

See Also


Authorization

Requesting Authorization for Location Services

사용자 위치에 접근 할 수 있도록 사용자에게 허가를 요청합니다.

https://developer.apple.com/documentation/corelocation/requesting_authorization_for_location_services
https://velog.io/@panther222128/Requesting-Authorization-for-Location-Services

Responding to Changes in Authorization Status

딜리게이트 메소드에서 앱의 권한상태에 대한 변경사항을 받고 응답합니다.

https://developer.apple.com/documentation/corelocation/responding_to_changes_in_authorization_status
https://velog.io/@panther222128/Responding-to-Changes-in-Authorization-Status


0개의 댓글