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, regroupez toutes les notifications pour les nouveaux e-mails dans le même groupe afin de les regrouper.

Pour prendre en charge les anciennes versions, ajoutez une notification récapitulative qui apparaît seule pour résumer toutes les notifications distinctes. Pour ce faire, utilisez la notification de type boîte de réception.

Figure 1 : Un 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 qui peuvent être affichées individuellement sans avoir besoin d'un résumé du groupe.

  • L'affichage individuel des notifications enfant présente l'avantage. Par exemple :

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

    • Chaque notification contient des informations supplémentaires qui sont présentées à l'utilisateur.

Si vos notifications ne répondent pas aux critères précédents, envisagez plutôt de mettre à jour 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 à ajouter au groupe, appelez setGroup() en transmettant le nom du groupe. Par 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 leur date de publication, mais vous pouvez en modifier l'ordre en appelant setSortKey().

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

Définir un résumé du groupe

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

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

  • Sur 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, étiqueté avec des extraits de texte de chaque notification groupée. Il 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 voir les notifications individuelles dans le 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ésumé 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. Le fait de définir du contenu enrichi sur le résumé de votre groupe permet d'offrir la meilleure expérience possible sur tous les appareils et toutes les versions.

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

  1. créer une notification avec une description du groupe (souvent mieux avec la notification de type 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 un exemple de création d'un résumé 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 pour qu'elle ne soit publiée qu'une seule fois et que vous puissiez la mettre à jour ultérieurement si les informations récapitulatives changent. Les ajouts ultérieurs au groupe doivent entraîner la mise à jour du résumé existant.

Pour obtenir un exemple de code utilisant 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 quatre notifications ou plus et ne spécifie pas de clé de groupe ni de résumé de groupe, le système peut les regrouper automatiquement. Les notifications groupées apparaissent automatiquement avec une notification récapitulative de groupe libellée avec des extraits de texte de certaines notifications groupées. L'utilisateur peut développer cette notification récapitulative pour voir chaque notification individuelle, comme pour les notifications regroupées manuellement.

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