런타임 권한 모델 고려 사항, 런타임 권한 모델 (Runtime permissions), 서포트 라이브러리

CODEDRAGON Development/Android

반응형


 

런타임 권한 모델 고려 사항

기존에는 앱에서 요청하는 모든 권한을 허용해야 앱을 사용할 수 있지만 바뀐 방식에서는 필요시 개별적으로 권한 허용하는 방식으로 바뀌었습니다.

앱이 설치될 때 필요한 권한을 요청하는 것이 아니라, 런타임 퍼미션 모델에서는 앱 실행 중에 필요한 권한을 요청해서 권한을 획득하게 됩니다.

 

앱 개발 Target

설명

API 23 이상

·       API 23으로 설정할 경우 당연히 Android Permission을 적용해야 합니다. , 런타임 권한 모델을 적용해야 합니다.

·       GooglePlay를 통해 앱은 바로 설치되며 앱 실행 중에 필요한 권한을 요청합니다.

·       앱 업데이트 시 새로운 권한이 추가되는 경우에도 사용자가 이를 다시 확인해 주지 않아도 앱은 자동으로 업데이트됩니다. 대신, 앱 실행 중 필요한 시점에 사용자에게 권한을 요청하게 됩니다.

·       모든 권한에 대해 처리해야 하는 것은 아니지만  달력, 카메라, 연락처, 위치정보, 마이크, 전화, 센서, 문자, 저장소 등을 사용할 때는 권한 요청 처리를 해야 합니다.

API 23 이하

·       앱이 설치될 때 필요한 권한을 요청합니다.

·       사용자가 GooglePlay를 통해 앱을 설치하기 전에 앱이 요청하는 권한 목록을 확인하고 이를 수락한 경우에만 앱이 설치됩니다.

·       API에 상관 없이 사용자는 언제든 설정을 변경할 수 있습니다.

 

 


 

런타임 권한 모델 (Runtime permissions)

타겟 API 23 이상으로 빌드된 앱이 안드로이드 6.0이상에서 동작하는 경우 런타임 권한 모델을 적용해야 합니다.

안드로이드 6.0부터는 인터넷같은 사용권한은 기본권한에 포함되어 사용자의 동의를 구하지 않아도 되지만, 기기를 제어할 수 있는 권한은 사용자의 동의를 획득해야 합니다.

사용자가 권한에 동의 했어도 시스템 설정 메뉴를 통해 기존 권한을 취소 할 수 있어 이에 따른 퍼미션 관리방안이 필요합니다.

 

 

서포트 라이브러리

앱 내에서 런타임 권한을 요청해야 하는 경우, 하위 호환성 걱정 없이 새로운 API를 사용 할 수 있도록 서포트라이브러리에 관련된 API가 추가 되었습니다.(support-v4 library, revision 23)

메소드

설명

ContextCompat.checkSelfPermission()

·       현재 앱이 특정 권한을 갖고 있는지 체크하는 메소드입니다.

·       특정 권한에 대한 정보를 가져옵니다.

ActivityCompat.requestPermission()

·       사용자에게 권한 요청 팝업창을 표시 하는 메소드입니다.

·       인자로 하나의 권한 permission 또는 권한 그룹Group 를 설정할 수 있습니다. 한 번에 1개가 아닌 String[] 배열로 넘겨 한 번에 필요한 permission을 한 번에 획득할 수 있습니다.

ActivityCompat.shouldShowRequestPermissionRationale()

·       권한 획득이 필요한 이유를 설명해야 할 경우 사용하는 메소드입니다.

·       사용자가 이전에 권한 요청을 거부한 경우에는 true를 반환합니다. 이 경우, 권한 요청을 위한 대화창에는 '다시 묻지 않기' 체크박스와 함께 표시됩니다.

·       사용자가 '다시 묻지 않기'를 선택한 이후에는 앱이  requestPermissions() 메서드를 호출해도 권한 요청 팝업창이 표시되지 않고, 사용자가 해당권한을 거부할 때와 동일 하게 바로 콜백 메소드가 호출됩니다.

onRequestPermissionResult(int, String[], int[])

·       권한 획득에 대한 성공/실패에 대한 정보를 담아 실행되는 callback 메소드입니다.

·       콜백 메소드가 호출될 때 권한은 배열로 전달되므로 필요한 퍼미션이 잘 받아졌는지 확인 후 처리가 가능합니다.

 

 

int checkSelfPermission (Context context, String permission)

https://developer.android.com/reference/android/support/v4/content/ContextCompat.html?utm_campaign=runtime-permissions-827&utm_source=dac&utm_medium=blog#checkSelfPermission(android.content.Context,%20java.lang.String)

 

 

void requestPermissions (Activity activity, String[] permissions, int requestCode)

https://developer.android.com/reference/android/support/v4/app/ActivityCompat.html?utm_campaign=runtime-permissions-827&utm_source=dac&utm_medium=blog#requestPermissions(android.app.Activity,%20java.lang.String[],%20int)

 

 

boolean shouldShowRequestPermissionRationale (Activity activity, String permission)

https://developer.android.com/reference/android/support/v4/app/ActivityCompat.html#shouldShowRequestPermissionRationale(android.app.Activity, java.lang.String)

 

반응형