Mit Benachrichtigungs-Bubbles können Nutzer Unterhaltungen leichter sehen und daran teilnehmen.
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
BubbleMetadatagesendet 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:
- Erstellen Sie eine Benachrichtigung wie gewohnt.
- Rufen Sie
BubbleMetadata.Builder(PendingIntent, Icon)oderBubbleMetadata.Builder(String)auf, um einBubbleMetadataObjekt zu erstellen. - Fügen Sie der Benachrichtigung mit
setBubbleMetadata()die Metadaten hinzu. - 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.
- Ä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:
- Die Benachrichtigung verwendet
MessagingStyleund hat einePersonhinzugefügt. - Die Benachrichtigung stammt von einem Aufruf von
Service.startForeground, hat diecategoryCATEGORY_CALLund einePersonwurde hinzugefügt. - Die App ist im Vordergrund, wenn die Benachrichtigung gesendet wird.
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
BackHandlerzusammensetzbare Funktion und verknüpfen Sie den Parameterenabledmit 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:
- Aktualisieren Sie die
BubbleMetadata, um die Benachrichtigung zu unterdrücken. Rufen SieBubbleMetadata.Builder.setSuppressNotification()auf. Dadurch wird das Badge-Symbol entfernt, um anzuzeigen, dass der Nutzer mit der Nachricht interagiert hat. - Set
Notification.Builder.setOnlyAlertOnce()auftrue, um den Ton oder die Vibration zu unterdrücken, die mit der Aktualisierung vonBubbleMetadataeinhergeht.
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.