Usa burbujas para permitir que los usuarios participen en conversaciones

Las burbujas permiten que los usuarios vean las conversaciones y participen en ellas con mayor facilidad.

Figura 1: Una burbuja de chat

Las burbujas están integradas en el sistema de notificaciones. Flotan sobre otra app contenido y seguir al usuario a donde quiera que vaya. Los usuarios pueden expandir las burbujas e interactuar con el contenido de la aplicación, y pueden contraerlos cuando no estén para usarlas.

Cuando el dispositivo está bloqueado o la pantalla siempre activa está activa, las burbujas aparecen como normalmente hacen las notificaciones.

Las burbujas se pueden inhabilitar. Cuando aparece el primer cuadro de una app, se muestra El diálogo de permisos ofrece dos opciones:

  • Bloquea todas las burbujas de la app. Las notificaciones no se bloquean, pero nunca aparezcan como burbujas.
  • Permite todas las burbujas de tu app. Todas las notificaciones enviadas con BubbleMetaData aparecen como burbujas.

La API de burbujas

Las burbujas se crean con la API de notificaciones, por lo que debes es normal. Si quieres que la notificación se muestre como una burbuja, adjunta datos adicionales que se les asigna.

La vista expandida de una burbuja se crea a partir de una actividad que elijas. Configura la actividad para que se muestre correctamente como una burbuja. La actividad debe ser cambian de tamaño y incorporada. Si falta cualquiera de estos requisitos, se muestra como una notificación.

En el siguiente código, se muestra cómo implementar un cuadro:

<activity
  android:name=".bubbles.BubbleActivity"
  android:theme="@style/AppTheme.NoActionBar"
  android:label="@string/title_activity_bubble"
  android:allowEmbedded="true"
  android:resizeableActivity="true"
/>

Si tu app muestra varias burbujas del mismo tipo, como varios chats conversaciones con diferentes contactos, se debe poder iniciar la actividad múltiples instancias. En dispositivos con Android 10 y versiones anteriores, haz lo siguiente: las notificaciones no se muestran como burbujas a menos que establezcas documentLaunchMode a "always" A partir de Android 11, no necesitas establece este valor, ya que el sistema establece automáticamente las conversaciones De documentLaunchMode a "always".

Para enviar una burbuja, sigue estos pasos:

  1. Crea una notificación mientras normalmente.
  2. Llama a BubbleMetadata.Builder(PendingIntent, Icon) o BubbleMetadata.Builder(String) para crear un objeto BubbleMetadata.
  3. Usa setBubbleMetadata() para agregar los metadatos a la notificación.
  4. Si orientas tu app a Android 11 o versiones posteriores, asegúrate de que el cuadro los metadatos o las notificaciones hacen referencia a un acceso directo de uso compartido.

Estos pasos se muestran en el siguiente ejemplo:

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 la app está en primer plano cuando se envía un cuadro, se ignora la importancia. y tu burbuja siempre se muestra, a menos que el usuario bloquee las burbujas o las notificaciones desde tu app.

Cómo crear una burbuja expandida

Puedes configurar tu burbuja para presentarla en estado expandido automáticamente. Mié recomendar el uso de esta función solo si el usuario realiza una acción que resultados en un cuadro, como presionar un botón para iniciar un nuevo chat. En este caso, también tiene sentido suprimir la notificación inicial enviada cuando una burbuja se crear.

Existen métodos que puedes usar para establecer marcas que habiliten estos comportamientos: setAutoExpandBubble() y setSuppressNotification()

En el siguiente ejemplo, se muestra cómo configurar una burbuja para que presente automáticamente En estado expandido:

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

Ciclo de vida del contenido del cuadro

Cuando se expande una burbuja, la actividad del contenido pasa por el proceso normal ciclo de vida, lo que da como resultado el en primer plano, si aún no lo es.

Cuando se contrae o descarta el cuadro, se destruye la actividad. Esto podría provocarán que el proceso se almacene en caché y, luego, se finalice, dependiendo de si el aplicación tiene otros componentes en primer plano ejecutándose.

Cuándo aparecen las burbujas

Para reducir las interrupciones para el usuario, las burbujas solo aparecen en determinadas a las circunstancias.

Si una app se orienta a Android 11 o versiones posteriores, la notificación no aparecer como una burbuja a menos que cumpla con la conversación empresariales y de seguridad. Si una app se orienta En Android 10 o versiones anteriores, la notificación aparecerá como un cuadro solo si se cumplen una o más de las siguientes condiciones:

Si no se cumple ninguna de estas condiciones, se muestra la notificación en lugar de burbuja.

Cómo iniciar actividades desde burbujas

Cuando un cuadro inicia una actividad nueva, esta se inicia dentro de la misma tarea y la misma ventana en burbujas, o en una tarea nueva en pantalla completa y se contrae la burbuja que la inició.

Para iniciar una nueva actividad en la misma tarea que el cuadro, haz lo siguiente: 1) Usa el contexto de la actividad cuando inicies intents activity.startActivity(intent) y 1) No configures la marca FLAG_ACTIVITY_NEW_TASK en el intent.

De lo contrario, la actividad nueva se inicia en una tarea nueva y la burbuja se contraída.

Ten en cuenta que una burbuja representa una conversación específica, por lo que las actividades lanzado dentro del cuadro debe estar relacionado con esa conversación. Además: Iniciar una actividad dentro de la burbuja aumenta la pila de tareas de la burbuja y podrían complicar la experiencia del usuario, especialmente en torno la navegación.

Prácticas recomendadas

  • Envía una notificación como cuadro solo si es importante; por ejemplo, cuando lo es parte de una comunicación continua o si el usuario solicita explícitamente una burbuja de contenido. Las burbujas usan espacio de la pantalla y cubren otro contenido de la app.
  • Asegúrate de que la burbuja también funcione como una notificación normal. Cuándo el usuario lo inhabilita, se muestra una notificación de burbuja como un notificación.
  • Llama a super.onBackPressed durante la anulación onBackPressed en la burbuja actividad. De lo contrario, es posible que la burbuja no se comporte correctamente.

Cuando una burbuja contraída recibe un mensaje actualizado, aparece una insignia para indicar que hay un mensaje no leído. Cuando el usuario abre el mensaje en la aplicación asociada, sigue estos pasos:

App de ejemplo

El Personas La app de ejemplo es una app de conversación que usa burbujas. Para los fines de la demostración, esta aplicación utiliza chatbots. En aplicaciones reales, usa burbujas para los mensajes de las siguientes maneras: a los humanos.