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 la tua app mostra le notifiche per le email ricevute, metti tutte le notifiche per i nuovi messaggi email nello stesso gruppo in modo che vengano compresse.

Per supportare le versioni precedenti, aggiungi una notifica di riepilogo che appare da sola per riassumere tutte le notifiche separate. Il modo migliore per farlo è utilizzare la notifica in stile Posta in arrivo.

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

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

  • Le notifiche per bambini e ragazzi sono notifiche complete e possono essere visualizzate singolarmente senza bisogno di un riepilogo di gruppo.

  • È vantaggioso mostrare singolarmente le notifiche per i bambini. Ad esempio:

    • Sono utilizzabili, con azioni specifiche per ciascuna notifica.

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

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

Crea un gruppo a cui aggiungere una notifica

Per creare un gruppo di notifiche, definisci una stringa di identificatore univoco per il gruppo. Quindi, per ogni notifica che vuoi inserire nel gruppo, chiama il numero setGroup() e trasmetti il nome del gruppo. Ecco alcuni esempi:

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 a quando vengono pubblicate, ma puoi modificarne l'ordine chiamando setSortKey().

Se gli avvisi relativi a un gruppo di notifica devono essere gestiti da una notifica diversa, chiama il numero setGroupAlertBehavior(). Ad esempio, se vuoi che solo il riepilogo del tuo gruppo faccia rumore, tutti i bambini del gruppo devono avere il comportamento degli avvisi 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 del gruppo per aiutare l'utente a capire cosa contiene. La modalità di visualizzazione del riepilogo del gruppo dipende dalla versione di Android:

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

  • Su Android 7.0 e versioni successive, il sistema mostra la notifica di riepilogo del gruppo sotto forma di gruppo nidificato di notifiche, etichettate con snippet di testo provenienti da 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 di riepilogo del gruppo che hai progettato, dovrai sempre impostare manualmente un riepilogo per abilitare le notifiche raggruppate. Il comportamento del riepilogo del gruppo può variare su alcuni tipi di dispositivi, come gli indossabili. L'impostazione di contenuti avanzati nel riepilogo del gruppo consente di offrire un'esperienza ottimale su tutti i dispositivi e le versioni.

Per aggiungere un riepilogo del gruppo, procedi come segue:

  1. Crea una nuova notifica con una descrizione del gruppo, spesso soluzione migliore con la notifica in stile Posta in arrivo.

  2. Aggiungi la notifica di riepilogo al gruppo chiamando il numero 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, di conseguenza, tu possa aggiornarlo in un secondo momento se le informazioni di riepilogo cambiano. Le successive aggiunte al gruppo devono comportare l'aggiornamento del riepilogo esistente.

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

Raggruppamento automatico

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

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