본문 바로가기

Java

[AndroidM] 새로운 Permission 정책 적용하기


안드로이드 M(마시멜로, API 23) 부터는 앱 설치 시 퍼미션을 한번에 승인하는것이 아니라, 각각 개별 퍼미션에 대해서 사용자가 승인 또는 거부 여부를 설정할 수 있습니다.


(앱 권한을 묻는 팝업, 사용자는 권한을 거부할 수 있으므로 이 부분에 주의하여야 합니다.)


따라서 앱이 사용하고자 하는 모든 퍼미션이 사용자의 거부에 의해 완벽하게 동작하지 않을 수 있으며, 이에 대한 처리가 수행되지 않았을 경우에는 비 정상적인 동작이 수행될 수 있습니다.

 


앱은 반드시 각각의 기능을 사용하기 전에 해당 퍼미션이 승인되었는지 여부를 검사하고,

만약에 거부된 상태일 경우에 사용자로부터 이 퍼미션이 왜 필요한지 여부를 설명하고 퍼미션을 승인해 줄 것을 요청해야 하는 로직이 추가적으로 작성되어야 합니다.

 

아래의 예제는 특정한 퍼미션(카메라)을 사용할 수 있는지 여부를 검사하고, 아직 승인이 되지 않았을 경우 사용자에게 퍼미션을 요청하는 코드입니다.

퍼미션 요청은 응답 된 이후에 항상 동일한 상태를 보장하지 않으므로(한번 승인한 후에 사용자가 환경 설정에서 다시 취소 할 수 있습니다.), 앱 초기화 시점에 한번 요청하는 것이 아닌, 해당 기능을 사용할 때 마다 퍼미션 검사와 요청이 수행되어야 합니다.




기존에 빌드된 앱들은?

기존에 빌드된 앱(API ~22)에 대해서는

 

사용자의 시스템이 마시멜로 아래 버전인 경우

이 경우에는 기존의 퍼미션 정책과 동일하게 동작합니다.

사용자의 시스템이 마시멜로 이상 버전인 경우

기존에 설치되어 있는 앱 혹은, 앞으로 설치될 앱 중 TargetSDK가 ~22로 지정되어 빌드된 모든 앱들은 사용하는 퍼미션이 'ON' 상태인 것으로 간주됩니다.

(시스템이 마시멜로 이상 버전이더라도, 기존의 퍼미션 정책을 유지하는것을 뜻합니다.)

하지만 사용자는 언제든지 설정에서 이미 켜져있는 퍼미션을 언제든지 OFF 상태로 변경할 수 있습니다.


(다행히 사용자가 이전 버전의 퍼미션 정책을 가진 앱에서
권한을 끄려고 시도할 경우 경고 메세지가 출력됩니다.)


기존 앱들은 이에 대한 처리가 되어 있지 않은 경우가 대부분일 것이므로, 사용자가 퍼미션을 OFF 할 경우 비 정상적인 동작이 일어날 수 있습니다.

이에 대해 TargetSDK를 23으로 수정하고, 퍼미션 관련 처리 로직이 포함된 패치가 필요합니다.