Mit Bubbles können Nutzer an Unterhaltungen teilnehmen

Bubbles erleichtern es den Nutzern, Unterhaltungen zu sehen und daran teilzunehmen.

<ph type="x-smartling-placeholder">
Abbildung 1. Eine Sprechblase.

Infofelder sind im Benachrichtigungssystem integriert. Sie schweben über anderen Apps und den Nutzern folgen, egal wo sie sich befinden. Nutzer können Bubbles maximieren, und mit dem App-Inhalt interagieren. Sie können sie minimieren, wenn Sie sie verwenden.

Wenn das Gerät gesperrt oder das Always-on-Display aktiv ist, erscheinen Bubbles als wie gewohnt.

Infofelder können deaktiviert werden. Wenn eine App das erste Infofeld anzeigt, wird ein Berechtigungsdialogfeld bietet zwei Auswahlmöglichkeiten:

  • Alle Bubbles in deiner App blockieren. Benachrichtigungen werden nicht blockiert, aber sie werden nie als Blasen angezeigt.
  • Alle Bubbles von deiner App zulassen. Alle Benachrichtigungen gesendet mit BubbleMetaData werden als Bubbles angezeigt.

Die Bubble API

Infofelder werden mit der Notification API erstellt. Senden Sie Ihre Benachrichtigung daher als normal sein. Wenn Ihre Benachrichtigung als Bubble angezeigt werden soll, fügen Sie zusätzliche Daten hinzu hinzufügen.

Die maximierte Ansicht einer Blase wird auf der Grundlage einer von Ihnen ausgewählten Aktivität erstellt. Konfigurieren Sie die Aktivität so, dass sie korrekt als Bubble angezeigt wird. Die Aktivität muss vergrößerbar und embedded Wenn es fehlt eine dieser beiden Anforderungen erfüllt, wird stattdessen eine Benachrichtigung angezeigt.

Im folgenden Code sehen Sie, wie ein Infofeld 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 App mehrere Bubbles desselben Typs angezeigt werden, z. B. mehrere Chats Unterhaltungen mit verschiedenen Kontakten führen können, muss die Aktivität auf mehreren Instanzen. Auf Geräten mit Android 10 und niedriger werden Benachrichtigungen nur dann als Bubbles angezeigt, documentLaunchMode bis "always". Ab Android 11 müssen Sie legen Sie diesen Wert fest, da das System automatisch documentLaunchMode in "always".

So senden Sie eine Bubble:

  1. Erstellen Sie eine Benachrichtigung, wenn Sie wie das normalerweise möglich ist.
  2. BubbleMetadata.Builder(PendingIntent, Icon) anrufen oder BubbleMetadata.Builder(String) 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 muss das Infofeld Metadaten oder Benachrichtigungen auf eine Freigabeverknüpfung verweisen.

Diese Schritte werden im folgenden Beispiel gezeigt:

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 deine App im Vordergrund ausgeführt wird, während eine Bubble gesendet wird, wird die Wichtigkeit ignoriert und Ihre Bubble wird immer angezeigt, es sei denn, der Nutzer blockiert sie oder Benachrichtigungen aus Ihrer App.

Maximierte Bubble erstellen

Sie können das Infofeld so konfigurieren, dass es automatisch maximiert angezeigt wird. Mi. empfehlen, diese Funktion nur zu verwenden, wenn der Nutzer eine Aktion ausführt, Ergebnisse in einer Blase, z. B. wenn Sie auf eine Schaltfläche tippen, um einen neuen Chat zu starten. In diesem Fall Es ist auch sinnvoll, die erste Benachrichtigung zu unterdrücken, die gesendet wird, wenn eine Bubble erstellt.

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

Das folgende Beispiel zeigt, wie Sie ein Infofeld so konfigurieren, dass es automatisch eingeblendet wird im maximierten Zustand:

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 Infofeld-Inhalts

Wenn ein Infofeld maximiert wird, durchläuft die Inhaltsaktivität den normalen Prozess. Lebenszyklus, was dazu führt, dass Anwendung, die zu einem Vordergrundprozess wird, falls dies noch nicht der Fall ist.

Wenn das Infofeld minimiert oder geschlossen wird, wird die Aktivität gelöscht. Dies könnte dass der Prozess im Cache gespeichert und später beendet wird, je nachdem, In der App werden andere Komponenten im Vordergrund ausgeführt.

Wann werden Bubbles angezeigt?

Um Unterbrechungen für den Nutzer zu vermeiden, werden Bubbles nur unter bestimmten Situation.

Wenn eine App auf Android 11 oder höher ausgerichtet ist, werden Benachrichtigungen als Blase angezeigt, es sei denn, dies entspricht der Konversation Anforderungen. Wenn eine App auf Android 10 oder niedriger wird die Benachrichtigung nur dann als Bubble angezeigt, eine oder mehrere der folgenden Bedingungen erfüllt sind:

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

Aktivitäten aus Bubbles starten

Wenn eine neue Aktivität in einem Infofeld angezeigt wird, startet die neue Aktivität entweder innerhalb derselben Aufgabe und im selben Fenster mit Bubbles oder in einer neuen Aufgabe im Vollbildmodus, indem das Infofeld minimiert wird, mit dem es ausgelöst wurde.

So starten Sie eine neue Aktivität in derselben Aufgabe wie die Bubble: 1. Verwenden Sie beim Starten von Intents den Aktivitätskontext, 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 das Infofeld wird minimiert.

Denken Sie daran, dass eine Blase für eine bestimmte Unterhaltung steht. Aktivitäten die in der Bubble angezeigt werden, sollten sich auf diese Unterhaltung beziehen. Außerdem Wenn Sie eine Aktivität innerhalb der Blase starten, erhöht sich der Aufgabenstapel der Blase. und die User Experience potenziell verkomplizieren, Navigation.

Best Practices

  • Benachrichtigungen nur als Bubble senden, wenn es wichtig ist, z. B. wenn sie oder wenn der Nutzer ausdrücklich eine Bubble anfordert, Inhalte. Bubbles nutzen den Platz auf dem Bildschirm und verdecken andere App-Inhalte.
  • Achte darauf, dass die Bubble-Benachrichtigung als normale Benachrichtigung funktioniert. Wann? deaktiviert der Nutzer die Bubble, wird eine normale Benachrichtigung angezeigt. Benachrichtigung.
  • Beim Überschreiben super.onBackPressed aufrufen onBackPressed in der Bubble Aktivitäten. Andernfalls funktioniert die Blase möglicherweise nicht richtig.

Wenn eine minimierte Bubble eine aktualisierte Nachricht erhält, wird im Infofeld ein Badge angezeigt. um eine ungelesene Nachricht anzuzeigen. Wenn der Nutzer die Nachricht im verknüpfte App:

Beispiel-App

Die Personen Beispiel-App ist eine Unterhaltungs-App, die Bubbles verwendet. Zu Demonstrationszwecken Diese App verwendet Chatbots. In realen Anwendungen können Sie Bubbles für Nachrichten verwenden, Menschen.