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 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 en conjunto.
Para admitir versiones anteriores, agrega una notificación de resumen que aparezca sola y sintetice todas las notificaciones individuales. Esto suele funcionar mejor con la notificación con estilo de bandeja de entrada.
Usa grupos de notificaciones si se cumplen todas las siguientes condiciones en tu caso de uso:
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, procura 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 en este, 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 sonido, todas las notificaciones secundarias 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 establecer un resumen del grupo. Este resumen del grupo debe incluir una parte del texto de cada una de las demás 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:
En versiones de Android anteriores a la 7.0 (nivel de API 24), que no pueden 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 del resumen del grupo para abrir tu 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 notificación agrupada. No muestra el texto que estableciste en la notificación del 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 del resumen del grupo que diseñas, siempre debes configurar un resumen de forma manual 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 brindar la mejor experiencia en todos los dispositivos y versiones.
Para agregar un resumen de grupo, haz lo siguiente:
Crea una nueva notificación con una descripción del grupo (este enfoque suele funcionar mejor en las notificaciones con estilo de bandeja de entrada).
Llama a
setGroup()
para agregar la notificación de resumen al grupo.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 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 la notificación de resumen debe mantenerse igual de manera que solo se publique una vez y puedas actualizarlo posteriormente en caso de que se modifique la información. Las adiciones posteriores al grupo deben actualizar el 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 notificaciones y no especifica una clave de grupo o un resumen de grupo, es posible que el sistema las agrupe automáticamente. Las notificaciones agrupadas automáticamente aparecen con una notificación de resumen del 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 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 de grupo y un resumen de grupo para asegurarte de que se agrupen.