Android 13(API 수준 33) 이상에서는 앱에서의 예외 없는(포그라운드 서비스 포함) 알림 전송을 위한 런타임 권한을 지원합니다.
POST_NOTIFICATIONS
이 변경사항으로 인해 사용자는 가장 중요한 알림에 주목할 수 있습니다.
이 기능의 추가적인 제어 기능과 유연성을 이용할 수 있도록 가급적 빠른 시일 내에 Android 13 이상을 타겟팅할 것을 적극 권장합니다. 12L(API 수준 32) 이하를 계속 타겟팅하면 앱 기능의 컨텍스트에서 권한을 요청할 수 있는 유연성을 일부 잃게 됩니다.
권한 선언
앱에서 새 알림 권한을 요청하려면 앱이 Android 13을 타겟팅하도록 업데이트하고, 아래의 섹션에서 설명하는 것처럼 다른 런타임 권한을 요청하는 것과 비슷한 프로세스를 완료하세요.
앱의 매니페스트 파일에서 선언해야 하는 권한은 다음과 같은 코드 스니펫으로 표시됩니다.
<manifest ...> <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> <application ...> ... </application> </manifest>
권한 대화상자에서의 사용자 동작에 따른 앱 기능
사용자는 권한 대화상자에서 다음과 같은 동작을 취할 수 있습니다.
- 허용을 선택합니다.
- 허용 안함을 선택합니다.
- 어떤 버튼도 누르지 않고 대화상자를 스와이프하여 없앱니다.
이어지는 섹션에서는 사용자가 취하는 동작에 따른 앱의 동작을 설명합니다.
사용자가 '허용'을 선택함
사용자가 허용 옵션을 선택하면 앱에서 다음을 할 수 있습니다.
- 알림을 보냅니다. 모든 알림 채널이 허용됩니다.
- 포그라운드 서비스와 관련된 알림을 게시합니다. 이러한 알림은 알림 창에 표시됩니다.
사용자가 '허용 안함'을 선택함
사용자가 허용 안함 옵션을 선택하면 앱이 예외에 해당하지 않는 한 알림을 보낼 수 없습니다. 몇 가지 특정 역할을 제외하고는 모든 알림 채널이 차단됩니다. 이는 사용자가 시스템 설정에서 앱의 모든 알림을 수동으로 사용 중지하는 경우에 발생하는 동작과 비슷합니다.
주의: 12L 이하를 타겟팅하는 앱에서 사용자가 한 번이라도 허용 안함을 탭한 경우 다음 중 하나가 발생할 때까지 알림이 다시 표시되지 않습니다.
- 사용자가 앱을 제거한 후 재설치합니다.
- Android 13 이상을 타겟팅하도록 앱을 업데이트합니다.
사용자가 대화상자를 스와이프하여 없앰
사용자가 대화상자를 스와이프하여 없애면, 즉 허용 또는 허용 안함을 선택하지 않으면 알림 권한의 상태가 변경되지 않습니다.
새로 설치된 앱에 미치는 영향
사용자가 Android 13 이상을 실행하는 기기에 앱을 설치하면 앱의 알림이 기본적으로 사용 중지됩니다. 개발자가 새 권한을 요청하고 사용자가 앱에 권한을 부여한 후에 앱이 알림을 보낼 수 있습니다.
권한 대화상자가 표시되는 시점은 앱의 타겟 SDK 버전에 따라 달라집니다.
- 앱이 Android 13 이상을 타겟팅하는 경우 권한 대화상자가 표시되는 시점을 완전히 제어할 수 있습니다. 이 기회를 사용하여 사용자에게 앱에 이 권한이 필요한 이유를 설명하고 권한을 부여하도록 권장하세요.
- 앱이 12L(API 수준 32) 이하를 타겟팅한다면 알림 채널을 만든 후 처음 앱에서 활동이 시작될 때 또는 앱에서 활동이 시작된 후 첫 번째 알림 채널이 만들어질 때 시스템에서 권한 대화상자를 표시합니다. 이 시점은 보통 앱 시작 시점과 동일합니다.
기존 앱 업데이트에 미치는 영향
알림 권한과 관련된 중단을 최소화하기 위해 시스템은 사용자가 기기를 Android 13 이상으로 업그레이드할 때 모든 대상 앱에 권한을 자동으로 사전 부여합니다. 즉, 이러한 앱은 사용자에게 계속 알림을 보낼 수 있으며 사용자에게는 런타임 권한 메시지가 표시되지 않습니다.
권한 사전 부여 자격요건
앱이 자동 사전 부여의 대상이 되려면 기존 알림 채널이 있어야 하며 12L 이하를 실행하는 기기에서 사용자가 명시적으로 알림을 사용 중지하지 않았어야 합니다.
사용자가 12L 이하를 실행하는 기기에서 앱의 알림을 사용 중지했다면 기기가 Android 13 이상으로 업그레이드된 후에도 이 거부가 지속됩니다.
예외
이 섹션은 알림 권한 동작 변경사항이 적용되지 않는 알림과 앱에 관해 설명합니다. Android 13 (API 수준 33) 이상에서 사용자가 알림 권한을 거부하더라도 작업 관리자에서는 포그라운드 서비스와 관련된 알림을 계속 볼 수 있지만 알림 창에는 표시되지 않습니다.
미디어 세션
미디어 세션과 관련된 알림은 이 동작 변경사항에서 제외됩니다.
전화 통화를 자체 관리하도록 구성된 앱
앱이 전화 통화를 자체 관리하도록 구성된다면 앱에서 Notification.CallStyle
알림 스타일을 사용하는 알림을 전송하기 위해 POST_NOTIFICATIONS
권한이 필요하지 않습니다.
시스템에서는 앱이 다음 각 작업을 실행하는 경우 앱이 전화 통화를 자체 관리하도록 구성된 것으로 간주합니다.
MANAGE_OWN_CALLS
권한을 선언합니다.ConnectionService
인터페이스를 구현합니다.registerPhoneAccount()
를 호출하여 기기의 통신사에 등록합니다.
앱 테스트
Android 13 이상을 실행하는 기기에서 처음 사용할 때 알림 권한이 앱에 미치는 영향을 평가할 수 있습니다. 다음과 같은 Android 디버그 브리지 (ADB) 명령어를 사용하면 테스트 기기를 재설정하지 않고도 사용자 선택 및 기기 업그레이드의 가장 일반적인 시퀀스를 시뮬레이션할 수 있습니다.
앱이 Android 13 이상을 실행하는 기기에 새로 설치되는 경우:
adb shell pm revoke PACKAGE_NAME android.permission.POST_NOTIFICATIONS
adb shell pm clear-permission-flags PACKAGE_NAME \ android.permission.POST_NOTIFICATIONS user-set
adb shell pm clear-permission-flags PACKAGE_NAME \ android.permission.POST_NOTIFICATIONS user-fixed
앱이 12L 이하를 실행하는 기기에 설치되고 사용자가 알림을 사용 설정된 상태로 유지하다가 기기를 Android 13 이상으로 업그레이드하는 경우:
adb shell pm grant PACKAGE_NAME android.permission.POST_NOTIFICATIONS
adb shell pm set-permission-flags PACKAGE_NAME \ android.permission.POST_NOTIFICATIONS user-set
adb shell pm clear-permission-flags PACKAGE_NAME \ android.permission.POST_NOTIFICATIONS user-fixed
앱이 12L 이하를 실행하는 기기에 설치되고 사용자가 수동으로 알림을 사용 중지한 상태에서 기기를 Android 13 이상으로 업그레이드하는 경우:
adb shell pm revoke PACKAGE_NAME android.permission.POST_NOTIFICATIONS
adb shell pm set-permission-flags PACKAGE_NAME \ android.permission.POST_NOTIFICATIONS user-set
adb shell pm clear-permission-flags PACKAGE_NAME \ android.permission.POST_NOTIFICATIONS user-fixed
권장사항
이 섹션에서는 앱에서 새 알림 권한을 가장 효과적으로 사용할 수 있는 몇 가지 방법을 설명합니다.
앱의 타겟 SDK 버전 업데이트
앱이 권한 대화상자가 표시되는 시점을 보다 유연하게 제어할 수 있도록 하려면 앱이 Android 13 이상을 타겟팅하도록 업데이트하세요.
조금 기다린 후에 알림 권한 메시지 표시
사용자에게 권한 부여를 요청하기 전에 먼저 사용자가 앱에 익숙해질 기회를 제공하세요.
신규 사용자는 앱을 살펴보고 개별 알림 요청의 이점을 알아보고 싶어 할 수 있습니다. 특정 사용자 동작이 실행되면 권한 메시지가 트리거되도록 설정할 수 있습니다. 다음은 알림 권한 메시지를 표시하기에 좋은 몇 가지 예입니다.
- 사용자가 '알림 종' 버튼을 탭합니다.
- 사용자가 다른 사람의 소셜 미디어 계정을 팔로우합니다.
- 사용자가 음식 배달 주문을 제출합니다.
그림 1에서는 알림 권한 요청의 권장 워크플로를 보여줍니다. shouldShowRequestPermissionRationale()
이 true
를 반환하지 않는 한 앱은 제목 텍스트가 '알림 받기'인 중간 화면을 표시할 필요가 없습니다.
또는 사용자가 앱에 익숙해질 수 있도록 한 후 표시되도록 요청을 설정할 수 있습니다. 예를 들어 사용자가 앱을 3~4회 실행할 때까지 기다릴 수 있습니다.
컨텍스트 내에서 권한 요청
앱에서 알림 권한을 요청할 때는 알림의 용도와 사용자가 동의해야 하는 이유를 명확히 알 수 있도록 올바른 컨텍스트 내에서 요청해야 합니다. 예를 들어, 이메일 앱의 경우 모든 새로운 이메일의 알림을 보내는 옵션 또는 사용자가 유일한 받는 사람인 이메일의 알림만 보내는 옵션을 포함할 수 있습니다.
이 기회를 통해 알림의 의도를 투명하게 공개하면 사용자가 앱에 알림 권한을 부여할 가능성이 커집니다.
앱에서 알림을 보낼 수 있는지 확인
앱에서 알림을 보내기 전에 사용자가 앱의 알림을 사용 설정했는지 확인합니다. 이렇게 하려면 areNotificationsEnabled()
를 호출하세요.
책임감 있게 권한 사용
알림 보내기 승인을 받았다면 권한을 책임 있게 사용해야 합니다. 사용자는 앱이 보내는 일일 알림 수를 확인할 수 있으며 언제든지 권한을 취소할 수 있습니다.