Benachrichtigungs-Bubbles für Unterhaltungen verwenden

Benachrichtigungs-Bubbles machen es Nutzern leichter, Unterhaltungen zu sehen und daran teilzunehmen.

Abbildung 1. Eine Chat-Bubble.

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

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

Benachrichtigungs-Bubbles sind vom Nutzer aktiviert. Dazu müssen sie bei Benachrichtigungen, die Bubbles unterstützen, auf die Bubble-Schaltfläche tippen. Dadurch wird dieser bestimmte Chat immer als Bubble angezeigt. In den Einstellungen können Nutzer festlegen, welche Chats als Bubbles angezeigt werden sollen, oder die Einstellungen für die gesamte App ändern.

Nutzer können Folgendes tun:

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

Notification Bubble API

Benachrichtigungs-Bubbles werden mithilfe der Notification API erstellt. Wenn Sie möchten, dass Ihre Benachrichtigung als Bubble angezeigt wird, hängen Sie zusätzliche Daten an.

Die maximierte Ansicht der Bubble wird aus einer von dir ausgewählten Aktivität erstellt. Konfigurieren Sie die Aktivität so, dass sie korrekt 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 die Meldung stattdessen als Benachrichtigung angezeigt.

Der folgende Code zeigt, wie eine Bubble 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 deiner App 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 Sie documentLaunchMode explizit auf "always" setzen. Ab Android 11 musst du diesen Wert nicht mehr explizit festlegen, da das System die documentLaunchMode aller Unterhaltungen automatisch auf "always" setzt.

So senden Sie eine Benachrichtigungs-Bubble:

  1. Erstellen Sie 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 die Metadaten zur Benachrichtigung hinzuzufügen.
  4. Wenn du Android 11 (API-Level 30) oder höher verwendest, achte darauf, dass die Bubble-Metadaten oder die Benachrichtigung auf eine Freigabeverknüpfung verweisen.
  5. Ändern Sie Ihre App so, dass Benachrichtigungen, die als Bubbles angezeigt werden, nicht abgebrochen werden. Wenn Sie eine Benachrichtigung schließen, wird die Bubble vom Bildschirm entfernt. Wenn du eine Bubble öffnest, wird die zugehörige Benachrichtigung automatisch ausgeblendet.

Diese Schritte werden im folgenden Beispiel veranschaulicht:

// Create a bubble intent.
val target = Intent(context, BubbleActivity::class.java)
val bubbleIntent =
    PendingIntent.getActivity(context, 0, target, PendingIntent.FLAG_IMMUTABLE /* 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 =
    ShortcutInfoCompat.Builder(context, shortcutId)
        .setCategories(setOf(category))
        .setIntent(Intent(Intent.ACTION_DEFAULT))
        .setLongLived(true)
        .setShortLabel("Chat partner name")
        .build()
// Publish the shortcut, otherwise the bubble metadata will not apply.
ShortcutManagerCompat.pushDynamicShortcut(context, shortcut)

// Create a bubble metadata.
val bubbleData = NotificationCompat.BubbleMetadata.Builder(bubbleIntent,
    IconCompat.createWithResource(context, R.drawable.ic_logo))
    .setDesiredHeight(600)
    .build()

// Create a notification, referencing the sharing shortcut.
val builder = NotificationCompat.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(R.drawable.chat)
    .setBubbleMetadata(bubbleData)
    .setShortcutId(shortcutId)
    .addPerson(chatPartner)

Wenn sich deine App im Vordergrund befindet, wenn eine Bubble gesendet wird, wird die Wichtigkeit ignoriert und die Bubble wird immer angezeigt, es sei denn, der Nutzer blockiert Bubbles oder Benachrichtigungen von deiner App.

Maximierte Bubble erstellen

Du kannst deine Bubble so konfigurieren, dass sie automatisch maximiert angezeigt wird. Wir empfehlen, diese Funktion nur zu verwenden, wenn der Nutzer eine Aktion ausführt, die zu einer Bubble führt, z. B. das Tippen auf eine Schaltfläche, 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, um diese Verhaltensweisen zu aktivieren: setAutoExpandBubble() und setSuppressNotification().

Das folgende Beispiel zeigt, wie Sie eine Bubble so konfigurieren, dass sie automatisch maximiert wird:

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

Lebenszyklus von Bubble-Inhalten

Wenn eine Bubble maximiert wird, durchläuft die Aktivität des Inhalts den normalen Prozesslebenszyklus. Dadurch wird die Anwendung zu einem Vordergrundprozess, falls sie das nicht bereits ist.

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

Wann Bubbles angezeigt werden

Damit Nutzer nicht zu oft unterbrochen werden, 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 dann 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 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 einer Bubble angezeigt.

Aktivitäten über Bubbles starten

Wenn eine Bubble eine neue Aktivität startet, wird die neue Aktivität entweder innerhalb derselben Aufgabe und desselben Bubble-Fensters oder in einer neuen Aufgabe im Vollbildmodus gestartet. Dabei wird die Bubble, die sie gestartet hat, minimiert.

So startest du 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.

Denke daran, dass eine Bubble eine bestimmte Unterhaltung darstellt. Aktivitäten, die innerhalb der Bubble gestartet werden, sollten sich also auf diese Unterhaltung beziehen. Außerdem wird durch das Starten einer Aktivität innerhalb der Bubble der Aufgabenstapel der Bubble vergrößert, was die Nutzererfahrung, insbesondere bei der Navigation, erschweren könnte.

Best Practices

  • Sende eine Benachrichtigung nur dann als Bubble, wenn sie wichtig ist, z. B. wenn sie Teil einer laufenden Kommunikation ist oder wenn der Nutzer explizit eine Bubble für Inhalte anfordert. Bubbles nehmen Platz auf dem Bildschirm ein und verdecken andere App-Inhalte.
  • Achte darauf, dass deine Bubble-Benachrichtigung auch als normale Benachrichtigung funktioniert. Wenn der Nutzer die Bubble deaktiviert, wird eine Bubble-Benachrichtigung als normale Benachrichtigung angezeigt.
  • Verwenden Sie das Compose-Element BackHandler und binden Sie den Parameter enabled an den UI-Status, damit das Zurück-Drücken nur bei Bedarf abgefangen wird. Sobald der Handler deaktiviert ist, wird die Bubble minimiert.

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

Beispiel-App

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