본문 바로가기

IT/Android

안드로이드 스튜디오 / targetSdk33 알림 권한 요청

반응형

기존 안드로이드12 이하는 알림 권한 기본값이 활성화였는데, 안드로이드13부터는 기본값이 비활성화라고 한다. 

따라서 Notification 권한을 요청하거나, 사용자가 직접 알림 설정에 들어가서 활성화를 해야 한다.

Notification권한은 targetSdk33이상에서만 권한 추가 요청이 가능하다.

 

targetSdk31로 되어 있던 프로젝트를 targetSdk33으로 올리기로 하였다. (진작했어야했는데...)

그리고, 알림 설정 팝업을 띄워주는 코드를 추가하였다.

 

1. build.gradle 에서 targettSdk33, compileSdk33으로 변경

2. manifest 에서 POST_NOTIFICATION 퍼미션 추가

<uses-permission android:name="android.permission.POST_NOTIFICATION"/>

 

다행히 크게 변경할 코드가 없어서 sync만 맞춰주었다.

3. 알림권한이 설정되어있지 않으면 알림 권한 요청을 한다. (안드로이드 13이상인 경우)

if ( // 알림 권한 없을 경우
    ContextCompat.checkSelfPermission(
        requireContext(),
        Manifest.permission.POST_NOTIFICATIONS
    ) != PackageManager.PERMISSION_GRANTED
) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
        requestNotificationPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
    } else {
        // 안드로이드 12 이하는 알림에 런타임 퍼미션X
        viewModel.getSettingInfo()
    }
}else{
    // 권한요청X
}

4. 알림권한을 허용하지 않을 경우 시스템 설정페이지로 이동시키는 다이얼로그를 띄운다. (사전에 커스텀해놓은 다이얼로그 창 사용)

private val requestNotificationPermissionLauncher =
    registerForActivityResult(
        ActivityResultContracts.RequestPermission()
    ) { ok ->
        if (ok) {
            // 알림권한 허용 o
        } else {
            // 알림권한 허용 x. -> 설정페이지로 넘어가는 다이얼로그 띄우기 
            CustomDialog(DialogTextType.REQUEST_SETTING_ON,
                listener = object : DialogClickListener {
                    override fun positiveAct() {
                        val intent = Intent()
                        intent.action = Settings.ACTION_APP_NOTIFICATION_SETTINGS
                        intent.putExtra(Settings.EXTRA_APP_PACKAGE, context!!.packageName)
                        intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
                        startActivity(intent)
                        isNotFirst = true
                    }
                }).show(requireActivity().supportFragmentManager, "")

        }
    }

 

참고

https://nosorae.tistory.com/entry/AndroidKotlin-%EB%94%B1-%EC%A0%95%EB%A6%AC%ED%95%B4-targetSdk-33-%ED%9B%84-%EC%95%8C%EB%A6%BC-%EA%B6%8C%ED%95%9C%EC%9A%94%EC%B2%AD-Feat-%ED%91%B8%EC%8B%9C-%EC%98%B5%ED%8A%B8%EC%9D%B8-%EC%9E%91%EC%97%85

 

[Android/Kotlin] 딱 정리해, targetSdk 33 후 알림 권한요청 (Feat. 푸시 옵트인 작업)

안드로이드 13 이 등장하면서 targetSdk 버전을 올리는 것에 대해 고민이 많아졌다. 세분화된 미디어 권한이나, 구글 플레이 서비스 광고 ID 설정, 포그라운드 서비스, 알림 등등이다. 그 중에서 오

nosorae.tistory.com

https://developer.android.com/develop/ui/views/notifications/notification-permission

 

Notification runtime permission  |  Android Developers

Notification runtime permission Stay organized with collections Save and categorize content based on your preferences. Android 13 (API level 33) and higher supports a runtime permission for sending non-exempt (including Foreground Services (FGS)) notific

developer.android.com