Les bulles de notification permettent aux utilisateurs de voir plus facilement les conversations et d'y participer.
Elles flottent au-dessus du contenu d'autres applications. Les utilisateurs peuvent les développer pour afficher le contenu de l'application et interagir avec, et les réduire lorsqu'ils ne les utilisent pas.
Lorsque l'appareil est verrouillé ou que l'écran toujours allumé est activé, les bulles s'affichent comme des notifications normales.
Les bulles de notification sont activées par l'utilisateur. Pour ce faire, il peut appuyer sur le bouton de bulle dans les notifications compatibles. Ainsi, ce chat spécifique sera toujours affiché sous forme de bulle. Dans les paramètres, les utilisateurs peuvent ajuster les chats qu'ils ont mis en bulle ou modifier les paramètres de l'application globale.
Les utilisateurs peuvent effectuer les opérations suivantes :
- Bloquer toutes les bulles de notification de votre application. Les notifications ne sont pas bloquées, mais elles n'apparaissent jamais sous forme de bulles.
- Autoriser certaines bulles de notification de votre application. Les notifications mises en bulle à l'aide du bouton de bulle sont "sélectionnées".
- Autoriser toutes les bulles de notification de votre application. Toutes les notifications envoyées avec
BubbleMetadataapparaissent sous forme de bulles.
L'API de bulle de notification
Les bulles de notification sont créées à l'aide de l'API de notification. Si vous souhaitez que votre notification s'affiche sous forme de bulle, ajoutez-y des données supplémentaires.
La vue développée de la bulle est créée à partir d'une activité que vous choisissez. Configurez l'activité pour qu'elle s'affiche correctement sous forme de bulle. L'activité doit être redimensionnable et intégrée. Si l'une de ces conditions n'est pas remplie, le système l'affiche à la place sous forme de notification.
Le code suivant montre comment implémenter une bulle :
<activity
android:name=".bubbles.BubbleActivity"
android:theme="@style/AppTheme.NoActionBar"
android:label="@string/title_activity_bubble"
android:allowEmbedded="true"
android:resizeableActivity="true"
/>
Si votre application affiche plusieurs bulles du même type, comme plusieurs conversations de chat avec des contacts différents, l'activité doit pouvoir lancer plusieurs instances. Sur les appareils équipés d'Android 10 ou d'une version antérieure,
les notifications ne s'affichent pas sous forme de bulles, sauf si vous définissez explicitement
documentLaunchMode sur
"always". À partir d'Android 11, vous n'avez pas besoin de définir explicitement
cette valeur, car le système définit automatiquement
documentLaunchMode de toutes les conversations sur "always".
Pour envoyer une bulle de notification, procédez comme suit :
- Créez une notification comme vous le faites habituellement.
- Appelez
BubbleMetadata.Builder(PendingIntent, Icon)ouBubbleMetadata.Builder(String)pour créer un objetBubbleMetadata. - Utilisez
setBubbleMetadata()pour ajouter les métadonnées à la notification. - Si vous ciblez Android 11 (niveau d'API 30) ou une version ultérieure, assurez-vous que les métadonnées de la bulle ou de la notification font référence à un raccourci de partage.
- Modifiez votre application pour ne pas annuler les notifications qui apparaissent sous forme de bulles. L'annulation d'une notification supprime la bulle de l'écran. L'ouverture d'une bulle masque automatiquement la notification associée.
Ces étapes sont présentées dans l'exemple suivant :
// Create a bubble intent.
val target = Intent(context, BubbleActivity::class.java)
val bubbleIntent = PendingIntent.getActivity(context, 0, target, 0 /* flags */)
val category = "com.example.category.IMG_SHARE_TARGET"
val chatPartner = Person.Builder()
.setName("Chat partner")
.setImportant(true)
.build()
// Create a sharing shortcut.
val shortcutId = generateShortcutId()
val shortcut =
ShortcutInfo.Builder(context, shortcutId)
.setCategories(setOf(category))
.setIntent(Intent(Intent.ACTION_DEFAULT))
.setLongLived(true)
.setShortLabel(chatPartner.name)
.build()
// Create a bubble metadata.
val bubbleData = Notification.BubbleMetadata.Builder(bubbleIntent,
Icon.createWithResource(context, R.drawable.icon))
.setDesiredHeight(600)
.build()
// Create a notification, referencing the sharing shortcut.
val builder = Notification.Builder(context, CHANNEL_ID)
.setContentIntent(contentIntent)
.setSmallIcon(smallIcon)
.setBubbleMetadata(bubbleData)
.setShortcutId(shortcutId)
.addPerson(chatPartner)
Si votre application est au premier plan lorsqu'une bulle est envoyée, l'importance est ignorée et votre bulle est toujours affichée, sauf si l'utilisateur bloque les bulles ou les notifications de votre application.
Créer une bulle développée
Vous pouvez configurer votre bulle pour qu'elle s'affiche automatiquement dans un état développé. Nous vous recommandons de n'utiliser cette fonctionnalité que si l'utilisateur effectue une action qui génère une bulle, par exemple en appuyant sur un bouton pour démarrer un nouveau chat. Dans ce cas, il est également judicieux de supprimer la notification initiale envoyée lors de la création d'une bulle.
Vous pouvez utiliser les méthodes pour définir des indicateurs qui activent ces comportements:
setAutoExpandBubble()
et
setSuppressNotification().
L'exemple suivant montre comment configurer une bulle pour qu'elle s'affiche automatiquement dans un état développé :
val bubbleMetadata = Notification.BubbleMetadata.Builder()
.setDesiredHeight(600)
.setIntent(bubbleIntent)
.setAutoExpandBubble(true)
.setSuppressNotification(true)
.build()
Cycle de vie du contenu de la bulle
Lorsqu'une bulle est développée, l'activité de contenu suit le cycle de vie normal du processus, ce qui fait que l' application devient un processus de premier plan, si ce n'est pas déjà le cas.
Lorsque la bulle est réduite ou ignorée, l'activité est détruite. Le processus peut alors être mis en cache et arrêté ultérieurement, selon que l'application comporte ou non d'autres composants de premier plan en cours d'exécution.
Quand les bulles s'affichent-elles ?
Pour réduire les interruptions pour l'utilisateur, les bulles ne s'affichent que dans certaines circonstances.
Si une application cible Android 11 (niveau d'API 30) ou une version ultérieure, une notification ne s'affiche pas sous forme de bulle, sauf si elle répond aux exigences de la conversation. Si une application cible Android 10 (niveau d'API 29) ou une version antérieure, la notification s'affiche sous forme de bulle uniquement si une ou plusieurs des conditions suivantes sont remplies :
- La notification utilise
MessagingStyleet unPersona été ajouté. - La notification provient d'un appel à
Service.startForeground, a uncategorydeCATEGORY_CALLet unPersona été ajouté. - L'application est au premier plan lorsque la notification est envoyée.
Si aucune de ces conditions n'est remplie, la notification s'affiche à la place d'une bulle.
Lancement d'activités à partir de bulles
Lorsqu'une bulle lance une nouvelle activité, celle-ci est lancée dans la même tâche et la même fenêtre de bulle, ou dans une nouvelle tâche en plein écran, ce qui réduit la bulle qui l'a lancée.
Pour lancer une nouvelle activité dans la même tâche que la bulle :
1. Utilisez le contexte d'activité lors du lancement des intents,
activity.startActivity(intent), et
1. Ne définissez pas l'indicateur FLAG_ACTIVITY_NEW_TASK sur l'intent.
Sinon, la nouvelle activité est lancée dans une nouvelle tâche et la bulle est réduite.
N'oubliez pas qu'une bulle représente une conversation spécifique. Les activités lancées dans la bulle doivent donc être liées à cette conversation. De plus, le lancement d'une activité dans la bulle augmente la pile de tâches de la bulle et peut potentiellement compliquer l'expérience utilisateur, en particulier en ce qui concerne la navigation.
Bonnes pratiques
- N'envoyez une notification sous forme de bulle que si elle est importante, par exemple si elle fait partie d'une communication en cours ou si l'utilisateur demande explicitement une bulle pour un contenu. Les bulles utilisent l'espace disponible à l'écran et couvrent le contenu d'autres applications.
- Assurez-vous que votre notification de bulle fonctionne également comme une notification normale. Lorsque l'utilisateur désactive la bulle, une notification de bulle s'affiche comme une notification normale.
- Utilisez le
BackHandlercomposable et liez sonenabledparamètre à votre état de l'interface utilisateur afin qu'il n'intercepte les appuis sur le bouton "Retour" que lorsque cela est nécessaire. Une fois que votre gestionnaire se désactive, la bulle se réduit.
Lorsqu'une bulle réduite reçoit un message mis à jour, elle affiche une icône de badge pour indiquer qu'il s'agit d'un message non lu. Lorsque l'utilisateur ouvre le message dans l'application associée, procédez comme suit :
- Mettez à jour le
BubbleMetadatapour supprimer la notification. AppelezBubbleMetadata.Builder.setSuppressNotification(). Cela supprime l'icône de badge pour indiquer que l'utilisateur a interagi avec le message. - Définissez
Notification.Builder.setOnlyAlertOnce()surtruepour supprimer le son ou la vibration qui accompagne laBubbleMetadatamise à jour.
Application exemple
L'application exemple SociaLite est une application de conversation qui utilise des bulles. À des fins de démonstration, cette application utilise des chatbots. Dans les applications réelles, utilisez des bulles pour les messages envoyés par des personnes.