Mit Bubbles können Nutzer an Unterhaltungen teilnehmen

Mit Bubbles können Nutzer Unterhaltungen einfacher sehen und daran teilnehmen.

Abbildung 1. Eine Sprechblase.

In das Benachrichtigungssystem sind Bubbles integriert. Sie schweben über anderen App-Inhalten und folgen dem Nutzer, wo immer er sich befindet. Nutzer können Infofelder maximieren, um App-Funktionen und Informationen anzuzeigen, und sie können sie minimieren, wenn sie sie nicht verwenden.

Wenn das Gerät gesperrt oder das Always-on-Display aktiviert ist, werden Bubbles wie gewohnt angezeigt.

Bubbles können Sie deaktivieren. Wenn das erste Infofeld einer App eingeblendet wird, bietet ein Berechtigungsdialogfeld zwei Auswahlmöglichkeiten:

  • Alle Bubbles in der App blockieren. Benachrichtigungen werden nicht blockiert, aber nicht als Bubbles angezeigt.
  • Alle Bubbles von deiner App zulassen. Alle mit BubbleMetaData gesendeten Benachrichtigungen werden als Bubbles angezeigt.

Bubble API

Bubbles werden über die Notification API erstellt. Senden Sie Ihre Benachrichtigung daher wie gewohnt. Wenn Sie möchten, dass die Benachrichtigung als Infofeld angezeigt wird, fügen Sie zusätzliche Daten hinzu.

Die maximierte Ansicht eines Infofelds wird aus einer Aktivität erstellt, die Sie auswählen. Konfigurieren Sie die Aktivität so, dass sie korrekt als Infofeld angezeigt wird. Die Aktivität muss anpassbar und eingebettet sein. Wenn eine dieser Voraussetzungen nicht erfüllt ist, wird stattdessen eine Benachrichtigung angezeigt.

Der folgende Code zeigt, wie eine einfache Blase implementiert wird:

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

Wenn in Ihrer Anwendung mehrere Bubbles desselben Typs angezeigt werden, z. B. mehrere Chatunterhaltungen mit verschiedenen Kontakten, muss die Aktivität mehrere Instanzen starten können. Auf Geräten mit Android 10 und niedriger werden Benachrichtigungen nur dann als Bubbles angezeigt, wenn du documentLaunchMode explizit auf "always" festlegst. Ab Android 11 müssen Sie diesen Wert nicht explizit festlegen, da das System das documentLaunchMode aller Unterhaltungen automatisch auf "always" setzt.

So senden Sie eine Bubble:

  1. Erstelle wie gewohnt eine Benachrichtigung.
  2. Rufen Sie BubbleMetadata.Builder(PendingIntent, Icon) oder BubbleMetadata.Builder(String) auf, um ein BubbleMetadata-Objekt zu erstellen.
  3. Verwenden Sie setBubbleMetadata(), um der Benachrichtigung die Metadaten hinzuzufügen.
  4. Bei einer Ausrichtung auf Android 11 oder höher müssen die Infofeld-Metadaten oder die Benachrichtigung auf eine Verknüpfung zum Teilen verweisen.

Diese Schritte werden im folgenden Beispiel dargestellt:

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

Wenn Ihre App beim Senden eines Infofelds im Vordergrund ausgeführt wird, wird die Wichtigkeit ignoriert und das Infofeld wird immer angezeigt, es sei denn, der Nutzer blockiert Bubbles oder Benachrichtigungen von Ihrer App.

Maximierte Bubble erstellen

Sie können das Infofeld so konfigurieren, dass es automatisch maximiert angezeigt wird. Wir empfehlen, diese Funktion nur zu verwenden, wenn der Nutzer eine Aktion ausführt, die zu einem Infofeld führt, z. B. das Tippen auf eine Schaltfläche, um einen neuen Chat zu starten. In diesem Fall ist es auch sinnvoll, die anfängliche Benachrichtigung zu unterdrücken, die beim Erstellen eines Infofelds gesendet wird.

Es gibt Methoden, mit denen Sie Flags festlegen können, die folgende Verhaltensweisen ermöglichen: setAutoExpandBubble() und setSuppressNotification().

Das folgende Beispiel zeigt, wie ein Infofeld so konfiguriert wird, dass es automatisch im maximierten Zustand angezeigt wird:

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

Lebenszyklus des Infofeldinhalts

Wenn ein Infofeld maximiert wird, durchläuft die Inhaltsaktivität den normalen Prozesslebenszyklus. Dies führt dazu, dass die Anwendung zu einem Vordergrundprozess wird, sofern sie nicht bereits vorhanden ist.

Wenn das Infofeld minimiert oder geschlossen wird, wird die Aktivität gelöscht. Dies kann dazu führen, dass der Prozess im Cache gespeichert und später beendet wird, je nachdem, ob in der App andere Vordergrundkomponenten ausgeführt werden.

Wann Bubbles angezeigt werden

Um Unterbrechungen für den Nutzer zu vermeiden, werden Bubbles nur unter bestimmten Umständen angezeigt.

Wenn eine App auf Android 11 oder höher ausgerichtet ist, wird eine Benachrichtigung nur dann als Infofeld angezeigt, wenn sie die Unterhaltungsanforderungen erfüllt. Wenn eine App auf Android 10 oder niedriger ausgerichtet ist, wird die Benachrichtigung nur dann als Bubble angezeigt, wenn eine oder mehrere der folgenden Bedingungen erfüllt sind:

Wenn keine dieser Bedingungen erfüllt ist, wird die Benachrichtigung anstelle eines Infofelds angezeigt.

Best Practices

  • Benachrichtigungen nur dann als Bubble senden, wenn sie wichtig sind, z. B. wenn sie Teil einer laufenden Kommunikation sind oder der Nutzer explizit eine Bubble für Inhalte anfordert. Bubbles nutzen den verfügbaren Platz auf dem Bildschirm und verdecken andere App-Inhalte.
  • Stellen Sie sicher, dass die Bubble-Benachrichtigung auch als normale Benachrichtigung funktioniert. Wenn der Nutzer das Infofeld deaktiviert, wird eine Bubble-Benachrichtigung als normale Benachrichtigung angezeigt.
  • Halten Sie die Funktionalität so spezifisch und schlank wie möglich. Prozesse, die über ein Infofeld gestartet werden, wie Aktivitäten und Dialogfelder, werden im Infofeld-Container angezeigt. Das bedeutet, dass eine Blase einen Aufgabenstapel haben kann. Es kann kompliziert werden, wenn die Blase viele Funktionen oder Navigationen enthält.
  • Rufen Sie super.onBackPressed auf, wenn Sie onBackPressed in der Bubble-Aktivität überschreiben. Andernfalls funktioniert das Infofeld möglicherweise nicht richtig.

Wenn in einem minimierten Infofeld eine aktualisierte Nachricht eingeht, wird im Infofeld ein Badgesymbol angezeigt, das auf eine ungelesene Nachricht hinweist. Wenn der Nutzer die Nachricht in der verknüpften App öffnet, gehe so vor:

Beispiel-App

Die Beispiel-App People ist eine einfache Unterhaltungs-App mit Bubbles. Zu Demonstrationszwecken verwendet diese Anwendung Chatbots. In realen Anwendungen dürfen Bubbles nur von Menschen und nicht von Bots für Nachrichten verwendet werden.