ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 안드로이드13 알림 권한 수정 및 런타임에서 권한 요청 팝업 뜨게 만드는 방법
    Development/Etc. 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

     

    댓글

Designed by Tistory.