Android

[Android]Runtime Permission 안드로이드 6.0 마시멜로 이상의 권한요청

남잭슨 2017. 9. 18. 15:24

Runtime Permission


Android에서의 권한 관리는 보안상 가장 중요합니다.

안드로이드 6.0 마시멜로 이전까지는 권한 허용을 App의 설치 단계에서만 물어봤습니다.

안드로이드 6.0 마시멜로 이하 버젼의 설치 화면입니다.

해당 App을 설치를 하기위해선 , 아래와 같은 권한들이 왜, 언제 필요한지는 상관없이

이렇게 모든 권한을 동의해야만 설치가 가능하였습니다.




설치단계에서 모든 권한을 동의하면 , 언제 어떤 기능을 사용할때, 이러한 권한들을 사용하는지 모르기때문에

사용자들의 보안에 많은 빈틈이 생기게되었죠.


실제로 손전등 기능만 있는 앱에서 23개의권한을 요구하기도 하였고,

개인정보 유출도 많이 일어났습니다.


그래서 Google에서는 Android 6.0버전 marshmallow 마시멜로 이후엔 , RunTime Permission이라는 기능을 도입합니다.

말그대로 실행중 권한을 체크하는것입니다.

개발자가 권한을 관리하는것이 아닌, 사용자가 권한을 관리하게 되는것이죠!


Android 6.0 마시멜로 변경사항입니다.

https://developer.android.com/about/versions/marshmallow/android-6.0-changes.html


해당 권한을 사용할때 , 사용자가  아래와 같이 첫 실행때 단 한 번만 허용하면, 계속 권한을 사용할수 있습니다.

이후, 사용자는 android 설정에서 자유롭게 권한을 추가/제거 할수도 있습니다.





Android 보안이 좀더 좋아졌지만,, 

개발자의 입장에서는 매우 불편해졌습니다ㅠㅠ

마시멜로 전 버전까지는 아래와 같이 Manifest에서 필요한 권한만 입력했다면,

Manifest에 입력을 물론, 사용할때 사용자로부터 권한을 확인받아야하기때문이죠..!



기존의 권한추가방식



    
    
    
    
    
    
    


Android 6.0 마시멜로 이전에는 Android Manifests 아래에 필요한 권한들을 나열하면 개발자로써 할일은 끝납니다.



Android 6.0 이상 마시멜로 이후


Android 6.0 이상의 마시멜로의 경우에도 마찬가지로  Manifests 파일에 권한들을 나열해야합니다.


하지만 나열만 하면 끝난게아닙니다.


마시멜로 이후 버젼부터  Normal Permission / Dangerous Permission 으로 나눠지게 되는데, Normal Permission 의 경우에는 이전과 똑같이 Manifests에서 선언만 해주면 사용가능합니다.

하지만 보안에 민감한 파일 접근 , 녹음 , 카메라 등의 기능의 경우에는 Dangerous Permission으로 Runtime Permission을 얻어야합니다.

RunTimePermission이 필요한 그룹은 아래와 같습니다!



Dangerous Permission 종류



권한 그룹권한
CALENDAR
CAMERA
CONTACTS
LOCATION
MICROPHONE
PHONE
SENSORS
SMS
STORAGE

위와같은 권한들만 Runtime Permission이 요구됩니다.


만약 위와같은 권한을 사용하는데, Runtime Permission을 신경쓰지않는다면?

Android Studio 의 build.gradle(Module:app)에서

targetSdkVersion 23

위와같이 targetSdkVersion이 23이상이라면 아래와 같은 에러가 발생하면서 어플리케이션은 강제종료됩니다 ㅜㅜ

( 아직 RuntimePermission을 관리하기 싫다면 targerSdkVersion을 23 이하로 하고 빌드하시면 됩니다)





Runtime Permission 요청


사용자의 권한을 체크 -> 권한 요청 -> 권한요청결과처리

-> 권한 요청 거절시 , 설정에서 권한 허용해달라는 Dialog

-->