런타임 권한 요청

토마스·2023년 5월 8일
0

기본 원칙

  • 사용자가 권한이 필요한 기능과 상호작용하기 시작할 때 컨텍스트에 따라 권한을 요청한다.
  • 사용자를 차단하지 않는다. 교육용 UI 흐름(예: 권한 요청의 근거를 설명하는 흐름)을 취소하는 옵션을 항상 제공한다.
  • 사용자가 기능에 필요한 권한을 거부하거나 취소하면 권한이 필요한 기능을 사용 중지하는 등의 방법으로 앱의 성능을 단계적으로 저하시켜 사용자가 앱을 계속 사용할 수 있도록 한다.
  • 시스템 동작을 가정하지 않는다. 예를 들어 동일한 권한 그룹에 권한이 표시된다고 가정하면 안된다. 권한 그룹은 앱이 밀접하게 관련된 권한을 요청할 때 시스템에서 사용자에게 표시하는 시스템 대화상자의 수를 최소화하는 데만 도움이 된다.

권한 요청 워크플로

앱에서 런타임 권한을 선언하고 요청하기 전에 앱에서 이런 작업이 필요한지 평가해야 한다. 개발자는 어떤 권한도 선언할 필요 없이 앱에서 사진 찍기, 미디어 재생 일시중지, 관련 광고 표시 등 여러 사용 사례를 실행할 수 있다.

앱에서 런타임 권한을 선언하고 요청해야 한다고 판단되면 다음 단계를 완료해야 한다.

  1. 앱의 매니페스트 파일에서 앱이 요청할 필요가 있을 권한을 선언한다.
  2. 앱의 특정 작업이 알맞은 런타임 권한과 연결되도록 앱의 UX를 설계한다. 앱이 비공개 사용자 데이터에 액세스하도록 권한을 부여해야 할 수 있는 작업을 사용자에게 알린다.
  3. 특정 비공개 사용자 데이터에 액세스해야 하는 앱의 작업을 사용자가 호출할 때까지 기다린다. 이때 앱은 데이터에 액세스하는 데 필요한 런타임 권한을 요청할 수 있다.
  4. 사용자가 이미 앱에 필요한 런타임 권한을 부여했는지 확인한다. 부여했다면 앱에서 비공개 사용자 데이터에 액세스할 수 있습니다. 부여하지 않았다면 다음 단계로 이동한다.
    런타임 권한이 필요한 작업을 실행할 때마다 권한이 있는지 확인해야 한다.
  5. 사용자에게 앱에서 근거를 표시해야 하는지 확인한다. 여기서 앱이 사용자에게 특정 런타임 권한을 요청하는 이유를 설명한다. 시스템에서 앱이 근거를 표시하지 않아야 한다고 판단하면 UI 요소를 표시하지 않고 다음 단계로 바로 진행한다.
    그러나 시스템에서 앱이 근거를 표시해야 한다고 판단하면 사용자에게 근거를 UI 요소로 표시한다. 이러한 근거를 통해 앱이 액세스하려는 데이터가 무엇인지, 런타임 권한을 부여하면 앱이 사용자에게 제공할 수 있는 이점이 무엇인지 명확하게 설명해야 한다. 사용자가 근거를 확인한 후 다음 단계를 진행한다.
  6. 앱에서 비공개 사용자 데이터에 액세스하는 데 필요한 런타임 권한을 요청한다. 아래 그림과 같은 런타임 권한 메시지가 시스템에 표시된다.
  7. 런타임 권한 부여를 선택했는지 또는 거부를 선택했는지 사용자의 응답을 확인한다.
  8. 사용자가 앱에 권한을 부여하면 비공개 사용자 데이터에 액세스할 수 있다. 사용자가 권한을 거부하면 권한으로 보호되는 정보 없이도 사용자에게 기능을 제공하도록 앱 환경의 성능을 단계적으로 저하한다.

아래 그림은 이 프로세스와 관련된 워크플로 및 일련의 의사 결정 사항을 보여준다.

권한 요청 시 주의할 점

Android 11(API 수준 30)부터 사용자가 앱이 기기에 설치된 전체 기간 동안 특정 권한에 관해 거부를 두 번 이상 탭하면 앱에서 그 권한을 다시 요청하는 경우 사용자에게 시스템 권한 대화상자가 표시되지 않는다. 이러한 사용자의 작업은 '다시 묻지 않음'을 의미한다. 이전 버전에서는 사용자가 이전에 '다시 묻지 않음' 체크박스 또는 옵션을 선택한 경우를 제외하고 앱에서 권한을 요청할 때마다 사용자에게 시스템 권한 대화상자가 표시되었다.

사용자가 권한 요청을 두 번 이상 거부하면 영구 거부로 간주된다. 따라서 사용자가 특정 기능에 액세스해야 하는 경우에만 권한을 요청하는 것이 매우 중요하다. 그러지 않으면 의도와 달리 권한을 다시 요청하지 못하게 될 수 있다.

profile
안드로이드 개발자 지망생

0개의 댓글