티스토리 뷰

728x90
반응형

안드로이드 6.0 그러니깐 API level 23부터 런타임 퍼미션이 추가되었습니다.



제가 안드로이드 초창기부터 그토록 간절히 바라던 기능이었는데요


iOS는 앱스토어에서 앱을 다운로드할때 다운로드 버튼만 누르면 다운로드됩니다.


반면에 구글플레이에서 앱을 설치할때는 아래처럼 앱이 요청하는 권한들을 확인하고 동의하여야 설치가 되죠




그래서 본의 아니게 난 그냥 게임만 하고 싶은건데


위치권한부터, 연락처권한, SMS권한 등 엄청나게 많은 권한을 울며겨자먹기로 승인할수 밖에 없는거죠.




이렇듯 안드로이드는 우리가 설치시에 해당 권한에 대한 동의를 하였기때문에


앱은 해당 권한을 언제나 자유자재로 사용할수 있습니다.


반면 iOS는 앱을 이용하면서 특정권한이 필요할때 해당 권한에 대하여 허용여부를 물어보고 허용 여부를 정할수 있습니다.





이렇게 말이죠. 권한을 허용을 하지 않더라도 우리는 앱의 기능을 제한적으로라도 사용할수 있습니다.





그리고 권한은 언제든지 설정에서 on, off를 할수 있게 되어있어서 매우 좋습니다.





이제 안드로이드 6.0부터는 iOS와 마찬가지로 런타임 퍼미션이 적용되어


구글플레이에서 다운로드할때는 아무런 권한에 대한 사전 동의가 필요없이 다운로드가 되며,


앱을 실행하면서 해당 권한이 필요할때 우리는 선택적으로 승인을 할수가 있습니다.





개발자입장에서는 안드로이드의 사전 권한 동의 모델이 훨씬 개발하기에 있어서 수월합니다.


앱을 설치한 이상 그 권한은 무조건 사용가능하다는 전제가 되기 때문이죠.


하지만 이제는 해당 권한을 필요로 하는 기능을 사용할때마다


사용자가 그 권한에 대해서 허용을 했는지 체크한 후에 적절한 액션을 보여주도록 해야합니다.



퍼미션은 normal과 dangerous 퍼미션으로 구분되는데


알림, 인터넷과 같은 권한은 normal 퍼미션이고


위치, 연락처, SMS 등의 권한은 dangerous 퍼미션입니다.


사생활과 관련된 기능들이 대게 dangerous 퍼미션입니다.


구분은 아래의 링크에 잘 나와있습니다.


https://developer.android.com/guide/topics/security/permissions.html



사용자의 안드로이드 시스템 버전과 앱의 targer sdk level에 따라 아래와 같이 동작합니다.




사용자 안드로이드 시스템 버전이 5.1이거나 그보다 낮으면 또는 target sdk level이 22이거나 그보다 낮으면


앱을 설치시에 권한에 대해 동의해야하고 동의 하지 않으면 앱을 설치할수 없습니다.



사용자 안드로이드 시스템 버전이 6.0 또는 그보다 크거나 앱의 target sdk level이 23이거나 그보다 크면


앱을 설치시에 아무런 동의가 필요없이 설치가 가능하며, 앱을 실행 중에 필요시 권한을 요청하고 허용을 하지 않아도 제한적 사용이 가능합니다. 개발자입장에서도 앱을 설치할때 동의 버튼을 누르는 프로세스를 건너뛰에 되어서 다운로드 유입에도 더 좋습니다.





그리고 사용자 안드로이드 시스템이 6.0이상이라면 앱의 target sdk level에 상관없이 특정 권한을 사용하지 못하게 on, off 설정을 할 수 있습니다.


그렇지만 앱이 해당 권한이 없을때의 예외처리가 적절히 되어있지 않다면 앱이 갑자기 죽거나 하는 등의 문제가 발생할수 있기는 하죠.. 시무룩 : (




런타임퍼미션 기능에 대응하기 위해 개발자는 다음과 같은 항목들을 체크해야합니다.


구현방법은 아래의 기술문서에도 잘 나와있습니다.


https://developers-kr.googleblog.com/2015/09/playservice81android60.html



1. 사용자의 안드로이드 모든 버전에서 동작해야하니 manifest 파일에 normal과 dangerous 모든 퍼미션을 적습니다.


2. 퍼미션이 없어도 적절히 동작하는지 테스트해야합니다.(6.0 이상에서는 target sdk level에 상관없이 권한 취소가 가능합니다)


3. 사용자는 언제든 권한 취소가 가능하므로 기능이 동작할때마다 권한이 있는지 체크해야합니다.


4. requestPermissions() 메서드를 호출하기 전에, shouldShowRequestPermissionRationale() 메서드를 통해 안내 메시지를 보여줄수 있는데 이 메서드는


이전에 권한요청한적이 있는데 사용자가 권한요청을 거부한경우 true를 리턴합니다.


권한요청을 다시 묻지 않기에 체크한경우는 false,


기기정책으로 허용하지 않으면 false를 리턴합니다.



즉 true를 리턴하는 경우에는 사용자에게 이 권한이 있을때의 효과나 이점 등을 설명해서 권한을 허가하도록 안내를 보여줄수 있습니다.


728x90
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함