권한_요청 - boostcampwm-2024/and04-Nature-Album GitHub Wiki
-
형준
권한 요청 관련 : Android Developers 런타임 권한 요청
위치 정보 권한 관련 : Android Developers 위치 정보 액세스 권한 요청
codelab : Android Developers 대략적인 위치위치 정보 권한 유형
위치 정보 권한 유형에는 두 가지가 있다.
- 포그라운드 위치
- 앱에 위치 정보를 한 번만 또는 정의된 시간 동안 공유하거나 수신하는 기능이 포함되어 있을 때
- 내비게이션 앱에서 사용자가 세부 경로 안내를 받을 수 있는 기능
- 메시지 앱에서 사용자가 현재 위치를 다른 사용자와 공유할 수 있는 기능
- 앱에 위치 정보를 한 번만 또는 정의된 시간 동안 공유하거나 수신하는 기능이 포함되어 있을 때
- 백그라운드 위치
- 앱의 기능이 지속적으로 다른 사용자와 위치를 공유하거나 Geofencing API 를 사용하는 경우
- 가족 위치 공유 앱에서 사용자가 가족 구성원과 지속적으로 위치를 공유할 수 있는 기능
- IoT 앱에서 사용자가 집을 나갈 때 꺼지고 집에 돌아올 때 다시 켜지도록 홈 기기를 구성할 수 있는 기능
- 앱의 기능이 지속적으로 다른 사용자와 위치를 공유하거나 Geofencing API 를 사용하는 경우
Q. 어떤 것을 사용해야 할까?
A. 백그라운드 위치 권한까지는 필요 없을 것 같다.
- 지속적으로 위치를 받아오는 것이 아니라, 카메라로 사진을 찍는 버튼을 누르는 딱 한번의 순간만 필요하기 때문에 프그라운드 위치 권한만 있으면 될 것 같다.
정확성 관련
- 대략적인 위치 : 기기 위치 추정치 제공
LocationManagerService
또는FusedLocationProvider
에서 가져온 경우 이 위치 추정치의 오차 범위는 약 3제곱킬로미터 이내ACCESS_COARSE_LOCATION
권한만 요청할 때- WIFI 네트워크나 셀룰러를 통해 가져온다고 한다. ← 공식문서 링크 찾지 못함
- 정확한 위치 : 최대한 정확한 기기 위치 추정치를 제공
LocationManagerService
또는FusedLocationProvider
에서 가져온 경우 이 위치 추정치의 오차 범위는 일반적으로 약 50미터 이내이며 몇 미터 이내 또는 그 이상으로 정확할 때도 있다.ACCESS_FINE_LOCATION
+ACCESS_COARSE_LOCATION
권한 요청할 때- GPS 및 네트워크 기반 위치 제공자를 모두 사용하여 높은 정확도의 정보를 가져온다고 함 ← 역시 링크 X
Q. 둘 중 어느 것이 필요할까?
A. 이 부분은 이야기 해봐야할 것
- 공식 문서에 따르면 사용자의 개인 정보를 더 잘 존중하려면 대략적인 위치 권한 사용을 권장하는 것 같다.
- 근데 정확한 위치가 필요하지 않을까…?
- 포그라운드 위치
현재 위치 가져오는 방법
- LocationManager API
- FusedLocationProviderClient 🌟
- Android Developers Google Play 서비스 위치 및 컨텍스트 API로 이전
- “Google은 위치 서비스가 필요한 앱에서 Google Play 서비스의 위치 및 컨텍스트 API를 사용할 것을 권장합니다.”
- 이유 (한 마디로 LocationManager 를 쓸 이유가 없는 것)
권한 요청 시기
즉, 권한을 사용하지 않을 때는 요청하지 않다가 실제로 권한이 필요한 기능을 사용할 때 권한을 요청하는 것이다.
-
유진
위험한 권한을 선언하고 앱이 Android 6.0(API 수준 23) 이상을 실행하는 기기에 설치된 경우 이 가이드의 단계에 따라 위험한 런타임 권한을 요청해야 합니다.
위험한 권한을 선언하지 않거나 앱이 Android 5.1(API 수준 22) 이하를 실행하는 기기에 설치된 경우 권한이 자동으로 부여되므로 이 페이지의 다른 단계를 완료하지 않아도 됩니다.
기본 원칙
런타임 권한을 요청하기 위한 기본 원칙은 다음과 같습니다.
- 사용자가 권한이 필요한 기능과 상호작용하기 시작할 때 컨텍스트에 따라 권한을 요청합니다.
- 사용자를 차단하지 않습니다. 교육용 UI 흐름(예: 권한 요청의 근거를 설명하는 흐름)을 취소하는 옵션을 항상 제공합니다.
- 사용자가 기능에 필요한 권한을 거부하거나 취소하면 권한이 필요한 기능을 사용 중지하는 등의 방법으로 앱의 성능을 단계적으로 저하시켜 사용자가 앱을 계속 사용할 수 있도록 합니다.
- 시스템 동작을 가정하지 않습니다. 예를 들어 여러 권한이 동일한 권한 그룹에 표시된다고 가정하지 마세요. 권한 그룹은 앱이 밀접하게 관련된 여러 권한을 요청할 때 시스템에서 사용자에게 표시하는 시스템 대화상자의 수를 최소화하는 데만 도움이 됩니다.
그림 1. Android에서 런타임 권한을 선언하고 요청하는 워크플로를 보여 주는 다이어그램
https://developer.android.com/privacy-and-security/minimize-permission-requests?hl=ko
주변 장소 표시
앱에서 사용자의 대략적인 위치를 알아야 할 수 있습니다. 이는 근처 음식점과 같은 위치 인식 정보를 표시하는 데 유용합니다.
사용 사례에 따라 기기 위치의 대략적인 추정치만 필요한 경우도 있습니다. 이러한 상황에서는 앱에 위치 인식 정보가 필요한 빈도에 따라 다음 중 하나를 진행하세요.
- 앱에 위치 정보가 자주 필요한 경우 ACCESS_COARSE_LOCATION 권한을 선언합니다. 이 권한은 대략적인 위치 정확도에 관한 문서에 설명된 대로 위치 서비스에서 기기 위치 추정치를 제공합니다.
- 앱에 위치 정보가 자주 필요하지 않거나 한 번만 필요한 경우 사용자에게 주소나 우편번호를 대신 입력하도록 요청하는 것이 좋습니다.
다른 사용 사례에서는 기기 위치의 더 정확한 추정치가 필요하기도 합니다. 이러한 상황은 권한을 선언해도 되는 유일한 경우입니다.
사진 촬영
사용자는 사전 설치된 시스템 카메라 앱을 사용하여 앱에서 사진을 찍을 수 있습니다.
이러한 상황에서는 CAMERA
권한을 선언하지 마세요. 대신 ACTION_IMAGE_CAPTURE 인텐트 작업을 호출하세요.
참고: 앱이 Manifest.permission.CAMERA 권한을 선언하는데 권한이 부여되지 않은 경우, **SecurityException
**이 발생합니다.
2024.11.04.월 권한 요청 관련 구현 정리
<uses-feature android:name="android.hardware.camera" android:required="false" />
→ 기기에 카메라가 있는지 확인. true면 카메라가 없는 기기는 설치를 못한다.
false로 해놓고 hasSystemFeature()
를 통해 카메라가 있는지 검사 후 카메라가 있다면 실행시키자!
카메라
<uses-permission android:name="android.permission.CAMERA"/>
사진에서 메타데이터에서 위치 가져오기
<uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION" />
정밀한 위치
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
대략적인 위치
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
• ACCESS_FINE_LOCATION: 고정밀 위치 정보(예: GPS, Wi-Fi, Bluetooth)를 가져오는 권한입니다. 이 권한을 요청하면 사용자의 정확한 위치(보통 수 미터 단위)를 얻을 수 있어 개인정보 보호 측면에서 더 민감한 정보에 접근하게 됩니다.
• ACCESS_COARSE_LOCATION: 저정밀 위치 정보(기지국, Wi-Fi 등)를 통해 대략적인 위치 정보를 가져오는 권한입니다. 일반적으로 시/군/구 단위로 사용자의 위치를 알 수 있으며, ACCESS_FINE_LOCATION보다 개인정보 보호에 더 안전한 접근 방식입니다.