Cómo crear y administrar canales de notificaciones

A partir de Android 8.0 (nivel de API 26), todas las notificaciones deben asignarse a un canal. Para cada canal, puedes definir el comportamiento visual y auditivo que se se aplicará a todas las notificaciones de ese canal. Los usuarios pueden cambiar estos parámetros de configuración y decidir qué canales de notificaciones de la app pueden ser intrusivos o sean visibles.

Mira el siguiente video para obtener una descripción general de los canales y otras notificaciones. en Android 8.0.

La configuración del usuario para los canales de notificaciones está disponible para cada app en la del sistema, como se muestra en la figura 1.

Figura 1: Configuración de notificaciones para la app de Reloj y uno de sus canales.

Después de crear un canal de notificaciones, no podrás cambiar la notificación los comportamientos del modelo. En ese momento, el usuario tiene el control total. Sin embargo, aún puedes cambiar el nombre y la descripción de un canal.

Crea un canal para cada tipo de notificación que necesites enviar. También puedes crear canales de notificaciones para reflejar las elecciones realizadas por los usuarios. Por ejemplo, puede configurar canales de notificación independientes para cada grupo de conversación creado por un usuario en una aplicación de mensajería.

Cuando te orientas a Android 8.0 (nivel de API 26) o versiones posteriores, debes implementar una o más canales de notificaciones. Si tu targetSdkVersion está configurado en 25 o menos, Cuando tu app se ejecuta en Android 8.0 (nivel de API 26) o versiones posteriores, se comporta de la misma manera como en los dispositivos con Android 7.1 (nivel de API 25) o versiones anteriores.

Cómo crear un canal de notificaciones

Para crear un canal de notificaciones, sigue estos pasos:

  1. Crea un Objeto NotificationChannel con un ID de canal único, un nombre visible para el usuario y un nivel de importancia.

  2. De manera opcional, especifica la descripción que verá el usuario en la configuración del sistema con setDescription()

  3. Registra el canal de notificaciones pasándolo a createNotificationChannel()

En el siguiente ejemplo, se muestra cómo crear y registrar un canal de notificaciones:

Kotlin

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    // Create the NotificationChannel.
    val name = getString(R.string.channel_name)
    val descriptionText = getString(R.string.channel_description)
    val importance = NotificationManager.IMPORTANCE_DEFAULT
    val mChannel = NotificationChannel(CHANNEL_ID, name, importance)
    mChannel.description = descriptionText
    // Register the channel with the system. You can't change the importance
    // or other notification behaviors after this.
    val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
    notificationManager.createNotificationChannel(mChannel)
}

Java

private void createNotificationChannel() {
    // Create the NotificationChannel, but only on API 26+ because
    // the NotificationChannel class is not in the Support Library.
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        CharSequence name = getString(R.string.channel_name);
        String description = getString(R.string.channel_description);
        int importance = NotificationManager.IMPORTANCE_DEFAULT;
        NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);
        channel.setDescription(description);
        // Register the channel with the system. You can't change the importance
        // or other notification behaviors after this.
        NotificationManager notificationManager = getSystemService(NotificationManager.class);
        notificationManager.createNotificationChannel(channel);
    }
}

Volver a crear un canal de notificaciones existente con sus valores originales no genera por lo que se recomienda llamar a este código cuando se inicia una app.

De forma predeterminada, todas las notificaciones publicadas en un canal determinado usan el los comportamientos auditivos definidos por el nivel de importancia desde la NotificationManagerCompat como, por ejemplo, IMPORTANCE_DEFAULT o IMPORTANCE_HIGH Consulta la siguiente sección para obtener más información sobre niveles de importancia.

Si quieres personalizar los comportamientos predeterminados de las notificaciones de tu canal, puedes llamar a métodos como enableLights(): setLightColor(), y setVibrationPattern() el NotificationChannel. Recuerda que, una vez que hayas creado el canal, no puede cambiar estas opciones, y el usuario tiene control final sobre si estas y los comportamientos están activos.

También puedes crear varios canales de notificaciones en una sola operación llamando createNotificationChannels()

Cómo establecer el nivel de importancia

La importancia del canal afecta el nivel de interrupción de todas las notificaciones publicadas en el canal. Especifícalo en el constructor NotificationChannel con uno de cinco niveles de importancia, que van desde IMPORTANCE_NONE(0) a IMPORTANCE_HIGH(4)

Para admitir dispositivos con Android 7.1 (nivel de API 25) o versiones anteriores, también debes llamar setPriority() para cada notificación, usando una constante de prioridad de la NotificationCompat .

La importancia (NotificationManager.IMPORTANCE_*) y la prioridad (NotificationCompat.PRIORITY_*) se asignan a la importancia visible para el usuario. de comandos, como se muestra en la siguiente tabla.

Nivel de importancia visible para el usuario Importancia (Android 8.0 y versiones posteriores) Prioridad (Android 7.1 y versiones anteriores)
Urgente
Emite un sonido y aparece como una notificación de atención.
IMPORTANCE_HIGH PRIORITY_HIGH o PRIORITY_MAX
Alta
Emite un sonido.
IMPORTANCE_DEFAULT PRIORITY_DEFAULT
Media
No emite ningún sonido.
IMPORTANCE_LOW PRIORITY_LOW
Baja
No emite sonido y no aparece en la barra de estado.
IMPORTANCE_MIN PRIORITY_MIN
Ninguno
No emite ningún sonido y no aparece en la barra de estado ni en el panel.
IMPORTANCE_NONE N/A

