Utiliser des bulles pour permettre aux utilisateurs de participer aux conversations

Les bulles permettent aux utilisateurs de voir les conversations et d'y participer plus facilement.

<ph type="x-smartling-placeholder">
Figure 1. Bulle de chat.

Les bulles sont intégrées au système de notification. Elles flottent au-dessus d'une autre application et de suivre l'utilisateur où qu'il aille. Les utilisateurs peuvent développer les bulles pour les afficher et d'interagir avec le contenu de l'application. Ils peuvent aussi les réduire les utilisent.

Lorsque l'appareil est verrouillé ou que le mode Always-on est actif, les bulles apparaissent sous la forme les notifications le font normalement.

Les bulles peuvent être désactivées. Lorsqu'une application présente sa première bulle, une vous avez le choix entre deux options:

  • Bloquez toutes les bulles de votre application. Les notifications ne sont pas bloquées, mais elles n'apparaissent jamais sous forme de bulles.
  • Autorisez toutes les bulles de votre application. Toutes les notifications envoyées avec Les BubbleMetaData s'affichent sous forme de bulles.

L'API Bulle

Les bulles étant créées à l'aide de l'API Notification, envoyez vos notifications en tant que normal. Si vous souhaitez que votre notification s'affiche sous forme de bulle, joignez des données supplémentaires avec lui.

La vue développée d'une bulle est créée à partir d'une activité de votre choix. Configurez l'activité pour qu'elle s'affiche correctement sous forme de bulle. L'activité doit être resizeable et intégrées. S'il manque l'une de ces exigences, il s'affiche sous forme de notification à la place.

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 bulles de chat conversations avec différents contacts, l'activité doit pouvoir démarrer plusieurs instances. Sur les appareils équipés d'Android 10 ou version antérieure : les notifications ne s'affichent pas sous forme d'info-bulles, sauf si vous les définissez explicitement documentLaunchMode jusqu'à "always" À partir d'Android 11, vous n'avez pas besoin définir cette valeur, car le système définit automatiquement toutes les conversations De documentLaunchMode à "always".

Pour envoyer une info-bulle, procédez comme suit:

  1. créer une notification lorsque vous le font normalement.
  2. Appeler BubbleMetadata.Builder(PendingIntent, Icon) ou BubbleMetadata.Builder(String) pour créer un objet BubbleMetadata.
  3. Utilisez setBubbleMetadata() pour ajouter des métadonnées à la notification.
  4. Si vous ciblez Android 11 ou une version ultérieure, assurez-vous que l'info-bulle les métadonnées ou les notifications font référence à un raccourci de partage.

Ces étapes sont présentées dans l'exemple suivant :

Kotlin

// 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(mContext, 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)

Java

// Create a bubble intent.
Intent target = new Intent(mContext, BubbleActivity.class);
PendingIntent bubbleIntent =
    PendingIntent.getActivity(mContext, 0, target, 0 /* flags */);

private val CATEGORY_TEXT_SHARE_TARGET =
    "com.example.category.IMG_SHARE_TARGET"

Person chatPartner = new Person.Builder()
        .setName("Chat partner")
        .setImportant(true)
        .build();

// Create a sharing shortcut.
private String shortcutId = generateShortcutId();
ShortcutInfo shortcut =
   new ShortcutInfo.Builder(mContext, shortcutId)
       .setCategories(Collections.singleton(CATEGORY_TEXT_SHARE_TARGET))
       .setIntent(Intent(Intent.ACTION_DEFAULT))
       .setLongLived(true)
       .setShortLabel(chatPartner.getName())
       .build();

// Create a bubble metadata.
Notification.BubbleMetadata bubbleData =
    new Notification.BubbleMetadata.Builder(bubbleIntent,
            Icon.createWithResource(context, R.drawable.icon))
        .setDesiredHeight(600)
        .build();

// Create a notification, referencing the sharing shortcut.
Notification.Builder builder =
    new Notification.Builder(mContext, CHANNEL_ID)
        .setContentIntent(contentIntent)
        .setSmallIcon(smallIcon)
        .setBubbleMetadata(bubbleData)
        .setShortcutId(shortcutId)
        .addPerson(chatPartner);

Si votre application est exécutée au premier plan lorsqu'une info-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 depuis votre application.

