안드로이드13 알림 권한 수정 및 런타임에서 권한 요청 팝업 뜨게 만드는 방법
안드로이드 13 (안드로이드 SDK 33) 부터 알림 런타임 권한이 추가되면서, 알림 사용 방법에 수정되는 부분이 있습니다.
안드로이드 13 미만 | 안드로이드 13 이상 | ||
첫 게임 설치시 초기 설정 | 알림 권한 허용 | 알림 권한 사용 중지 | |
알림 권한 허용 팝업 | 노출되지 않음 | target sdk 33 미만 | target sdk 33 이상 |
게임 첫 설치 후 실행시 노출 | 따로 설정하지 않으면 노출되지 않음 | ||
manifest 에 알림 권한 추가 | 필요 없음 | 필요 없음 | android.permission.POST_NOTIFICATION |
우선, target SDK 가 33 미만이면서 기존에 알림을 사용하던 어플리케이션은 안드로이드 13 이상을 사용하는 기기에서 게임 설치시 따로 세팅하지 않아도 알림 권한 허용 팝업이 노출됩니다.
이에 따라 어플리케이션이 정상 작동하지 않는 이슈가 있을 수 있으니, 안드로이드 13 기기에서 확인이 꼭 필요합니다.
참고로, 어플리케이션을 설치한 상태로 OS 만 업데이트하는 경우 따로 알림 권한 요청 팝업이 노출되지 않고 기존 알림 권한을 그대로 유지하니 참고 부탁드립니다.
안드로이드 13 이상에서는 런타임에 알림 권한 허용 팝업을 노출하기 위해 새로운 권한을 선언해야합니다.
targetSdkVersion 이 33 이상일 경우에만 해당합니다.
앱 매니페스트 파일에 안드로이드 API 수준 33 에서 새로 생긴 새로운 런타임 권한, POST_NOTIFICATION 을 선언합니다.
<manifest ...>
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
<application ...>
...
</application>
</manifest>
(출처 : 안드로이드 공식 문서)
그 후 알림 권한 팝업을 노출시킬 부분에 코드를 추가합니다.
(아래 코드는 자바로 작성되었으며, 코드 에디터에서 작성된 것이 아니기 때문에 오타나 잘못된 부분이 있을 수 있습니다. 따라서 복사-붙여넣기를 권장하지 않습니다)
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.activity.result.ActivityResultLauncher;
private ActivityResultLauncher<String> activityResultLauncher =
registerForActivityResult(new ActivityResultContracts.RequestPermission(), isGranted -> {
if (isGranted) {
// 유저가 알림 권한을 허용했을 때 동작할 코드 입력
} else {
// 유저가 알림 권한을 허용하지 않았을 때 동작할 코드 입력
}
});
public void RequestNotificationPermission() {
// POST_NOTIFICATIONS 권한은 안드로이드 SDK 33 에서 추가됨
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
if (ContextCompat.checkSelfPermission(context,
Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED){
// 이미 알림 권한을 허용했을때 동작하는 코드
}
else if (ActivityCompat.shouldShowRequestPermissionRationale(activity, Manifest.permission.POST_NOFITICATIONS)){
// 사용자가 권한 요청을 명시적으로 거부한 경우 true
// 유저에게 앱을 사용하기 위해선 권한이 필요하다는 것을 설명해주어야 함
// 사용자가 권한 요청을 처음 보거나, '다시 묻지 않음'을 선택한 경우 false
}
else {
// 권한 요청
activityResultLauncher.launch(android.Manifest.permission.POST_NOTIFICATIONS);
}
}
}
ContextCompat.checkSelfPermission : 특정 권한을 허용했는지 반환
ActivityCompat.shouldShowRequestPermissionRationale : 권한을 요청하기 전에 UI 를 띄워야하는지 반환
androidx.activity.result.ActivityResultLauncher : ActivityResultContract 실행 프로세스를 시작하기 위한 런처
위 방법을 통해 알림 권한을 허용했는지 확인하고, 허용하지 않았다면 알림 권한 허용 팝업을 띄울 수 있습니다.
< 참고 >
안드로이드 알림 런타임 권한 문서 : https://developer.android.com/about/versions/13/changes/notification-permission?hl=ko#use
알림 런타임 권한 | Android 개발자 | Android Developers
알림 런타임 권한 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Android 13(API 수준 33)에서는 앱에서 예외 없는 알림을 보내기 위한 새로운 런타임 권한 POST_
developer.android.com
코드 참고(코틀린) : https://twitter.com/thatfiredev/status/1563147026014957569?s=20&t=483A_N8q-b_fgmAtRZo4zw