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 correos electrónicos recibidos, agrega todas las notificaciones de mensajes de correo electrónico nuevos en el mismo grupo para que se contraigan entre sí.

Para admitir versiones anteriores, agrega una notificación de resumen que aparezca sola para resumir todas las notificaciones por separado. Esto suele hacerse mejor con el notificación con estilo de bandeja de entrada.

Figura 1: Contraído (arriba) y expandido (abajo) grupo de notificaciones.

Usa grupos de notificaciones si se cumplen todas las condiciones que se indican a continuación. caso:

  • Las notificaciones secundarias son notificaciones completas y se pueden mostrar individualmente 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 que el usuario puede ver.

Si tus notificaciones no cumplen con los criterios anteriores, considera lo siguiente: actualizar una notificación existente con nueva información o la creación de un estilo de mensaje notificación 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 quieras incluir en el grupo, llama setGroup(): y pasar 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 puede cambiar el orden llamando setSortKey()

Si las alertas para un grupo de notificaciones deben ser controladas por un notificación, llamada setGroupAlertBehavior() Por ejemplo, si quieres que solo el resumen de tu grupo haga ruido, todo 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 el grupo . Para habilitar las notificaciones agrupadas, debes configurar un resumen de grupo. Esta El resumen del grupo debe incluir una parte del texto de cada una de las demás notificaciones. en el grupo para ayudar al usuario a comprender qué hay en el grupo. Cómo el grupo resumen depende de la versión de Android:

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

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

Aunque las versiones más recientes de Android no muestren el texto del resumen del grupo que diseño, siempre debe configurar manualmente un resumen para habilitar notificaciones. El comportamiento del resumen de grupo puede variar en algunos dispositivos como los wearables. Establecer contenido enriquecido en el resumen de tu grupo ayuda 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 (suele ser mejor). terminamos con el estilo de Recibidos notificación.

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

  3. Especifica que debe usarse como resumen de grupo llamando setGroupSummary(true)

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

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 permanecer igual para que solo se publique una vez. para que puedas actualizarla más tarde si la información de resumen cambia. Posterior las incorporaciones al grupo deben dar como resultado la actualización del resumen existente.

Para ver un código de ejemplo que usa notificaciones, consulta el artículo Notificaciones de Android Ejemplo de Google Cloud.

Agrupación automática

En Android 7.0 (nivel de API 24) y versiones posteriores, si tu app envía cuatro o más y no especifica una clave o un resumen de grupo, es posible que el sistema agruparlos automáticamente. Las notificaciones agrupadas aparecen automáticamente con una notificación de resumen de grupo etiquetada con fragmentos de texto de algunos de los las notificaciones agrupadas. El usuario puede expandir esta notificación de resumen para ver cada notificaciones individuales, al igual que las notificaciones agrupadas manualmente.

El comportamiento de la agrupación automática puede variar según el tipo de dispositivo. Para brindar la mejor en todos los dispositivos y versiones, si sabes que las notificaciones , especifica una clave de grupo y un resumen del grupo para asegurarte de que estén agrupados.