Créer une bulle agrandie

Vous pouvez configurer votre info-bulle pour qu'elle s'affiche automatiquement en grand format. Mer recommandent de n'utiliser cette fonctionnalité que si l'utilisateur effectue une action génère une bulle (par exemple, lorsque vous appuyez sur un bouton pour démarrer une nouvelle discussion). Dans ce cas, il est également judicieux de supprimer la notification initiale envoyée lorsqu'une bulle est créé.

Il existe des méthodes que vous pouvez utiliser pour définir des indicateurs qui activent ces comportements: setAutoExpandBubble() et setSuppressNotification()

L'exemple suivant montre comment configurer une info-bulle pour présenter automatiquement en grand format:

Kotlin

val bubbleMetadata = Notification.BubbleMetadata.Builder()
    .setDesiredHeight(600)
    .setIntent(bubbleIntent)
    .setAutoExpandBubble(true)
    .setSuppressNotification(true)
    .build()

Java

Notification.BubbleMetadata bubbleData =
    new Notification.BubbleMetadata.Builder()
        .setDesiredHeight(600)
        .setIntent(bubbleIntent)
        .setAutoExpandBubble(true)
        .setSuppressNotification(true)
        .build();

Cycle de vie du contenu des bulles

Lorsqu'une bulle est développée, l'activité de contenu suit le processus normal du cycle de vie, ce qui entraîne le l'application à devenir un processus de premier plan, si ce n'est pas déjà fait.

Lorsque la bulle est réduite ou fermée, l'activité est détruite. Cela pourrait peut entraîner la mise en cache du processus, puis sa suppression, selon que application exécute d'autres composants de premier plan.

Affichage des bulles

Pour limiter les interruptions pour l'utilisateur, les bulles n'apparaissent que sous certaines les circonstances.

Si une application cible Android 11 ou une version ultérieure, aucune notification sous forme de bulle, sauf s'il s'agit d'une conversation exigences. Si une application cible Android 10 ou version antérieure, la notification apparaît sous forme d'info-bulle uniquement si une ou plusieurs des conditions suivantes sont remplies:

Si aucune de ces conditions n'est remplie, la notification est affichée au lieu d'une .

Lancer des activités à partir de bulles

Lorsqu'une bulle lance une nouvelle activité, celle-ci se lance : dans la même tâche et dans la même fenêtre à bulles, ou dans une nouvelle tâche en plein écran, en réduisant la bulle qui l'a lancée.

Pour lancer une nouvelle activité dans la même tâche que la bulle: 1. Utiliser le contexte de l'activité lors du lancement des intents activity.startActivity(intent) et 1. Ne définissez pas l'option FLAG_ACTIVITY_NEW_TASK sur l'intent.

Sinon, la nouvelle activité est lancée dans une nouvelle tâche et la bulle est réduit.

N'oubliez pas qu'une bulle représente une conversation spécifique. Les activités lancées dans la bulle doit être liée à cette conversation. En outre, Le lancement d'une activité dans la bulle augmente la pile de tâches de cette bulle. et pourrait compliquer l'expérience utilisateur, notamment en ce qui concerne la navigation.

Bonnes pratiques

  • Envoyer une notification sous forme de bulle uniquement si elle est importante, par exemple lorsqu'elle est dans le cadre d'une communication en cours ou si l'utilisateur demande explicitement une bulle pour contenus. Les bulles occupent l'espace à l'écran et couvrent le reste du contenu de l'application.
  • Assurez-vous que votre notification sous forme de bulle fonctionne également comme une notification normale. Quand ? l'utilisateur désactive l'info-bulle, une notification apparaît normalement .
  • Appeler super.onBackPressed lors du remplacement onBackPressed dans la bulle activité. Sinon, votre bulle risque de ne pas se comporter correctement.

Lorsqu'une bulle réduite reçoit un message mis à jour, elle affiche un badge. pour indiquer un message non lu. Lorsque l'utilisateur ouvre le message dans l'application associée, procédez comme suit:

Application exemple

La Personnes application exemple est une application de conversation qui utilise des bulles. À titre de démonstration, cette application utilise des chatbots. Dans les applications réelles, utilisez des bulles pour les messages en humains.