Notification Channel (canal de notificaciones) es un mecanismo de Android, introducido en la versión 8.0 (API 26), que agrupa las notificaciones por categorías y le da al usuario control sobre su comportamiento. Cada canal define el nivel de importancia, sonido, vibración y apariencia visual para todas las notificaciones enviadas a través de él. Según Android Developers, NotificationChannel es obligatorio para todas las notificaciones en Android 8+ — sin él, las notificaciones no se muestran.
Puntos clave
Notification Channel es un contenedor lógico para notificaciones del mismo tipo en Android 8+ (Oreo). El desarrollador crea un canal con un ID único, establece sus parámetros y luego envía cada notificación especificando este canal. Todas las notificaciones en un mismo canal heredan su configuración.
Antes de Android 8, la gestión de notificaciones era binaria: todo o nada. El usuario solo podía desactivar completamente todas las notificaciones de la aplicación. Los canales resolvieron este problema: ahora se pueden desactivar las notificaciones “publicitarias” pero mantener los “mensajes de amigos.”
Después de crear un canal, su importancia puede ser cambiada por el usuario en cualquier momento a través de Configuración → Aplicaciones → Notificaciones. El desarrollador no puede cambiar la importancia mediante programación después de crear el canal — esta es una restricción de seguridad de Android.
En Android 8+, cada notificación debe enviarse a través de un NotificationChannel. Si una aplicación intenta mostrar una notificación sin canal, el sistema la ignora silenciosamente. La excepción son las notificaciones a través de NotificationCompat con un canal predeterminado, que la biblioteca crea automáticamente.
Un canal de notificación se define mediante un conjunto de parámetros que se establecen al crearlo a través de la clase NotificationChannel. El parámetro principal es el nivel de importancia, que determina cómo la notificación interactúa con el usuario.
Después de la creación, el canal aparece en la configuración de notificaciones del sistema. El usuario puede cambiar la importancia, desactivar el sonido, la vibración o bloquear completamente el canal. Todos los cambios surten efecto inmediatamente para todas las notificaciones posteriores.
Al crear un NotificationChannel, se puede configurar: sonido (personalizado o del sistema), vibración (patrón y duración), indicador luminoso (color LED), insignia (setShowBadge), pantalla de bloqueo (setLockscreenVisibility) y modo no molestar (setBypassDnd). Estos parámetros se fijan al crear el canal y solo pueden ser modificados por el usuario más adelante.
El nivel de importancia es el parámetro principal de un canal. Determina si la notificación reproducirá un sonido, aparecerá en la pantalla o simplemente se colocará en la sombra. La importancia no debe confundirse con la prioridad — la importancia la establece el canal, y la prioridad (setPriority) se ignora en Android 8+.
| Nivel | Constante | Comportamiento | Sonido |
|---|---|---|---|
| HIGH | IMPORTANCE_HIGH (4) | Muestra banner heads-up, aparece en la sombra | Sí |
| DEFAULT | IMPORTANCE_DEFAULT (3) | Aparece en la sombra, sin heads-up | Sí |
| LOW | IMPORTANCE_LOW (2) | Aparece en la sombra sin sonido | No |
| MIN | IMPORTANCE_MIN (1) | Solo en la sombra, sin sonido ni vibración | No |
| NONE | IMPORTANCE_NONE (0) | No se muestra en absoluto | No |
Para la mayoría de los escenarios de usuario, use IMPORTANCE_DEFAULT (3) — la notificación aparecerá en la sombra con sonido pero sin banner emergente. Use IMPORTANCE_HIGH solo para eventos críticos: llamada entrante, mensaje de un contacto, recordatorio de temporizador.
El canal se crea una vez al iniciar la aplicación o en el primer uso. La mejor práctica es crear todos los canales al iniciar la aplicación, en el método Application.onCreate. Volver a crear un canal existente es seguro — Android ignora la llamada si el canal ya existe.
class App : Application() {
override fun onCreate() {
super.onCreate()
createNotificationChannels()
}
private fun createNotificationChannels() {
val messagesChannel = NotificationChannel(
CHANNEL_MESSAGES,
"Mensajes",
NotificationManager.IMPORTANCE_HIGH
).apply {
description = "Notificaciones de nuevos mensajes"
enableVibration = true
setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
}
val promoChannel = NotificationChannel(
CHANNEL_PROMO,
"Promociones y novedades",
NotificationManager.IMPORTANCE_LOW
).apply {
description = "Notificaciones de marketing y ofertas especiales"
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"
}
}
Al enviar una notificación, especifique el ID del canal a través de setChannelId (para NotificationCompat) o en el constructor Notification.Builder. Si el canal con el ID especificado no existe, la notificación no se mostrará, pero no se producirá ningún error.
Android proporciona varias API para la gestión programática de canales: obtener una lista, eliminar y verificar la configuración actual. Eliminar un canal hace que todas sus notificaciones se eliminen del historial del sistema.
val manager =
getSystemService(NotificationManager::class.java)
// Obtener lista de todos los canales
val channels = manager.getNotificationChannels()
channels.forEach { channel ->
Log.d("Canales", "${channel.id}: ${channel.importance}")
}
// Conocer la importancia actual (el usuario puede haberla cambiado)
val channel = manager.getNotificationChannel(CHANNEL_MESSAGES)
if (channel.importance == NotificationManager.IMPORTANCE_NONE) {
// El usuario desactivó el canal
suggestEnablingChannel()
}
// Eliminar canal
manager.deleteNotificationChannel(CHANNEL_PROMO)
Después de crear un canal, el desarrollador no puede cambiar su importancia mediante programación — esta es una restricción de Android para proteger al usuario de abusos. Si necesita cambiar la importancia de un canal, cree un nuevo canal con un ID diferente y migre las notificaciones.
Si necesita cambiar la importancia de un canal existente, cree un nuevo canal con un ID diferente (por ejemplo, “messages_v2”) y comience a enviar notificaciones a él. El canal antiguo se puede eliminar mediante deleteNotificationChannel — todas sus notificaciones se eliminarán del historial. Advierta al usuario sobre la migración a través de la interfaz de la aplicación para que no pierda su configuración.
NotificationChannelGroup combina varios canales en un grupo visual en la interfaz de configuración de Android. Los grupos ayudan al usuario a navegar cuando la aplicación usa 5+ canales: por ejemplo, “Social,” “Sistema,” “Marketing.”
Un grupo se crea mediante createNotificationChannelGroup y se pasa al canal en su creación a través del método setGroup. Eliminar un grupo también elimina todos sus canales. Cada canal puede pertenecer a un solo grupo.
En la práctica, los grupos de canales son recomendados para aplicaciones con más de 3 canales. Simplifican la navegación en la configuración y reducen la probabilidad de que el usuario desactive todas las notificaciones a la vez sin entender la lista de canales.
Un grupo se crea mediante createNotificationChannelGroup con un ID y nombre únicos. Luego, cada canal se asigna al grupo a través del método setGroup. En la configuración del sistema, el grupo aparece como una sección con un encabezado, debajo del cual se enumeran todos los canales de este grupo. Si se elimina un grupo, todos sus canales también se eliminan automáticamente por el sistema sin posibilidad de recuperación.
El diseño adecuado de los canales de notificación afecta directamente la experiencia del usuario y la retención. El patrón principal son tres niveles de importancia: canal crítico (IMPORTANCE_HIGH) para mensajes y llamadas, estándar (IMPORTANCE_DEFAULT) para notificaciones generales y silencioso (IMPORTANCE_LOW) para marketing y noticias. Esta gradación le da al usuario una opción clara sin sobrecarga.
El segundo patrón es un canal por módulo funcional. Cada módulo importante de la aplicación (chat, pedidos, feed, marketing) tiene su propio canal. Si hay más de 5 módulos, combínelos en un NotificationChannelGroup. En la configuración del sistema, el grupo aparece como una sección con elementos plegables — esto simplifica la navegación.
El tercer patrón es un canal para desarrolladores. Cree un canal separado con IMPORTANCE_MIN para notificaciones de depuración y servicio. Los usuarios no las verán en la sombra, pero el desarrollador puede analizar los registros a través de adb. En producción, este canal se puede eliminar u ocultar de la interfaz mediante Intent en la configuración.
El cuarto patrón es la retroalimentación del canal. Muestre al usuario en la interfaz qué canales están activos y cuál es su importancia actual. En Android 8+, puede obtener el estado del canal a través de getNotificationChannel y ofrecer al usuario cambiar la configuración si el canal está desactivado. Esto es especialmente importante para las funciones críticas de la aplicación.
Preguntas frecuentes
La notificación no se mostrará ni en la sombra ni en la bandeja. El sistema ignora silenciosamente la llamada notify(). Excepciones: al usar NotificationCompat, la biblioteca crea un canal predeterminado, pero su importancia siempre es DEFAULT. Se recomienda crear siempre sus propios canales.
Se puede cambiar el nombre, la descripción y el sonido de un canal. No se puede cambiar la importancia — esta decisión está protegida por el sistema contra el desarrollador. Si necesita aumentar la importancia, cree un nuevo canal con un ID diferente y úselo para nuevas notificaciones. El usuario puede cambiar la importancia en cualquier momento.
Use getNotificationChannel y verifique la importancia: si el valor es IMPORTANCE_NONE, el canal está desactivado. También puede abrir la configuración del sistema del canal a través de Intent: Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS con los parámetros app_package y channel_id.
No hay límites — Android no establece un límite en la cantidad de canales. Sin embargo, se recomienda no crear más de 5–10 canales para no abrumar al usuario con opciones. El mínimo óptimo es de 2–3 canales: notificaciones críticas, regulares y de marketing.
En Android 7.1 (API 25) y versiones anteriores, los canales no son compatibles. La clase NotificationChannel solo está disponible a partir de API 26. Para compatibilidad hacia atrás, use NotificationCompat y envuelva la creación del canal en una condición: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O).
Resumen
Desarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.
Lea también