Development/Etc.

안드로이드13 알림 권한 수정 및 런타임에서 권한 요청 팝업 뜨게 만드는 방법

alo shark 2022. 9. 15. 21:23

 

안드로이드 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