안드로이드 앱 권한
앱 권한은 제한된 데이터(시스템 상태 및 연락처 정보)와 제한된 작업(페어링된 기기에 연결 및 오디오 녹음)등에 대한 접근을 보호해 개인정보를 보호한다.
앱의 메니페스트에 권한을 선언할 때 앱에 필요한 권한만 추가해야 한다.
- 앱 권한의 전체 목록은 아래와 같다.
- 앱 권한을 설정하지 않고도 사진 찍기, 미디어 재생 등 여러가지를 진행할 수 있음
- 인텐트를 이용하는 방법 (사진 찍기 : MediaStore.ACTION_IMAGE_CAPTURE)
앱 권한을 사용하는 Workflow는 아래와 같다.
Workflow에서 볼 수 있는 runtime permission은 안드로이드 API 23 이상 버전에서만 적용되는 것으로, 22 이하는 runtime permission을 적용하지 않아도 된다.
그러나 maxsdk가 23 이상으로 설정되어 있는 경우 runtime permission을 적용해야 한다.
앱 권한 유형
- 권한 유형에는 설치 시간(install-time) 권한, 런타임 권한, 특별 권한 등 여러가지로 분류된다.
설치 시간 권한
- 제한적으로 데이터에 접근하고 시스템이나 다른 앱에 영향을 최소한으로 미치는 권한일 경우 앱을 설치할 때 시스템에서 해당하는 권한들을 자동으로 수락한다.
일반 권한
- 위에서 언급한 앱 권한의 전체 목록에서
Normal
에 해당하는 권한들이 일반 권한으로 불린다. - 개인정보 보호와 다른 앱의 작업에 거의 영향을 미치지 않는다.
런타임 권한
- 위에서 언급한 앱 권한의 전체 목록에서 민감한 정보(사용자 GPS 위치 등)를 다루는
Dangerous
에 해당하는 권한들로써 런타임(실행중일 때)에 권한을 요청해야 한다. - runtime permission은 안드로이드 API 23(마시멜로우) 이상 버전에서만 적용되는 것으로, 22 이하는 runtime permission을 적용하지 않아도 설치 시간 권한에서 수락된다.
앱 권한 추가
- 매니페스트 파일에 사용할 앱 권한을 설정한다.
1
2
3
4
5
6
<manifest ...>
<uses-permission android:name="android.permission.CAMERA"/>
<application ...>
...
</application>
</manifest>
- required 옵션을 통해 선택적으로 해당 권한을 사용할 수 있다.
- 카메라가 없는 안드로이드 기기 등
1
<uses-permission android:name="android.permission.CAMERA" required="false"/>
- 하드웨어 유무는
hasSystemFeature
메소드를 이용해 알아낼 수 있으며, 하드웨어가 있을때와 없을때를 다르게 처리해야 한다.
1
2
3
4
5
6
7
8
// Check whether your app is running on a device that has a front-facing camera.
if (applicationContext.packageManager.hasSystemFeature(
PackageManager.FEATURE_CAMERA_FRONT)) {
// Continue with the part of your app's workflow that requires a
// front-facing camera.
} else {
// Gracefully degrade your app experience.
}
참고
- https://developer.android.com/guide/topics/permissions/overview?hl=ko
Comments powered by Disqus.