Domain/Android

[Android] 위치정보 권한 ( Android10 Location / Location Permission / COARSE_LOCATION / FINE_LOCATION / BACKGROUND_LOCATION )

by Donghwan 2021. 4. 23.

사용자 개인 정보를 보호하려면 위치 서비스를 사용하는 앱에서 위치 정보 액세스 권한을 요청해야 합니다. 안드로이드에서는 Location Permission은 ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION, ACCESS_BACKGROUND_LOCATION을 제공합니다. 기존 ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION퍼미션에서 Android 10부터 추가적으로 ACCESS_BACKGROUND_LOCATION가 추가 되었습니다.

  • ACCESS_COARSE_LOCATION
    도시 블록 내에 위치 정확성을 제공합니다.
  • ACCESS_FINE_LOCATION
    COARSE_LOCATION 보다 정확한 위치를 제공합니다. 이 권한은 BLE와 기기의 연결 같은 특정 작업에 필요합니다.
  • ACCESS_BACKGROUND_LOCATION
    백그라운드에서도 위치정보를 수집하는 경우에 추가가 필요한 퍼미션입니다.

위치정보는 상황별로 포어그라운드 위치와 백그라운드 위치로 나뉩니다.

 

포어그라운드 위치

기존의 위치 퍼미션(ACCESS_FINE_LOCATION 또는 ACCESS_COARSE_LOCATION)은 앱이 포어그라운드 상태로 실행 중인 경우에만 위치 정보를 얻을 수 있습니다. 앱에 위치정보를 한 번만 또는 정의된 시간 동안 공유하거나 수신하는 기능이 포함되어 있으면 이 기능에는 포그라운드 위치 정보 액세스 권한이 필요합니다.

  • 내비게이션 앱 내에서 사용자가 세부 경로 안내를 받을 수 있는 기능
  • 메시지 앱 내에서 사용자가 현재 위치를 다른 사용자와 공유할 수 있는 기능

포어그라운드 서비스에서 위치 정보를 얻어야 한다면, 추가로 권한을 요청할 필요는 없지만 별도의 세팅을 해줘야 합니다.

<!-- Recommended for Android 9 (API level 28) and lower. -->
<!-- Required for Android 10 (API level 29) and higher. -->
<service
    android:name="MyNavigationService"
    android:foregroundServiceType="location" ... >
    <!-- Any inner elements would go here. -->
</service>

 

백그라운드 위치

앱 내 기능이 지속적으로 다른 사용자와 위치를 공유하는 경우에는 백그라운드 위치 정보 권한이 필요합니다. Android 10(API 수준 29) 이상에서 개발자는 런타임 시 백그라운드 위치 정보 액세스 권한을 요청하기 위해 앱 매니페스트에서 BACKGROUND 권한을 선언해야 합니다. 이전 버전의 Android에서는 앱에서 ACCESS_FINE_LOCATION 또는 ACCESS_COARSE_LOCATION을 요청하면 자동으로 ACCESS_BACKGROUND_LOCATION을 추가합니다.

<manifest ... >
  <!-- Required only when requesting background location access on
       Android 10 (API level 29) and higher. -->
  <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
</manifest>

 

앱의 위치정보 권한 요청

Android 10을 타겟으로 하는 기기의 경우 첫번째 그림과 같이 승인 팝업이 뜨게 됩니다.

  • 항상 허용
  • 앱 사용 중에만 허용

권한 부여 프로세스는 앱의 타겟 SDK 버전에 따라 다릅니다. Android 10(API 수준 29)을 실행하는 기기에서 백그라운드 위치를 요청하면 시스템 권한 대화상자에는 항상 허용이라는 옵션이 포함됩니다. 사용자가 이 옵션을 선택하면 앱의 기능에 백그라운드 위치 정보 액세스 권한이 부여됩니다. 하지만 Android 11(API 수준 30) 이상에서는 시스템 대화상자에 항상 허용 옵션이 포함되지 않습니다.

  • 앱 사용 중에만 허용
  • 이번만 허용
  • 거부

옵션만 존재합니다. 대신 사용자는 설정 페이지에서 백그라운드에서 위치 정보가 필요하다면 Manifest에서 BACKGROUND 권한을 받아서 아래의 이미지의 요구에 따라야 합니다. 또 권한을 거부하더라도 앱 사용에 지장이 없도록 해야 합니다.

Android 10 이상에서는 사용자가 백그라운드 위치 정보 액세스 권한을 부여한 후 앱의 기능이 백그라운드에서 기기 위치에 처음 액세스하면 시스템은 사용자에게 알림을 통해 사용자에게 앱이 기기 위치에 항상 액세스하도록 허용했음을 알립니다.

 


참고자료

  • Android Developer

 

 

728x90
반응형

댓글