Today's

길을 나서지 않으면 그 길에서 만날 수 있는 사람을 만날 수 없다

모바일 앱(안드로이드)

Jetpack Compose에서 알림 권한 요청과 알림 표시하기

Billcorea 2025. 2. 3. 15:36
반응형

Jetpack Compose에서 알림 권한 요청과 알림 표시하기

Android 13(Tiramisu, API 33) 이상에서는 사용자가 알림을 수신하기 전에 POST_NOTIFICATIONS 권한을 요청해야 합니다. Jetpack Compose를 사용하여 권한을 확인하고 요청하는 방법을 알아보겠습니다.

1. 프로젝트 설정

먼저, build.gradle 파일에 필요한 의존성을 추가합니다:

dependencies {
    implementation "androidx.core:core-ktx:1.9.0"
    implementation "androidx.compose.ui:ui:1.3.3"
    implementation "androidx.compose.material:material:1.3.1"
    implementation "androidx.compose.ui:ui-tooling-preview:1.3.3"
    implementation "androidx.activity:activity-compose:1.6.1"
}

2. 권한 확인 및 요청

다음은 Jetpack Compose를 사용하여 POST_NOTIFICATIONS 권한을 확인하고 요청하는 예제입니다:

 
import android.Manifest
import android.content.pm.PackageManager
import android.os.Build
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.foundation.layout.*
import androidx.compose.material.Button
import androidx.compose.material.Text
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.core.content.ContextCompat
import androidx.core.content.PermissionChecker

class MainActivity : ComponentActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContent {
            RequestNotificationPermission()
        }
    }

    @Composable
    fun RequestNotificationPermission() {
        val permissionState = remember { mutableStateOf(checkNotificationPermission()) }

        val requestPermissionLauncher =
            rememberLauncherForActivityResult(ActivityResultContracts.RequestPermission()) { isGranted ->
                permissionState.value = isGranted
            }

        if (permissionState.value) {
            Text("Notification permission granted")
        } else {
            Column(
                modifier = Modifier.fillMaxSize(),
                horizontalAlignment = Alignment.CenterHorizontally,
                verticalArrangement = Arrangement.Center
            ) {
                Text("Notification permission is required")
                Spacer(modifier = Modifier.height(16.dp))
                Button(onClick = {
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
                        requestPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
                    }
                }) {
                    Text("Request Permission")
                }
            }
        }
    }

    private fun checkNotificationPermission(): Boolean {
        return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
            ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED
        } else {
            true
        }
    }
}

3. 알림 생성 및 표시

권한을 얻은 후, 알림을 생성하고 표시하는 방법을 살펴보겠습니다:

import android.app.NotificationChannel
import android.app.NotificationManager
import android.os.Build
import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat

fun showNotification(context: Context) {
    // 알림 채널 설정 (Android 8.0 이상)
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        val channelId = "your_channel_id"
        val channelName = "Your Channel Name"
        val importance = NotificationManager.IMPORTANCE_DEFAULT
        val channel = NotificationChannel(channelId, channelName, importance).apply {
            description = "Your Channel Description"
        }
        val notificationManager: NotificationManager = context.getSystemService(NotificationManager::class.java)
        notificationManager.createNotificationChannel(channel)
    }

    // 알림 생성
    val builder = NotificationCompat.Builder(context, "your_channel_id")
        .setSmallIcon(R.drawable.notification_icon)
        .setContentTitle("Your Notification Title")
        .setContentText("Your Notification Content")
        .setPriority(NotificationCompat.PRIORITY_HIGH)

    // 알림 표시
    with(NotificationManagerCompat.from(context)) {
        notify(1, builder.build())
    }
}

결론

이 글에서는 Jetpack Compose를 사용하여 Android 13 이상에서 POST_NOTIFICATIONS 권한을 요청하고 알림을 표시하는 방법을 알아보았습니다. 권한 관리와 알림 생성은 사용자 경험을 향상시키는 중요한 요소입니다. 이를 통해 더 나은 사용자 경험을 제공할 수 있습니다.

 

알림 도착 예시

 

반응형