Cómo crear un grupo de notificaciones

A partir de Android 7.0 (nivel de API 24), puedes mostrar notificaciones relacionadas en un grupo. Por ejemplo, si la app muestra notificaciones de los correos electrónicos recibidos, coloca todas las notificaciones de los mensajes de correo electrónico nuevos en el mismo grupo para que se contraigan.

Para admitir versiones anteriores, agrega una notificación de resumen que aparezca sola y resuma todas las notificaciones separadas. A menudo, esto se hace mejor con las notificaciones con estilo de bandeja de entrada.

Figura 1: Un grupo de notificaciones contraído (en la parte superior) y expandido (inferior)

Usa los grupos de notificaciones si se cumplen todas las condiciones siguientes en tu caso de uso:

  • Las notificaciones secundarias son notificaciones completas y se pueden mostrar de forma individual sin la necesidad de un resumen del grupo.

  • El aislamiento de notificaciones secundarias de forma individual tiene un beneficio. Por ejemplo:

    • Son interactivas, con acciones específicas para cada notificación.

    • Hay más información en cada notificación para que el usuario la vea.

Si tus notificaciones no cumplen con los criterios anteriores, considera actualizar una notificación existente con información nueva o crear una notificación con estilo de mensaje para mostrar varias actualizaciones en la misma conversación.

Cómo crear un grupo y agregar una notificación en él

Para crear un grupo de notificaciones, define una cadena de identificador único para el grupo. Luego, en cada notificación que quieras incluir, llama a setGroup() y pasa el nombre del grupo. Por ejemplo:

Kotlin

val GROUP_KEY_WORK_EMAIL = "com.android.example.WORK_EMAIL"

val newMessageNotification = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID)
        .setSmallIcon(R.drawable.new_mail)
        .setContentTitle(emailObject.getSenderName())
        .setContentText(emailObject.getSubject())
        .setLargeIcon(emailObject.getSenderAvatar())
        .setGroup(GROUP_KEY_WORK_EMAIL)
        .build()

Java

String GROUP_KEY_WORK_EMAIL = "com.android.example.WORK_EMAIL";

Notification newMessageNotification = new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID)
        .setSmallIcon(R.drawable.new_mail)
        .setContentTitle(emailObject.getSenderName())
        .setContentText(emailObject.getSubject())
        .setLargeIcon(emailObject.getSenderAvatar())
        .setGroup(GROUP_KEY_WORK_EMAIL)
        .build();

De forma predeterminada, las notificaciones se ordenan según el momento de su publicación, pero puedes llamar a setSortKey() para cambiar el orden.

Si las alertas de un grupo de notificaciones deben administrarse con una notificación diferente, llama a setGroupAlertBehavior(). Por ejemplo, si solo quieres que el resumen de tu grupo emita ruido, todos los elementos secundarios del grupo deben tener el comportamiento de alerta de grupo GROUP_ALERT_SUMMARY. Las otras opciones son GROUP_ALERT_ALL y GROUP_ALERT_CHILDREN.

Cómo configurar un resumen de grupo

Las notificaciones agrupadas deben tener una notificación adicional que actúe como resumen del grupo. Para habilitar las notificaciones agrupadas, debes configurar un resumen de grupo. Este resumen de grupo debe incluir parte del texto de cada una de las otras notificaciones del grupo para ayudar al usuario a comprender lo que incluye. La forma en que se muestra el resumen del grupo depende de la versión de Android:

  • En las versiones de Android anteriores a la 7.0 (nivel de API 24), que no puede mostrar un grupo anidado de notificaciones, el sistema solo muestra la notificación de resumen del grupo y oculta todas las demás. El usuario puede presionar la notificación de resumen del grupo para abrir tu app.

  • En Android 7.0 y versiones posteriores, el sistema muestra tu notificación de resumen grupal como un grupo anidado de notificaciones, etiquetados con fragmentos de texto de cada notificación agrupada. No muestra el texto que estableciste en la notificación de resumen grupal. El usuario puede expandir el grupo anidado de notificaciones para ver las notificaciones individuales del grupo, como se muestra en la figura 1.

Incluso si las versiones más recientes de Android no muestran el texto de resumen grupal que diseñas, siempre debes configurar manualmente un resumen para habilitar las notificaciones agrupadas. El comportamiento del resumen de grupo puede variar en algunos tipos de dispositivos, como los wearables. Configurar contenido enriquecido en el resumen de tu grupo ayuda a proporcionar la mejor experiencia en todos los dispositivos y versiones.

Para agregar un resumen de grupo, haz lo siguiente:

  1. Crea una notificación nueva con una descripción del grupo (lo mejor que puedes hacer con la notificación de bandeja de entrada).

  2. Llama a setGroup() para agregar la notificación de resumen al grupo.

  3. Llama a setGroupSummary(true) para especificar que esta debe usarse como resumen de grupo.

