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 tu app muestra notificaciones de correos electrónicos recibidos, coloca todas las notificaciones de mensajes de correo electrónico nuevos en el mismo grupo para que se contraigan juntas.

Para admitir versiones anteriores, agrega una notificación de resumen que aparezca sola para resumir todas las notificaciones separadas. Una notificación de estilo de bandeja de entrada es la forma habitual de hacerlo.

Grupo de notificaciones contraído y expandido
Figura 1. Un grupo de notificaciones contraído (arriba) y expandido (abajo) grupo de notificaciones.

Si se cumplen todas las siguientes condiciones para tu caso de uso, usa grupos de notificaciones:

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

  • Es beneficioso mostrar las notificaciones secundarias de forma individual. Por ejemplo:

    • Tienen 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 de 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, para cada notificación que desees en el grupo, llama a setGroup, y pasa el nombre del grupo. Por ejemplo:

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()

De forma predeterminada, las notificaciones se ordenan según el momento en que se publican, pero tú puedes cambiar el orden llamando a setSortKey.

Si una notificación diferente debe controlar las alertas de un grupo de notificaciones, llama a setGroupAlertBehavior. Por ejemplo, si quieres que solo el resumen de tu grupo haga 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 hay en el grupo. La forma en que se muestra el resumen del grupo depende de la versión de Android:

  • Las versiones de Android anteriores a 7.0 (nivel de API 24) no pueden mostrar un grupo anidado de notificaciones, por lo que 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 la notificación de resumen del grupo como un grupo anidado de notificaciones, etiquetado con fragmentos de texto de cada notificación agrupada. No muestra el texto que estableces en la notificación de resumen del grupo. 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 del grupo que diseñaste, debes establecer un resumen de forma manual para habilitar las notificaciones agrupadas. El comportamiento del resumen del grupo puede variar en algunos tipos de dispositivos, como los wearables. Configurar contenido enriquecido en el resumen del grupo ayuda a brindar 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. Por lo general, es mejor hacerlo con la notificación de estilo de bandeja de entrada.

  2. Llama a setGroup para agregar la notificación de resumen a la agrupación.

  3. Llama a setGroupSummary(true) para especificar que se debe usar como resumen del grupo.

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

// 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)
}

El ID de notificación de resumen debe permanecer igual para que solo se publique una vez y puedas actualizarlo más adelante si cambia la información del resumen. Las adiciones posteriores al grupo deben generar la actualización del resumen existente.

Agrupamiento automático

En Android 7.0 (nivel de API 24) y versiones posteriores, si tu app envía notificaciones y no especifica una clave de grupo o un resumen de grupo, el sistema podría agruparlas automáticamente. Las notificaciones agrupadas automáticamente aparecen con una notificación de resumen de grupo 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 con las notificaciones agrupadas de forma manual.

El comportamiento de agrupamiento automático puede variar en algunos tipos de dispositivos. Para brindar la mejor experiencia en todos los dispositivos y versiones, si sabes que las notificaciones deben agruparse, especifica una clave de grupo y un resumen de grupo para asegurarte de que se agrupen.