Notification Channel(알림 채널)은 Android 8.0(API 26)에서 도입된 메커니즘으로, 알림을 카테고리별로 그룹화하고 사용자가 그 동작을 제어할 수 있도록 합니다. 각 채널은 해당 채널을 통해 보냈지는 모든 알림의 중요도 레벨, 음성, 진동 및 시각적 표현을 정의합니다. Android Developers에 따르면, Android 8+에서는 모든 알림에 NotificationChannel이 필수입니다. 이것이 없으면 알림이 표시되지 않습니다.
주요 포인트
Notification Channel은 Android 8+(Oreo)에서 동일한 유형의 알림을 위한 논리적 컨테이너입니다. 개발자가 고유한 ID를 가진 채널을 만들고, 파라미터를 설정한 다음 각 알림을 이 채널을 지정하여 보냉니다. 동일한 채널의 모든 알림은 그 설정을 상속받습니다.
Android 8 이전에는 알림 관리가 이진적이었습니다: 모두 또는 전혀 없음. 사용자는 앱의 모든 알림을 완전히 비활성화하는 것만 가능했습니다. 채널이 이 문제를 해결했습니다: 이제 “광고” 알림은 비활성화하고 “친구로부터의 메시지”는 유지할 수 있습니다.
채널을 만든 후에는 사용자가 설정 → 앱 → 알림을 통해 중요도를 언제든지 변경할 수 있습니다. 개발자는 채널을 만든 후에 프로그래밍으로 중요도를 변경할 수 없습니다. 이것은 Android 보안 제한 사항입니다.
Android 8+에서는 각 알림이 NotificationChannel을 통해 보내지는 어야 합니다. 앱이 채널 없이 알림을 표시하려고 하면, 시스템이 뭉종 무시합니다. 예외는 NotificationCompat을 통한 기본 채널이 있는 알림으로, 이는 라이브러리가 자동으로 만듭니다.
알림 채널은 NotificationChannel 클래스를 통해 만들 때 설정하는 파라미터 집합으로 정의됩니다. 주요 파라미터는 중요도 레벨로, 알림이 사용자와 어떻게 상호작용할지를 결정합니다.
생성 후, 채널은 시스템 알림 설정에 나타납니다. 사용자는 중요도를 변경하거나, 음성을 끄거나, 진동을 끄거나, 채널을 완전히 차단할 수 있습니다. 모든 변경 사항은 그 후의 모든 알림에 즐각 효과를 발휙합니다.
NotificationChannel을 만들 때 다음을 설정할 수 있습니다: 음성(커스텀 또는 시스템), 진동(패턴 및 지속 시간), 조명 지표(LED 색상), 베이지 아이콘(setShowBadge), 잠금 화면(setLockscreenVisibility) 및 방해 하지 않기 모드(setBypassDnd). 이러한 파라미터는 채널이 만들어질 때 고정되며, 후에는 사용자만 변경할 수 있습니다.
중요도 레벨은 채널의 주요 파라미터입니다. 이것은 알림이 소리를 낼지, 화면에 나타날지, 또는 그냥 그림자에 배치될지를 결정합니다. 중요도를 우선순위와 혼동해서는 안 됩니다. 중요도는 채널에서 설정하고, 우선순위(setPriority)는 Android 8+에서 무시됩니다.
| 레벨 | 상수 | 동작 | 소리 |
|---|---|---|---|
| HIGH | IMPORTANCE_HIGH (4) | heads-up 배너 표시, 그림자에 나타남 | 예 |
| DEFAULT | IMPORTANCE_DEFAULT (3) | 그림자에 나타남, heads-up 없음 | 예 |
| LOW | IMPORTANCE_LOW (2) | 소리 없이 그림자에 나타남 | 아니오 |
| MIN | IMPORTANCE_MIN (1) | 그림자에만, 소리 및 진동 없음 | 아니오 |
| NONE | IMPORTANCE_NONE (0) | 전혀 표시되지 않음 | 아니오 |
대부분의 사용자 시나리오에서는 IMPORTANCE_DEFAULT(3)를 사용하세요. 알림이 소리와 함께 그림자에 나타나지만 팝업 배너는 없습니다. IMPORTANCE_HIGH는 극하적인 이벤트에만 사용하세요: 전화 받음, 연락처로부터의 메시지, 타이머 리미더.
채널은 앱이 시작될 때 또는 처음 사용할 때 한 번 만들어집니다. 챜은 실무는 Application.onCreate 메서드에서 앱 시작 시 모든 채널을 만드는 것입니다. 기존 채널을 다시 만드는 것은 안전합니다. 채널이 이미 있으면 Android가 호출을 무시합니다.
class App : Application() {
override fun onCreate() {
super.onCreate()
createNotificationChannels()
}
private fun createNotificationChannels() {
val messagesChannel = NotificationChannel(
CHANNEL_MESSAGES,
"메시지",
NotificationManager.IMPORTANCE_HIGH
).apply {
description = "새 메시지 알림"
enableVibration = true
setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
}
val promoChannel = NotificationChannel(
CHANNEL_PROMO,
"프로모션 및 뉴스",
NotificationManager.IMPORTANCE_LOW
).apply {
description = "마케팅 알림 및 특별 할인"
setShowBadge(false)
}
val manager = getSystemService(NotificationManager::class.java)
manager.createNotificationChannel(messagesChannel)
manager.createNotificationChannel(promoChannel)
}
companion object {
const val CHANNEL_MESSAGES = "messages"
const val CHANNEL_PROMO = "promo"
}
}
알림을 보낼 때는 setChannelId(NotificationCompat의 경우) 또는 Notification.Builder 생성자에서 채널 ID를 지정하세요. 지정된 ID의 채널이 없는 경우 알림이 표시되지 않지만, 에러가 발생하지는 않습니다.
Android는 프로그래밍적 채널 관리를 위한 여러 API를 제공합니다: 목록 가져오기, 삭제 및 현재 설정 확인. 채널을 삭제하면 해당 채널의 모든 알림이 시스템 기록에서 삭제됩니다.
val manager =
getSystemService(NotificationManager::class.java)
// 모든 채널 목록 가져오기
val channels = manager.getNotificationChannels()
channels.forEach { channel ->
Log.d("Channels", "${channel.id}: ${channel.importance}")
}
// 현재 중요도 확인(사용자가 변경했을 수 있음)
val channel = manager.getNotificationChannel(CHANNEL_MESSAGES)
if (channel.importance == NotificationManager.IMPORTANCE_NONE) {
// 사용자가 채널을 비활성화함
suggestEnablingChannel()
}
// 채널 삭제
manager.deleteNotificationChannel(CHANNEL_PROMO)
채널이 만들어진 후에는 개발자가 프로그래밍으로 중요도를 변경할 수 없습니다. 이것은 사용자를 오남용으로부터 보호하기 위한 Android 제한입니다. 채널의 중요도를 변경해야 하는 경우, 다른 ID를 가진 새 채널을 만들고 알림을 마이그레이션하세요.
기존 채널의 중요도를 변경해야 하는 경우, 다른 ID(예: “messages_v2”)를 가진 새 채널을 만들고 그쪽으로 알림을 보내기 시작하세요. 기존 채널은 deleteNotificationChannel을 통해 삭제할 수 있습니다. 해당 채널의 모든 알림이 기록에서 삭제됩니다. 사용자가 설정을 잃지 않도록 앱 인터페이스를 통해 마이그레이션에 대해 사용자에게 경고하세요.
NotificationChannelGroup은 Android 설정 인터페이스에서 여러 채널을 하나의 시각적 그룹으로 결합합니다. 그룹은 앱이 5+ 채널을 사용할 때 사용자의 네비게이션을 돕습니다(예: “소셜”, “시스템”, “마케팅”).
그룹은 createNotificationChannelGroup을 통해 만들어지고 setGroup 메서드를 통해 채널이 만들어질 때 전달됩니다. 그룹을 삭제하면 해당 그룹의 모든 채널도 삭제됩니다. 각 채널은 하나의 그룹에만 속할 수 있습니다.
실무적으로, 채널 그룹은 3개 이상의 채널이 있는 앱에 권장됩니다. 설정에서의 네비게이션을 간소화하고, 사용자가 채널 목록을 이해하지 못하고 한 번에 모든 알림을 비활성화할 가능성을 줄입니다.
그룹은 createNotificationChannelGroup을 통해 고유한 ID와 이름으로 만들어집니다. 그런 다음 setGroup 메서드를 통해 각 채널이 그룹에 할당됩니다. 시스템 설정에서는 그룹이 제목이 있는 섹션으로 표시되며, 그 아래에 해당 그룹의 모든 채널이 나열됩니다. 그룹이 삭제되면 해당 그룹의 모든 채널도 시스템에 의해 복구 가능성 없이 자동으로 삭제됩니다.
올바른 알림 채널 디자인은 사용자 경험과 유지에 직접적으로 영향을 미칩니다. 주요 패턴은 세 가지 중요도 레벨입니다: 메시지와 전화용 입단 채널(IMPORTANCE_HIGH), 일반 알림용 표준(IMPORTANCE_DEFAULT), 마케팅과 뉴스용 조용함(IMPORTANCE_LOW). 이러한 단계는 사용자에게 부담 없이 명확한 선택을 제공합니다.
두 번째 패턴은 기능 모듈별 하나의 채널입니다. 앱의 각 주요 모듈(채팅, 주문, 피드, 마케팅)은 각자의 채널을 가집니다. 5개 이상의 모듈이 있는 경우에는 NotificationChannelGroup로 결합하세요. 시스템 설정에서는 그룹이 접혀지는 항목이 있는 섹션으로 표시됩니다. 이것이 네비게이션을 간소화합니다.
세 번째 패턴은 개발자 채널입니다. 디버그 및 서비스 알림을 위해 IMPORTANCE_MIN을 가진 별도 채널을 만드세요. 사용자는 그림자에서 확인할 수 없지만, 개발자는 adb를 통해 로그를 분석할 수 있습니다. 프로덕션에서는 이 채널을 설정에서 Intent를 통해 삭제하거나 인터페이스에서 숨길 수 있습니다.
너 번째 패턴은 채널 피드백입니다. 인터페이스에서 어떤 채널이 활성화되어 있는지와 현재 중요도가 얼마인지 사용자에게 표시하세요. Android 8+에서는 getNotificationChannel을 통해 채널 상태를 가져온 다음, 채널이 비활성화된 경우 사용자에게 설정을 변경하도록 제안할 수 있습니다. 이것은 앱의 입단 기능에 특히 중요합니다.
자주 묻는 질문
알림이 표시되지 않습니다 그림자에도 트레이에도 표시되지 않습니다. 시스템이 뭉종 notify() 호출을 무시합니다. 예외: NotificationCompat을 사용하면 라이브러리가 기본 채널을 만들지만, 그 중요도는 항상 DEFAULT입니다. 항상 자체 채널을 만들 것을 권장드립니다.
채널의 이름, 설명 및 음성은 변경할 수 있습니다. 중요도는 변경할 수 없습니다. 이 결정은 개발자로부터 시스템에 의해 보호됩니다. 중요도를 높이고 싶다면 다른 ID를 가진 새 채널을 만들고 새 알림에 사용하세요. 사용자는 언제든지 중요도를 변경할 수 있습니다.
getNotificationChannel을 사용하고 중요도를 확인하세요: 값이 IMPORTANCE_NONE이면 채널이 비활성화된 것입니다. Intent를 통해 채널의 시스템 설정을 열 수도 있습니다: Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS에 app_package와 channel_id 파라미터를 함께 사용하세요.
제한이 없습니다 — Android는 채널 수에 제한를 두지 않습니다. 그러나 사용자를 선택으로 부담스럽게 하지 않도록 5~10개 이상의 채널을 만들지 않는 것이 권장됩니다. 최적의 최소는 2~3개입니다: 입단 알림, 일반 알림 및 마케팅 알림.
Android 7.1(API 25) 및 그 이하에서는 채널이 지원되지 않습니다. NotificationChannel 클래스는 API 26부터 사용할 수 있습니다. 하위 호환성을 위해서는 NotificationCompat을 사용하고 채널 생성을 조건문으로 감싸세요: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O).
요약
턴키 방식의 모바일 애플리케이션을 개발해 드립니다
IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.