Android 11의 권한 업데이트

Android 11에서는 사용자가 위치, 마이크, 카메라에 관해 더욱 세분화된 권한을 지정할 수 있습니다. 또한 시스템은 Android 11을 타겟팅하는 사용하지 않는 앱의 권한을 재설정하며 앱은 전화번호와 관련된 정보를 읽을 경우 선언하는 권한을 업데이트해야 할 수 있습니다.

Google은 항상 소중한 의견에 귀 기울이고 있습니다. 이 간단한 설문조사를 통해 기능 사용 방식을 알려주세요. 특히 이 기능의 영향을 받은 사용 사례에 관해 알려주세요.

일회성 권한

Android 11에서는 앱이 위치, 마이크 또는 카메라와 관련된 권한을 요청할 때마다 사용자에게 표시되는 권한 대화상자에 이번만 허용이라는 옵션이 포함됩니다. 사용자가 대화상자에서 이 옵션을 선택하면 임시 일회성 권한이 앱에 부여됩니다.

그러면 앱의 동작과 사용자의 작업에 따라 일정 시간 관련 데이터에 액세스할 수 있습니다.

  • 앱의 활동이 표시되는 동안 앱에서 데이터에 액세스할 수 있습니다.
  • 사용자가 앱을 백그라운드로 가져오면 앱에서 짧은 시간 데이터에 계속 액세스할 수 있습니다.
  • 활동이 표시되는 동안 포그라운드 서비스가 실행되고 사용자가 앱을 백그라운드로 이동하면 포그라운드 서비스가 중지될 때까지 앱에서 데이터에 계속 액세스할 수 있습니다.
  • 사용자가 일회성 권한을 취소하면(예: 시스템 설정에서) 포그라운드 서비스 실행 여부와 상관없이 앱에서 데이터에 액세스할 수 없습니다. 다른 권한과 마찬가지로 사용자가 앱의 일회성 권한을 취소하면 앱의 프로세스가 종료됩니다.

사용자가 다음에 앱을 열고 앱의 기능에서 위치, 마이크 또는 카메라의 액세스 권한을 요청하면 사용자에게 다시 권한을 요청하는 메시지가 표시됩니다.

사용하지 않는 앱의 권한 자동 재설정

앱이 Android 11을 타겟팅하고 몇 달 동안 사용되지 않은 경우 시스템에서는 사용자가 앱에 부여한 민감한 런타임 권한을 자동으로 재설정하여 사용자 데이터를 보호합니다. 이 작업은 사용자가 시스템 설정에서 권한을 확인하고 앱의 액세스 수준을 거부로 변경한 것과 같은 효과를 발휘합니다. 앱이 런타임 시 권한 요청 권장사항을 준수하면 앱을 변경할 필요가 없습니다. 사용자가 앱의 기능과 상호작용할 때 기능에 필요한 권한이 있는지 확인해야 하기 때문입니다.

사용자에게 자동 재설정 사용 중지 요청

필요한 경우 사용자에게 시스템이 앱 권한을 재설정하는 것을 방지하라고 요청할 수 있습니다. 이는 다음 사용 사례와 같이 사용자가 앱과 상호작용하지 않아도 백그라운드에서 앱이 주로 작동한다고 사용자가 예상하는 상황에서 유용합니다.

그림 1. 사용자가 특정 앱의 권한 자동 재설정을 사용 중지함
  • 가족의 안전 제공
  • 데이터 동기화
  • 스마트 기기와 통신
  • 호환 기기와 페어링

사용자를 시스템 설정의 앱 페이지로 안내하려면 Settings.ACTION_APPLICATION_DETAILS_SETTINGS 인텐트 작업이 포함된 인텐트를 호출합니다. 이 화면에서 사용자는 다음을 실행하여 시스템이 앱 권한을 재설정하는 것을 방지할 수 있습니다.

  1. 권한을 탭하면 앱 권한 설정 화면이 로드됩니다.
  2. 그림 1과 같이 앱이 사용되지 않는 경우 권한 삭제 옵션을 사용 중지합니다.

자동 재설정의 사용 중지 여부 확인

앱에 자동 재설정 기능이 사용 중지되어 있는지 확인하려면 isAutoRevokeWhitelisted()를 호출합니다. 이 메서드가 true를 반환하면 시스템에서 앱 권한을 자동 재설정하지 않습니다.

자동 재설정 기능 테스트

시스템에서 앱 권한을 재설정하는지 확인하려면 다음을 실행하세요.

  1. 시스템이 앱 권한을 재설정하려고 대기하는 기본 시간을 저장합니다. 이렇게 하면 테스트 후 복원할 수 있습니다.

    threshold=$(adb shell device_config get permissions \
      auto_revoke_unused_threshold_millis2)
    
  2. 시스템이 권한을 재설정하려고 대기하는 시간을 줄입니다. 다음 예에서는 앱과의 상호작용을 중지한 단 1초 후에 앱 권한을 재설정하도록 시스템을 수정합니다.

    adb shell device_config put permissions \
      auto_revoke_unused_threshold_millis2 1000
    
  3. 다음 스니펫과 같이 자동 재설정 프로세스를 수동으로 호출합니다. 이 명령어를 실행하기 전에 테스트 기기가 약 45초 동안 켜져 있어야 합니다.

    adb shell cmd jobscheduler run -u 0 -f \
      com.google.android.permissioncontroller 2
    
  4. 앱에서 자동 재설정 이벤트를 처리할 수 있는지 확인합니다.

  5. 시스템이 앱 권한을 자동 재설정하기 전에 대기하는 기본 시간을 복원합니다.

    adb shell device_config put permissions \
      auto_revoke_unused_threshold_millis2 $threshold
    

권한 대화상자 공개 상태

Android 11에서는 사용자가 거부를 선택한 권한을 요청하지 않는 것이 좋습니다. 사용자가 앱이 기기에 설치된 전체 기간 동안 특정 권한에 거부를 반복적으로 탭하면 이 작업은 '다시 묻지 않음'을 의미합니다.

앱이 이미 권한 관련 권장사항을 준수하면 이 동작 변경사항을 지원하도록 앱을 변경할 필요가 없습니다.

전화번호

Android 11에서는 앱에서 전화번호를 읽을 때 사용하는 전화 관련 권한이 변경됩니다.

앱이 Android 11을 타겟팅하고 다음 목록에 표시된 전화번호 API에 액세스해야 하는 경우 READ_PHONE_STATE 권한 대신 READ_PHONE_NUMBERS 권한을 요청해야 합니다.

앱에서 READ_PHONE_STATE를 선언하여 이전 목록의 메서드 이외의 메서드를 호출하는 경우 모든 Android 버전에서 READ_PHONE_STATE를 계속 요청할 수 있습니다. 그러나 이전 목록의 메서드에만 READ_PHONE_STATE 권한을 사용하는 경우 다음과 같이 매니페스트 파일을 업데이트하세요.

  1. 앱이 Android 10(API 수준 29) 이하에서만 권한을 사용하도록 READ_PHONE_STATE 선언을 변경합니다.
  2. READ_PHONE_NUMBERS 권한을 추가합니다.

다음 매니페스트 선언 스니펫이 이 프로세스를 보여줍니다.

<manifest>
    <!-- Grants the READ_PHONE_STATE permission only on devices that run
         Android 10 (API level 29) and lower. -->
    <uses-permission android:name="READ_PHONE_STATE"
                     android:maxSdkVersion="29" />
    <uses-permission android:name="READ_PHONE_NUMBERS" />
</manifest>