Benachrichtigungs-Bubbles für Unterhaltungen verwenden

Mit Benachrichtigungs-Bubbles können Nutzer Unterhaltungen leichter sehen und daran teilnehmen.

Abbildung 1 Eine Chat-Bubble

Sie werden über anderen App-Inhalten eingeblendet. Nutzer können sie maximieren, um die App-Inhalte zu sehen und mit ihnen zu interagieren, und sie minimieren, wenn sie sie nicht verwenden.

Wenn das Gerät gesperrt ist oder das Always-on-Display aktiv ist, werden Bubbles wie normale Benachrichtigungen angezeigt.

Benachrichtigungs-Bubbles werden vom Nutzer aktiviert. Dazu tippt er in Benachrichtigungen, die Bubbles unterstützen, auf die Bubble-Schaltfläche. So wird für diesen bestimmten Chat immer eine Bubble angezeigt. In den Einstellungen können Nutzer anpassen, für welche Chats Bubbles angezeigt werden sollen, oder die Einstellungen für die gesamte App ändern.

Nutzer haben folgende Möglichkeiten:

  • Alle Benachrichtigungs-Bubbles aus Ihrer App blockieren. Benachrichtigungen werden nicht blockiert, aber nie als Bubbles angezeigt.
  • Ausgewählte Benachrichtigungs-Bubbles aus Ihrer App zulassen. Benachrichtigungen, die über die Bubble-Schaltfläche als Bubble angezeigt werden, sind „ausgewählt“.
  • Alle Benachrichtigungs-Bubbles aus Ihrer App zulassen. Alle Benachrichtigungen, die mit BubbleMetadata gesendet werden, werden als Bubbles angezeigt.

Die Notification Bubble API

Benachrichtigungs-Bubbles werden mit der Notification API erstellt. Wenn Ihre Benachrichtigung als Bubble angezeigt werden soll, fügen Sie ihr zusätzliche Daten hinzu.

Die maximierte Ansicht der Bubble wird aus einer von Ihnen ausgewählten Aktivität erstellt. Konfigurieren Sie die Aktivität so, dass sie richtig als Bubble angezeigt wird. Die Aktivität muss in der Größe anpassbar und eingebettet sein. Wenn eine dieser Anforderungen nicht erfüllt ist, wird sie vom System stattdessen als Benachrichtigung angezeigt.

Der folgende Code zeigt, wie Sie eine Bubble implementieren:

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

Wenn Ihre App mehrere Bubbles desselben Typs anzeigt, 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 als Bubbles angezeigt, wenn Sie documentLaunchMode explizit auf "always" setzen. Ab Android 11 müssen Sie diesen Wert nicht explizit festlegen, da das System documentLaunchMode für alle Unterhaltungen automatisch auf "always" setzt.

So senden Sie eine Benachrichtigungs-Bubble:

  1. Erstellen Sie eine Benachrichtigung wie gewohnt.
  2. Rufen Sie BubbleMetadata.Builder(PendingIntent, Icon) oder BubbleMetadata.Builder(String) auf, um ein BubbleMetadata Objekt zu erstellen.
  3. Fügen Sie der Benachrichtigung mit setBubbleMetadata() die Metadaten hinzu.
  4. Wenn Sie auf Android 11 (API-Level 30) oder höher ausgerichtet sind, muss in den Bubble-Metadaten oder der Benachrichtigung eine Verknüpfung zum Teilen angegeben sein.
  5. Ändern Sie Ihre App so, dass Benachrichtigungen, die als Bubbles angezeigt werden, nicht abgebrochen werden. Wenn Sie eine Benachrichtigung abbrechen, wird die Bubble vom Bildschirm entfernt. Wenn Sie eine Bubble öffnen, wird die zugehörige Benachrichtigung automatisch ausgeblendet.

Diese Schritte werden im folgenden Beispiel gezeigt:

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

Wenn Ihre App im Vordergrund ist, wenn eine Bubble gesendet wird, wird die Wichtigkeit ignoriert und Ihre Bubble wird immer angezeigt, es sei denn, der Nutzer blockiert Bubbles oder Benachrichtigungen von Ihrer App.

Maximierte Bubble erstellen

