Crea un gruppo di notifiche

A partire da Android 7.0 (livello API 24), puoi visualizzare le notifiche correlate in un gruppo. Ad esempio, se l'app mostra notifiche per le email ricevute, inserisci tutte le notifiche per i nuovi messaggi email nello stesso gruppo in modo che vengano compressi.

Per supportare le versioni precedenti, aggiungi una notifica di riepilogo che viene visualizzata da sola per riepilogare tutte le notifiche separate. Spesso è meglio farlo con la notifica in stile posta in arrivo.

Figura 1. Un gruppo di notifiche compresso (in alto) ed espanso (in basso).

Utilizza i gruppi di notifiche se per il tuo caso d'uso si verificano tutte le seguenti condizioni:

  • Le notifiche secondarie sono notifiche complete e possono essere visualizzate singolarmente senza la necessità di un riepilogo di gruppo.

  • La visualizzazione delle notifiche dei figli singolarmente presenta un vantaggio. Per esempio:

    • Sono fruibili, con azioni specifiche per ogni notifica.

    • In ogni notifica sono disponibili ulteriori informazioni per l'utente.

Se le notifiche non soddisfano i criteri precedenti, ti consigliamo di aggiornare una notifica esistente con nuove informazioni o di creare una notifica in stile messaggio per mostrare più aggiornamenti nella stessa conversazione.

Creare un gruppo e aggiungervi una notifica

Per creare un gruppo di notifica, definisci una stringa di identificatore univoca per il gruppo. Poi, per ogni notifica che vuoi nel gruppo, chiama setGroup(), passando il nome del gruppo. Ad esempio:

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

Per impostazione predefinita, le notifiche sono ordinate in base alla data di pubblicazione, ma puoi cambiare l'ordine chiamando setSortKey().

Se gli avvisi per il gruppo di una notifica devono essere gestiti da un'altra notifica, chiama setGroupAlertBehavior() Ad esempio, se vuoi che solo il riepilogo del gruppo emetta un suono, tutti gli elementi del gruppo devono avere il comportamento di avviso di gruppo GROUP_ALERT_SUMMARY. Le altre opzioni sono GROUP_ALERT_ALL e GROUP_ALERT_CHILDREN.

Impostare un riepilogo del gruppo

Le notifiche raggruppate devono avere una notifica aggiuntiva che funge da riepilogo del gruppo. Per attivare le notifiche raggruppate, devi impostare un riepilogo del gruppo. Questo riepilogo del gruppo deve includere parte del testo di ciascuna delle altre notifiche nel gruppo per aiutare l'utente a capire cosa contiene il gruppo. Il modo in cui viene visualizzato il riepilogo del gruppo dipende dalla versione di Android:

  • Nelle versioni di Android precedenti alla 7.0 (livello API 24), che non possono mostrare un gruppo di notifiche nidificate, il sistema mostra solo la notifica di riepilogo del gruppo e nasconde tutte le altre. L'utente può toccare la notifica del riepilogo del gruppo per aprire la tua app.

  • Su Android 7.0 e versioni successive, il sistema mostra la notifica di riepilogo del gruppo come gruppo nidificato di notifiche, etichettate con snippet di testo di ogni notifica raggruppata. Non mostra il testo che hai impostato nella notifica di riepilogo del gruppo. L'utente può espandere il gruppo nidificato di notifiche per visualizzare le singole notifiche del gruppo, come mostrato nella figura 1.

Anche se le versioni più recenti di Android non mostrano il testo del riepilogo del gruppo che hai progettato, devi sempre impostare manualmente un riepilogo per attivare le notifiche raggruppate. Il comportamento del riepilogo del gruppo potrebbe variare in base a alcuni tipi di dispositivi, ad esempio i dispositivi indossabili. L'impostazione di contenuti avanzati nel riepilogo del gruppo contribuisce a offrire la migliore esperienza su tutti i dispositivi e le versioni.

Per aggiungere un riepilogo del gruppo, procedi nel seguente modo:

  1. Crea una nuova notifica con una descrizione del gruppo. Spesso è meglio farlo con la notifica in stile posta in arrivo.

  2. Aggiungi la notifica di riepilogo al gruppo chiamando setGroup().

  3. Specifica che deve essere utilizzato come riepilogo del gruppo chiamando setGroupSummary(true).

Il codice seguente mostra un esempio di creazione di un riepilogo del gruppo:

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

L'ID notifica di riepilogo deve rimanere invariato in modo che venga pubblicato una sola volta e in modo da poterlo aggiornare in un secondo momento se le informazioni di riepilogo cambiano. Gli aggiunte successive al gruppo devono comportare l'aggiornamento del riepilogo esistente.

Per un esempio di codice che utilizza le notifiche, consulta l'esempio di notifiche Android.

Raggruppamento automatico

Su Android 7.0 (livello API 24) e versioni successive, se la tua app invia notifiche e non specifica una chiave di gruppo o un riepilogo del gruppo, il sistema potrebbe raggrupparle automaticamente. Le notifiche raggruppate automaticamente vengono visualizzate con una notifica di riepilogo del gruppo etichettata con snippet di testo di alcune delle notifiche raggruppate. L'utente può espandere questa notifica di riepilogo per visualizzare ogni singola notifica, come con le notifiche raggruppate manualmente.

Il comportamento del raggruppamento automatico potrebbe variare su alcuni tipi di dispositivi. Per offrire la migliore esperienza su tutti i dispositivi e le versioni, se sai che le notifiche devono essere raggruppate, specifica una chiave di gruppo e un riepilogo del gruppo per assicurarti che siano raggruppate.