Créer un groupe de notifications

À partir d'Android 7.0 (niveau d'API 24), vous pouvez afficher les notifications associées dans un groupe. Par exemple, si votre application affiche des notifications pour les e-mails reçus, placez toutes les notifications pour les nouveaux e-mails dans le même groupe afin qu'elles se réduisent.

Pour prendre en charge les anciennes versions, ajoutez une notification récapitulative qui s'affiche seule pour résumer toutes les notifications distinctes. Il est souvent préférable d'utiliser une notification de type boîte de réception.

Figure 1 : Groupe de notifications réduit (en haut) et développé (en bas).

Utilisez des groupes de notifications si toutes les conditions suivantes sont remplies pour votre cas d'utilisation:

  • Les notifications enfants sont des notifications complètes et peuvent être affichées individuellement sans avoir besoin d'un résumé de groupe.

  • Il est avantageux d'afficher les notifications enfants individuellement. Exemple :

    • Ils sont exploitables, avec des actions spécifiques à chaque notification.

    • Chaque notification contient plus d'informations pour l'utilisateur.

Si vos notifications ne répondent pas aux critères précédents, envisagez plutôt de modifier une notification existante avec de nouvelles informations ou de créer une notification de type message pour afficher plusieurs mises à jour dans la même conversation.

Créer un groupe et y ajouter une notification

Pour créer un groupe de notifications, définissez une chaîne d'identifiant unique pour le groupe. Ensuite, pour chaque notification que vous souhaitez inclure dans le groupe, appelez setGroup() en transmettant le nom du groupe. Exemple :

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

Par défaut, les notifications sont triées en fonction de la date et de l'heure de leur publication, mais vous pouvez modifier l'ordre en appelant setSortKey().

Si les alertes du groupe d'une notification doivent être gérées par une autre notification, appelez setGroupAlertBehavior(). Par exemple, si vous souhaitez que seul le résumé de votre groupe apparaisse, tous les enfants du groupe doivent avoir le comportement d'alerte de groupe GROUP_ALERT_SUMMARY. Les autres options sont GROUP_ALERT_ALL et GROUP_ALERT_CHILDREN.

Définir un résumé de groupe

Les notifications groupées doivent comporter une notification supplémentaire qui sert de récapitulatif du groupe. Pour activer les notifications groupées, vous devez définir un récapitulatif de groupe. Ce résumé de groupe doit inclure une partie du texte de chacune des autres notifications du groupe pour aider l'utilisateur à comprendre ce qu'il contient. L'affichage du récapitulatif du groupe dépend de la version d'Android :

  • Sous les versions d'Android antérieures à 7.0 (niveau d'API 24), qui ne peuvent pas afficher de groupe de notifications imbriqué, le système n'affiche que la notification récapitulative du groupe et masque toutes les autres. L'utilisateur peut appuyer sur la notification récapitulative du groupe pour ouvrir votre application.

  • Sous Android 7.0 et versions ultérieures, le système affiche votre notification récapitulative de groupe sous la forme d'un groupe imbriqué de notifications, libellé avec des extraits de texte de chaque notification groupée. Elle n'affiche pas le texte que vous avez défini dans la notification récapitulative du groupe. L'utilisateur peut développer le groupe imbriqué de notifications pour afficher les notifications individuelles du groupe, comme illustré dans la figure 1.

Même si les versions plus récentes d'Android n'affichent pas le texte récapitulatif du groupe que vous concevez, vous devez toujours définir manuellement un récapitulatif pour activer les notifications groupées. Le comportement du résumé de groupe peut varier sur certains types d'appareils, tels que les accessoires connectés. Définir du contenu enrichi sur le résumé de votre groupe permet de proposer la meilleure expérience sur tous les appareils et versions.

Pour ajouter un résumé de groupe, procédez comme suit :

  1. Créez une notification avec une description du groupe. Il est souvent préférable de le faire avec la notification de style boîte de réception.

  2. Ajoutez la notification récapitulative au groupe en appelant setGroup().

  3. Spécifiez qu'il doit être utilisé comme résumé du groupe en appelant setGroupSummary(true).

Le code suivant montre comment créer un récapitulatif de groupe :

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 de la notification récapitulative doit rester le même afin qu'il ne soit publié qu'une seule fois et que vous puissiez le modifier ultérieurement si les informations récapitulatives changent. Les ajouts ultérieurs au groupe doivent entraîner la mise à jour du récapitulatif existant.

Pour obtenir un exemple de code qui utilise des notifications, consultez l'exemple de notifications Android.

Regroupement automatique

Sur Android 7.0 (niveau d'API 24) ou version ultérieure, si votre application envoie des notifications et ne spécifie pas de clé de groupe ni de récapitulatif de groupe, le système peut les regrouper automatiquement. Les notifications regroupées automatiquement s'affichent avec une notification récapitulative de groupe libellée avec des extraits de texte de certaines des notifications regroupées. L'utilisateur peut développer cette notification récapitulative pour afficher chaque notification individuelle, comme pour les notifications groupées manuellement.

Le comportement de regroupement automatique peut varier selon les types d'appareils. Pour offrir une expérience optimale sur tous les appareils et toutes les versions, si vous savez que les notifications doivent être regroupées, spécifiez une clé de groupe et un résumé de groupe pour vous assurer qu'ils sont regroupés.