오늘은 알림(Notificatio)을 알아볼까 합니다

알림은 사용자에게 미리 알림을 주고 다른 사람과의 소통을 가능하게 하며 앱에서 보내는 기타 정보를 적시에 제공하기 위해 Android가 앱의 UI 외부에 표시하는 메시지입니다. 사용자는 알림을 탭 하여 앱을 열거나 알림에서 바로 특정 작업을 실행할 수 있습니다.

공식 안드로이드 docs를 보면 알림을 이렇게 설명하고 있습니다. 알림은 여러 방식으로 사용자에게 여러 정보들을 표시하거나 동작(event)들을 수행할 수 있게 해 줍니다. 

 

기존에 안드로이드에서는 알림 채널을 따로 만들어 줄 필요 없이 알림을 구현할 수 있었지만 안드로이드 API26 오레오 버전부터는 따로 Notification Channel을 추가를 해줘야 합니다. 

 

이처럼 Notification에 Channel이 추가된 이유는 소규모 애플리케이션에서 대규모 애플리케이션이 되면서 앱에서도 여러 종류의 알림이 생겨났습니다. 이경우 앱에서 알림을 끄게 될 경우 모든 알림이 꺼지게 됩니다. 그렇다면 지금처럼 채널이 생기면 어떻게 될까요? 보고 싶은 알림만 켜놓을 수 있게 됩니다. 

 

private const val NOTIFICATION_ID = 11
private const val CHANNEL_ID = "default"
//.....
notificationImgaeView.setOnClickListener {
    //todo 알림 기능
    val manager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
    val builder: NotificationCompat.Builder

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // Android 8.0
        val channel = NotificationChannel(
            CHANNEL_ID, "default channel",
            NotificationManager.IMPORTANCE_DEFAULT
        ).apply {
            description = "description text of this channel."
            setShowBadge(true)
            val uri: Uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)
            val audioAttributes = AudioAttributes.Builder()
                .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
                .setUsage(AudioAttributes.USAGE_ALARM)
                .build()
            setSound(uri, audioAttributes)
            enableVibration(true)
        }
        // 채널을 NotificationManager에 등록
        manager.createNotificationChannel(channel)

        builder = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID)
    } else {
        builder = NotificationCompat.Builder(this@MainActivity)
    }

    builder.run {
        setSmallIcon(R.mipmap.ic_launcher)
        setWhen(System.currentTimeMillis())
        setContentTitle("키워드 알림")
        setContentText("설정한 키워드에 대한 알림이 도착했습니다!!")
        setStyle(
            NotificationCompat.BigTextStyle()
                .bigText("설정한 키워드에 대한 알림이 도착했습니다!!")
        )
    }

    manager.notify(NOTIFICATION_ID, builder.build())
}

위 코드는 알림을 만드는 코드입니다. 이 코드를 보면 알림 ID와  채널 ID가 있을 것입니다. 위에서 채널은 배웠으니 알 것입니다. 그렇다면 알림은 무엇일까요? 말 그대로 알림의 고유 키값입니다.

 만약 같은 키값으로 준다고 하고 서로 다른 제목을 가진 알림을 호출한다면 가장 마지막으로 준 알림만 보일 것입니다.

반대로 서로 다른 키를 가진다면 이렇게 각각의

반대로 서로 다른 키를 가진다면 이렇게 각각의 알림으로 따로 보입니다. 이처럼 상황에 맞게 아이디값들을 쓴다면 더욱 좋은 앱을 만들 수 있을 것 같습니다.


참고

https://developer.android.com/guide/topics/ui/notifiers/notifications?hl=ko 

 

알림 개요  |  Android 개발자  |  Android Developers

알림 개요 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 알림은 사용자에게 미리 알림을 주고 다른 사람과의 소통을 가능하게 하며 앱에서 보내는 기타 정

developer.android.com

https://velog.io/@thevlakk/Android-Notification-ID%EC%99%80-Channel-ID-%EC%B0%A8%EC%9D%B4

 

[Android] Notification, Channel, Group 차이

ID가 다르면 어떻게 될까

velog.io

 

+ Recent posts