Todas las notificaciones, independientemente de su importancia, aparecen en un sistema no disruptivo. ubicaciones de la IU, como en el panel lateral de notificaciones y en una insignia en el ícono de selector aunque puedes modificar el aspecto de la insignia de notificación

Una vez que envíes el canal al NotificationManager, tú no se puede cambiar el nivel de importancia. Sin embargo, el usuario puede cambiar preferencias para los canales de tu app en cualquier momento.

Para obtener información sobre cómo elegir un nivel de prioridad adecuado, consulte "Prioridad niveles" en la Guía de diseño de notificaciones.

Cómo leer la configuración del canal de notificaciones

Los usuarios pueden modificar la configuración de los canales de notificaciones, incluidos los comportamientos como la vibración y el sonido de alerta. Si quieres conocer los parámetros de configuración se aplica a tus canales de notificación, sigue estos pasos:

  1. Llama para obtener el objeto NotificationChannel getNotificationChannel() o getNotificationChannels()

  2. Consultar parámetros de configuración específicos del canal, como getVibrationPattern(): getSound() y getImportance()

Si detectas una configuración de canal que, según tu opinión, inhibe el comportamiento previsto para tu aplicación, puedes sugerirle al usuario que la cambie y proporcionar una acción para Abre la configuración del canal, como se muestra en la siguiente sección.

Cómo abrir la configuración del canal de notificaciones

Después de crear un canal de notificaciones, no podrás cambiar la notificación los comportamientos visuales y auditivos del canal de forma programática. Solo el usuario puede cambiar los comportamientos del canal desde la configuración del sistema. Para brindar a tus usuarios fácil acceso a la configuración de notificaciones, agrega un elemento configuración de la IU que abre estas opciones del sistema.

Puedes abrir la configuración del sistema para canales de notificaciones con una Intent que usa la función ACTION_CHANNEL_NOTIFICATION_SETTINGS acción.

Por ejemplo, el siguiente código de muestra indica cómo puedes redireccionar a un usuario a la Configuración de un canal de notificaciones:

Kotlin

val intent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS).apply {
    putExtra(Settings.EXTRA_APP_PACKAGE, packageName)
    putExtra(Settings.EXTRA_CHANNEL_ID, myNotificationChannel.getId())
}
startActivity(intent)

Java

Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS);
intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName());
intent.putExtra(Settings.EXTRA_CHANNEL_ID, myNotificationChannel.getId());
startActivity(intent);

Ten en cuenta que el intent requiere dos extras que especifiquen el nombre del paquete de tu app (también conocido como ID de aplicación) y el canal para editar.

Cómo borrar un canal de notificaciones

Puedes borrar canales de notificaciones llamando deleteNotificationChannel() En el siguiente código de muestra, se muestra cómo completar este proceso:

Kotlin

// The id of the channel.
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val id: String = "my_channel_01"
notificationManager.deleteNotificationChannel(id)

Java

NotificationManager notificationManager =
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// The id of the channel.
String id = "my_channel_01";
notificationManager.deleteNotificationChannel(id);

Cómo crear un grupo de canales de notificaciones

Si deseas organizar aún más la apariencia de tus canales en la IU de configuración, sigue estos pasos: puedes crear grupos de canales. Esta es una buena idea cuando tu app admite varias cuentas de usuario, por ejemplo, para perfiles de trabajo, ya que te permiten crear un grupo de canales de notificaciones para cada cuenta. Así, los usuarios pueden identificar con facilidad y controlan varios canales de notificaciones con nombres idénticos.

Figura 2: Configuración del canal de notificaciones con grupos para cuentas personales y de trabajo.

Por ejemplo, una aplicación de red social podría incluir compatibilidad con actividades cuentas de servicio. En este caso, cada cuenta puede requerir varias notificaciones canales con funciones y nombres idénticos, como los siguientes:

  • Una cuenta personal con dos canales:

    • Comentarios nuevos

    • Recomendaciones de publicaciones

  • Una cuenta comercial con dos canales:

    • Comentarios nuevos

    • Recomendaciones de publicaciones

Organizar los canales de notificación en grupos para cada cuenta permite a los usuarios distinguirlos.

Cada grupo de canales de notificaciones requiere un ID, que debe ser único en tu paquete, así como un nombre visible para el usuario. El siguiente fragmento demuestra cómo para crear un grupo de canales de notificaciones.

Kotlin

// The id of the group.
val groupId = "my_group_01"
// The user-visible name of the group.
val groupName = getString(R.string.group_name)
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notificationManager.createNotificationChannelGroup(NotificationChannelGroup(groupId, groupName))

Java

// The id of the group.
String groupId = "my_group_01";
// The user-visible name of the group.
CharSequence groupName = getString(R.string.group_name);
NotificationManager notificationManager =
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.createNotificationChannelGroup(new NotificationChannelGroup(groupId, groupName));

Después de crear un grupo nuevo, podrás llamar setGroup() para asociar un objeto NotificationChannel nuevo al grupo.

Una vez que envíes el canal al administrador de notificaciones, no podrás cambiar la asociación entre el grupo y el canal de notificaciones.