Używaj dymków, aby umożliwić użytkownikom uczestniczenie w rozmowach

Dymki ułatwiają użytkownikom wyświetlanie rozmów i uczestniczenie w nich.

Rysunek 1. Dymek czatu.

Dymki są wbudowane w system powiadomień. Wyświetlają się nad innymi aplikacjami. i śledzić użytkownika niezależnie od tego, gdzie się on znajduje. Użytkownicy mogą rozwijać dymki, i wchodzą w interakcję z zawartością aplikacji oraz mogą je zwijać, jak ich używać.

Gdy urządzenie jest zablokowane lub włączony jest tryb Zawsze na ekranie, dymki wyświetlają się jako tak jak zwykle.

Dymki można wyłączyć. Gdy aplikacja wyświetla pierwszy dymek, w oknie uprawnień są 2 opcje:

  • Blokuj wszystkie dymki z aplikacji. Powiadomienia nie są zablokowane, ale mogą nigdy nie będą wyświetlane jako dymki.
  • Zezwól na wszystkie dymki z aplikacji. Wszystkie powiadomienia wysłane przez BubbleMetaData są wyświetlane jako dymki.

Interfejs API dymku

Dymki są tworzone przy użyciu interfejsu API powiadomień, więc wyślij powiadomienie jako w normie. Jeśli chcesz, by powiadomienie wyświetlało się jako dymek, dołącz dodatkowe dane .

Rozwinięty widok dymku jest tworzony na podstawie wybranej przez Ciebie aktywności. Skonfiguruj aktywność tak, aby wyświetlała się prawidłowo jako dymek. Działanie musi być resizeable oraz umieszczony. Jeśli nie, któreś z nich zostanie wyświetlone jako powiadomienie.

Poniższy kod ilustruje sposób implementacji dymka:

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

Jeśli w aplikacji wyświetla się kilka dymków tego samego typu, np. wiele dymków czatu rozmów z różnymi kontaktami, aktywność musi umożliwiać wiele instancji. Na urządzeniach z Androidem 10 lub starszym: powiadomienia nie są wyświetlane jako dymki, chyba że wyraźnie ustawisz documentLaunchMode do "always" Począwszy od Androida 11 nie trzeba specjalnie zaznaczać ustaw tę wartość, ponieważ system automatycznie ustawia wszystkie documentLaunchMode do "always".

Aby wysłać dymek, wykonaj te czynności:

  1. Tworzenie powiadomienia podczas co zwykle robimy.
  2. Zadzwoń pod numer BubbleMetadata.Builder(PendingIntent, Icon) lub BubbleMetadata.Builder(String) aby utworzyć obiekt BubbleMetadata.
  3. Używaj setBubbleMetadata() aby dodać metadane do powiadomienia.
  4. Jeśli kierujesz aplikację na Androida 11 lub nowszego, upewnij się, że dymek metadane lub powiadomienie odnoszą się do skrótu do udostępniania.

Czynności te zostały pokazane w tym przykładzie:

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

Jeśli w chwili wysyłania dymku aplikacja działa na pierwszym planie, ważność jest ignorowana a dymek jest zawsze widoczny, chyba że użytkownik zablokuje dymki lub powiadomienia z aplikacji.

Utwórz rozwinięty dymek

Możesz skonfigurować dymek tak, aby automatycznie wyświetlał go w stanie rozwiniętym. Śr jest zalecana tylko wtedy, gdy użytkownik wykona działanie, pojawi się dymek, np. kliknięcie przycisku rozpoczynania nowego czatu. W tym przypadku warto też pominąć początkowe powiadomienie wysyłane, gdy dymek Utworzono.

Istnieją pewne metody ustawiania flag, które umożliwiają takie zachowania: setAutoExpandBubble() oraz setSuppressNotification()

Przykład poniżej pokazuje, jak skonfigurować dymek do automatycznego prezentowania w stanie rozwiniętym:

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

Cykl życia treści dymków

Po rozwinięciu dymka aktywność dotycząca treści przechodzi przez zwykły proces cykl życia, co powoduje gdy aplikacja stanie się procesem na pierwszym planie, jeśli jeszcze nie jest tym procesem.

Gdy dymek zostanie zwinięty lub zamknięty, aktywność zostaje zniszczona. Może to spowodować zapisywanych w pamięci podręcznej, a następnie zatrzymywanych, w zależności od tego, czy Aplikacja ma uruchomione inne komponenty na pierwszym planie.

Kiedy pojawiają się dymki

Aby zmniejszyć liczbę przerw u użytkownika, dymki wyświetlają się tylko pod określonymi okoliczności.

Jeśli aplikacja jest kierowana na Androida 11 lub nowszego, powiadomienie nie wyświetlają się jako dymek, chyba że pasują do wątku . Jeśli aplikacja jest kierowana Android 10 lub starszy, powiadomienie wyświetla się jako dymek tylko wtedy, gdy jest spełniony co najmniej jeden z tych warunków:

Jeśli żaden z tych warunków nie zostanie spełniony, zamiast dymek.

Uruchamianie działań z dymków

Kiedy dymek uruchomi nową aktywność, zostanie ona uruchomiona w ramach tego samego zadania w tym samym oknie z dymkami lub w nowym zadaniu w trybie pełnoekranowym oraz zwiń dymek, który go uruchomił.

Aby uruchomić nowe działanie w ramach tego samego zadania co dymek: 1. Wykorzystaj kontekst aktywności przy uruchamianiu intencji, activity.startActivity(intent) i 1. Nie ustawiaj flagi FLAG_ACTIVITY_NEW_TASK intencji.

W przeciwnym razie nowa aktywność rozpocznie się w nowym zadaniu, a dymek zwinięto.

Pamiętaj, że dymek reprezentuje konkretną rozmowę, więc działania które powinny być powiązane z tą rozmową. Dodatkowo: uruchomienie działania w dymku zwiększa stos zadań tego bańka co może utrudniać korzystanie z aplikacji, zwłaszcza w przypadku nawigacji.

Sprawdzone metody

  • Wysyłaj powiadomienia w postaci dymków tylko wtedy, gdy są one ważne, np. wtedy, gdy jest jako część trwającej komunikacji lub jeśli użytkownik wyraźnie prosi o wyświetlenie dymka treści. Dymki zajmują miejsce na ekranie i zakrywają inne treści w aplikacji.
  • Upewnij się, że powiadomienia w postaci dymków działają jak zwykłe powiadomienia. Kiedy użytkownik wyłączy dymek, powiadomienie w postaci dymka jest wyświetlane powiadomienia.
  • Wywołaj funkcję super.onBackPressed podczas zastępowania onBackPressed w dymku działania. W przeciwnym razie dymek może nie działać prawidłowo.

Gdy zwinięty dymek otrzyma zaktualizowaną wiadomość, pojawi się w nim plakietka oznacza nieprzeczytaną wiadomość. Gdy użytkownik otworzy wiadomość w powiązanej aplikacji, wykonaj te czynności:

Przykładowa aplikacja

Osoby aplikacja przykładowa to aplikacja do rozmów, która korzysta z dymków. Dla celów demonstracyjnych Ta aplikacja korzysta z czatbotów. W prawdziwych aplikacjach używaj dymków do wyświetlania wiadomości ludzi.