En el siguiente código, se muestra un ejemplo de cómo crear un resumen grupal:

Kotlin

// Use constant ID for notifications used as group summary.
val SUMMARY_ID = 0
val GROUP_KEY_WORK_EMAIL = "com.android.example.WORK_EMAIL"

val newMessageNotification1 = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID)
        .setSmallIcon(R.drawable.ic_notify_email_status)
        .setContentTitle(emailObject1.getSummary())
        .setContentText("You will not believe...")
        .setGroup(GROUP_KEY_WORK_EMAIL)
        .build()

val newMessageNotification2 = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID)
        .setSmallIcon(R.drawable.ic_notify_email_status)
        .setContentTitle(emailObject2.getSummary())
        .setContentText("Please join us to celebrate the...")
        .setGroup(GROUP_KEY_WORK_EMAIL)
        .build()

val summaryNotification = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID)
        .setContentTitle(emailObject.getSummary())
        // Set content text to support devices running API level < 24.
        .setContentText("Two new messages")
        .setSmallIcon(R.drawable.ic_notify_summary_status)
        // Build summary info into InboxStyle template.
        .setStyle(NotificationCompat.InboxStyle()
                .addLine("Alex Faarborg Check this out")
                .addLine("Jeff Chang Launch Party")
                .setBigContentTitle("2 new messages")
                .setSummaryText("janedoe@example.com"))
        // Specify which group this notification belongs to.
        .setGroup(GROUP_KEY_WORK_EMAIL)
        // Set this notification as the summary for the group.
        .setGroupSummary(true)
        .build()

NotificationManagerCompat.from(this).apply {
    notify(emailNotificationId1, newMessageNotification1)
    notify(emailNotificationId2, newMessageNotification2)
    notify(SUMMARY_ID, summaryNotification)
}

Java

// Use constant ID for notifications used as group summary.
int SUMMARY_ID = 0;
String GROUP_KEY_WORK_EMAIL = "com.android.example.WORK_EMAIL";

Notification newMessageNotification1 =
    new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID)
        .setSmallIcon(R.drawable.ic_notify_email_status)
        .setContentTitle(emailObject1.getSummary())
        .setContentText("You will not believe...")
        .setGroup(GROUP_KEY_WORK_EMAIL)
        .build();

Notification newMessageNotification2 =
    new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID)
        .setSmallIcon(R.drawable.ic_notify_email_status)
        .setContentTitle(emailObject2.getSummary())
        .setContentText("Please join us to celebrate the...")
        .setGroup(GROUP_KEY_WORK_EMAIL)
        .build();

Notification summaryNotification =
    new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID)
        .setContentTitle(emailObject.getSummary())
        // Set content text to support devices running API level < 24.
        .setContentText("Two new messages")
        .setSmallIcon(R.drawable.ic_notify_summary_status)
        // Build summary info into InboxStyle template.
        .setStyle(new NotificationCompat.InboxStyle()
                .addLine("Alex Faarborg  Check this out")
                .addLine("Jeff Chang    Launch Party")
                .setBigContentTitle("2 new messages")
                .setSummaryText("janedoe@example.com"))
        // Specify which group this notification belongs to.
        .setGroup(GROUP_KEY_WORK_EMAIL)
        // Set this notification as the summary for the group.
        .setGroupSummary(true)
        .build();

NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
notificationManager.notify(emailNotificationId1, newMessageNotification1);
notificationManager.notify(emailNotificationId2, newMessageNotification2);
notificationManager.notify(SUMMARY_ID, summaryNotification);

El ID de notificación de resumen debe ser el mismo para que solo se publique una vez y puedas actualizarlo más tarde si cambia la información del resumen. Las incorporaciones posteriores al grupo deben dar como resultado la actualización del resumen existente.

Para ver un código de ejemplo que usa notificaciones, consulta Ejemplo de notificaciones de Android.

Agrupación automática

En Android 7.0 (nivel de API 24) y versiones posteriores, si tu app envía cuatro o más notificaciones y no especifica una clave o un resumen de grupo, el sistema podría agruparlos automáticamente. Las notificaciones agrupadas aparecen automáticamente con una notificación de resumen grupal etiquetada con fragmentos de texto de algunas de las notificaciones agrupadas. El usuario puede expandir esta notificación de resumen para ver cada notificación individual, como ocurre con las notificaciones agrupadas de forma manual.

El comportamiento de la agrupación automática puede variar en algunos tipos de dispositivos. Para proporcionar la mejor experiencia en todos los dispositivos y versiones, si sabes que las notificaciones deben agruparse, especifica una clave y un resumen de grupo para asegurarte de que estén agrupadas.