🍀 헷갈리는 Android 위치 정보 권한 정리 🍀
🚨 Android 위치 정보 액세스 권한 요청
Android 앱에서 위치 정보를 활용하려면 위치 권한을 반드시 요청해야 합니다.
앱이 제공하는 각 기능은 해당 기능에 필요한 접근 권한을 사용자에게 명시적으로 요청하고, 사용자가 허가해야만 정상적으로 동작합니다.
• 보안 : 권한이 없는 상태에서 민감한 데이터에 접근하는 것을 방지합니다.
• 개인정보 보호 : 사용자가 자신의 위치 정보 등 개인 데이터를 제공할지 여부를 직접 선택할 수 있습니다.
• 정상적인 기능 수행 : 권한이 부여된 경우에만 위치 기반 서비스(지도 표시, 주변 검색, 실시간 추적 등)를 사용할 수 있습니다.
따라서 위치 정보를 확인하거나 활용하는 모든 경우에, 앱은 실행 시점 혹은 해당 기능을 처음 사용할 때 위치 권한을 요청하고, 사용자가 허용한 경우에만 기능을 제공하도록 구현해야 합니다.
https://developer.android.com/develop/sensors-and-location/location/permissions?hl=ko
위치 정보 액세스 권한 요청 | Sensors and location | Android Developers
이 문서에서는 포그라운드 및 백그라운드 액세스, 다양한 정확도 수준 등 Android 앱의 다양한 위치 요구사항 유형을 설명하고 각 사용 사례에 적합한 위치 정보 액세스 권한을 요청하는 방법을
developer.android.com
🧤 위치 권한 유형
1. ACCESS_COARSE_LOCATION (대략적인 위치)
2. ACCESS_FINE_LOCATION (정확한 위치)
3. ACCESS_BACKGROUND_LOCATION (백그라운드 위치)
| 카테고리 | 권한 명칭 | 설명 | 특징 |
| 포그라운드 권한 | ACCESS_COARSE_LOCATION (대략적인 위치) |
기지국(Cell-ID)이나 와이파이(Wi-Fi) 정보를 기반으로 약 3km 오차 범위의 대략적인 위치를 파악 | • 오차 범위가 도시 블록 수준(약 1.6km~3km)으로 넓음. • 배터리 소모가 적음. |
| ACCESS_FINE_LOCATION (정확한 위치) |
위성(GPS) 및 네트워크, 이동통신 기지국 정보를 활용해 수 미터 오차 범위 내의 정확한 기기 위치를 파악 | • 수 미터(m) 내외의 정밀한 위치 파악 가능. • 내비게이션, 배달 앱 등에 필수. • 배터리 소모가 상대적으로 큼. |
|
| 백그라운드 권한 | ACCESS_BACKGROUND_LOCATION (백그라운드 위치) |
앱이 닫혀 있거나 화면이 꺼진 상태(백그라운드 상태) 및 디바이스가 대기 모드일 때도 백그라운드 서비스 등에서 지속적으로 위치 정보를 활용할 수 있도록 허용 | • Android 10 (API 29)부터 도입. • 구글 플레이 보안 심사 대상이며, 사용자 동의 과정이 매우 엄격함. • 설정 화면의 위치 권한 중 '항상 허용' 상태를 의미함. |
💡 Android 12 (API 31) 부터의 변경 사항
Android 12 이상부터는 시스템이 권한 팝업을 띄울 때 사용자에게 대략적인 위치(ACCESS COARSE) 와 정확한 위치(ACCESS FINE) 중 하나를 직접 선택할 수 있는 옵션을 제공합니다. 따라서 앱이 ACCESS_FINE_LOCATION 을 요청해도 사용자가 '대략적인 위치'를 선택할 수 있으므로 보통 두 권한을 동시에 요청합니다.
<!-- 대략적인 위치, 정확한 위치 함께 선언 및 요청 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

💡 포그라운드 서비스(Foreground Service)와 위치 권한
앱이 백그라운드에서 계속해서 위치 정보를 수집하도록 하려면 백그라운드 위치 권한 허용이 필요합니다. 하지만 만약 앱이 백그라운드에 있더라도 아래 두 조건이 충족되면 백그라운드 위치 권한(ACCESS_BACKGROUND_LOCATION) 없이도 포그라운드 권한만으로 계속해서 위치 정보를 수집할 수 있습니다.
1. 상단 알림 바에 지속적으로 고정 알림(Notification)이 노출되는 포그라운드 서비스를 실행 중일 때
2. AndroidManifest.xml의 <service> 태그 안에 포그라운드 서비스 타입을 위치로 명시했을 때
<service
android:name=".YourLocationService"
android:foregroundServiceType="location" />
ACCESS_BACKGROUND_LOCATION (백그라운드 위치)
안드로이드에서 백그라운드 위치 권한(ACCESS_BACKGROUND_LOCATION) 은 OS 버전에 따라 매우 엄격한 정책이 적용됩니다.
Android 11 (API 30) 이상인 경우에는 핵심 정책 확인이 필요합니다.
Android 11 (API 30) 이상
• 포그라운드 권한 선행 필수 : 포그라운드 위치 권한(ACCESS_COARSE_LOCATION 또는 ACCESS_FINE_LOCATION) 이 이미 허용된 상태여야만 백그라운드 위치 권한을 요청할 수 있습니다.
동시에 요청 시 무조건 거절 처리됨 (권한 요청 팝업 자체가 뜨지 않음)
• 단독 요청 및 설정 이동 : Android 11 이상 기기에서는 백그라운드 위치 권한을 요청하려면 시스템 권한 요청 팝업이 바로 뜨지 않고 시스템 설정(앱 정보 -> 권한 -> 위치) 화면으로 이동하여 사용자가 직접 "항상 허용(Allow all the time)"을 선택하도록 해야 합니다.
• 사전 고지 필수 : 설정 화면으로 이동하기 전에 앱에서 자체 다이얼로그(Dialog) 를 띄워 사용자에게 백그라운드 위치 권한이 필요한 이유를 명시적으로 설명해야 합니다. 백그라운드 권한 필요 이유를 설명해야 구글 플레이 심사에서 거절되지 않습니다.
• 구글 플레이 심사 : 앱에서 다이얼로그를 통해 백그라운드 권한 필요 이유를 설명함과 동시에 백그라운드 위치 정보 액세스 권한이 필요한 이유를 구글 플레이 콘솔의 앱 콘텐츠에 위치 정보 액세스 권한도 입력해야 합니다. 앱의 목적, 위치 정보 액세스, 동영상 항목을 작성해야 합니다.



💡 Android 10 (API 29)
- "앱 사용 중에만 허용" 옵션 추가됨 : Android 10 (API 29) 부터 위치 권한 요청 시 "앱 사용 중에만 허용" 옵션이 추가되어 앱을 사용 중일 때만 위치 정보를 획득할 수 있도록 변경됨.
- 포그라운드 권한 선행 없이 백그라운드 위치 권한(ACCESS_BACKGROUND_LOCATION) 을 추가로 선언할 경우 "항상 허용" 옵션이 추가됨

💡 Android 9 (API 28) 이하
- 별도 권한 없이 위치 권한만 있으면 사용 가능. 백그라운드에서 위치 정보를 얻어 활용하는 건 어려움.
- 백그라운드 서비스는 단발성으로만 가능

감사합니다 😊