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 soient réduites ensemble.

Pour prendre en charge les versions antérieures, ajoutez une notification récapitulative qui s'affiche seule pour résumer toutes les notifications distinctes. Une notification de style boîte de réception est la méthode habituelle pour cela.

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

Si toutes les conditions suivantes sont remplies pour votre cas d'utilisation, utilisez des groupes de notifications :

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

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

    • Elles comportent 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 mettre à jour une notification existante avec de nouvelles informations ou de créer une notification de style 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 :

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

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

Si les alertes d'un groupe de notifications doivent être gérées par une autre notification, appelez setGroupAlertBehavior. Par exemple, si vous ne souhaitez que le récapitulatif de votre groupe émette un son, 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écapitulatif de groupe

Les notifications groupées doivent comporter une notification supplémentaire qui sert de récapitulatif de groupe. Pour activer les notifications groupées, vous devez définir un récapitulatif de groupe. Ce récapitulatif de groupe 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 de groupe dépend de la version d'Android :

  • Les versions d'Android antérieures à 7.0 (niveau d'API 24) ne peuvent pas afficher un groupe de notifications imbriqué. Le système n'affiche donc que votre notification récapitulative de groupe et masque toutes les autres. L'utilisateur peut appuyer sur la notification récapitulative de 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 de notifications imbriqué, libellé 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 de groupe. L'utilisateur peut développer le groupe de notifications imbriqué pour afficher les notifications individuelles du groupe, comme illustré à la figure 1.

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

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

  1. Créez une notification avec une description du groupe. Il est souvent préférable d'utiliser la notification de style boîte de réception 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'elle doit être utilisée comme récapitulatif de groupe en appelant setGroupSummary(true).

Le code suivant montre un exemple de création d'un récapitulatif de groupe :

// 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)
}

L'ID de la notification récapitulative doit rester le même afin 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écapitulatif existant.

Regroupement automatique

Sur Android 7.0 (niveau d'API 24) et versions ultérieures, 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 groupées. L'utilisateur peut développer cette notification récapitulative pour afficher chaque notification individuelle, comme avec les notifications groupées manuellement.

Le comportement de regroupement automatique peut varier sur certains types d'appareils. Pour offrir la meilleure expérience 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écapitulatif de groupe pour vous assurer qu'elles sont regroupées.