Sie können Ihre Bubble so konfigurieren, dass sie automatisch im maximierten Zustand angezeigt wird. Wir empfehlen, diese Funktion nur zu verwenden, wenn der Nutzer eine Aktion ausführt, die zu einer Bubble führt, z. B. wenn er auf eine Schaltfläche tippt, um einen neuen Chat zu starten. In diesem Fall ist es auch sinnvoll, die erste Benachrichtigung zu unterdrücken, die beim Erstellen einer Bubble gesendet wird.

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

Das folgende Beispiel zeigt, wie Sie eine Bubble so konfigurieren, dass sie automatisch im maximierten Zustand angezeigt wird:

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

Lebenszyklus von Bubble-Inhalten

Wenn eine Bubble maximiert wird, durchläuft die Inhaltsaktivität den normalen Prozess Lebenszyklus. Dadurch wird die Anwendung zu einem Vordergrundprozess, falls sie es nicht bereits ist.

Wenn die Bubble minimiert oder geschlossen wird, wird die Aktivität beendet. Je nachdem, ob in der App andere Vordergrundkomponenten ausgeführt werden, kann dies dazu führen, dass der Prozess im Cache gespeichert und später beendet wird.

Wann werden Bubbles angezeigt?

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

Wenn eine App auf Android 11 (API-Level 30) oder höher ausgerichtet ist, wird eine Benachrichtigung nur als Bubble angezeigt, wenn sie die Anforderungen für Unterhaltungen erfüllt. Wenn eine App auf Android 10 (API-Level 29) oder niedriger ausgerichtet ist, wird die Benachrichtigung nur als Bubble angezeigt, wenn eine oder mehrere der folgenden Bedingungen erfüllt sind:

Wenn keine dieser Bedingungen erfüllt ist, wird die Benachrichtigung anstelle einer Bubble angezeigt.

Aktivitäten aus Bubbles starten

Wenn eine Bubble eine neue Aktivität startet, wird die neue Aktivität entweder in derselben Aufgabe und demselben Bubble-Fenster oder in einer neuen Aufgabe im Vollbildmodus gestartet, wobei die Bubble, die sie gestartet hat, minimiert wird.

So starten Sie eine neue Aktivität in derselben Aufgabe wie die Bubble: 1. Verwenden Sie den Aktivitätskontext, wenn Sie Intents starten, activity.startActivity(intent), und 1. Legen Sie das Flag FLAG_ACTIVITY_NEW_TASK nicht für den Intent fest.

Andernfalls wird die neue Aktivität in einer neuen Aufgabe gestartet und die Bubble wird minimiert.

Eine Bubble stellt eine bestimmte Unterhaltung dar. Aktivitäten, die in der Bubble gestartet werden, sollten sich daher auf diese Unterhaltung beziehen. Außerdem erhöht das Starten einer Aktivität in der Bubble den Aufgabenstack der Bubble und kann die Nutzerfreundlichkeit beeinträchtigen, insbesondere bei der Navigation.

Best Practices

  • Senden Sie eine Benachrichtigung nur als Bubble, wenn sie wichtig ist, z. B. wenn sie Teil einer laufenden Unterhaltung ist oder wenn der Nutzer explizit eine Bubble für Inhalte anfordert. Bubbles nehmen Platz auf dem Bildschirm ein und verdecken andere App-Inhalte.
  • Achten Sie darauf, dass Ihre Bubble-Benachrichtigung auch als normale Benachrichtigung funktioniert. Wenn der Nutzer die Bubble deaktiviert, wird eine Bubble-Benachrichtigung als normale Benachrichtigung angezeigt.
  • Verwenden Sie die BackHandler zusammensetzbare Funktion und verknüpfen Sie den Parameter enabled mit dem UI-Status, damit Rückschritte nur bei Bedarf abgefangen werden. Sobald sich der Handler deaktiviert, wird die Bubble minimiert.

Wenn eine minimierte Bubble eine aktualisierte Nachricht erhält, wird in der Bubble ein Badge-Symbol angezeigt, um auf eine ungelesene Nachricht hinzuweisen. Wenn der Nutzer die Nachricht in der zugehörigen App öffnet, gehen Sie so vor:

Beispiel-App

Die Beispiel-App SociaLite ist eine Unterhaltungs-App, die Bubbles verwendet. Zu Demonstrationszwecken werden in dieser App Chatbots verwendet. In realen Anwendungen sollten Sie Bubbles für Nachrichten von Menschen verwenden.