Sử dụng bong bóng để cho phép người dùng tham gia vào các cuộc trò chuyện

Bong bóng trò chuyện giúp người dùng xem và tham gia các cuộc trò chuyện dễ dàng hơn.

Hình 1. Bong bóng trò chuyện.

Bong bóng trò chuyện được tích hợp vào hệ thống thông báo. Chúng nổi trên ứng dụng khác nội dung và theo dõi người dùng ở mọi nơi. Người dùng có thể mở rộng bong bóng để xem tương tác với nội dung ứng dụng và có thể thu gọn nội dung đó khi khi sử dụng chúng.

Khi thiết bị bị khoá hoặc màn hình luôn bật đang hoạt động, bong bóng trò chuyện sẽ xuất hiện dưới dạng thông báo thường làm.

Bong bóng trò chuyện là một tính năng mà bạn có thể chọn không sử dụng. Khi một ứng dụng hiển thị bong bóng đầu tiên, hộp thoại cấp quyền cung cấp hai lựa chọn:

  • Chặn tất cả bong bóng trò chuyện trong ứng dụng của bạn. Thông báo không bị chặn mà không bao giờ xuất hiện dưới dạng bong bóng.
  • Cho phép tất cả bong bóng trò chuyện của ứng dụng. Tất cả thông báo được gửi bằng BubbleMetaData xuất hiện dưới dạng bong bóng.

API bong bóng

Bong bóng trò chuyện được tạo bằng API thông báo nên hãy gửi thông báo dưới dạng bình thường. Nếu bạn muốn thông báo hiển thị dưới dạng bong bóng trò chuyện, hãy đính kèm thêm dữ liệu vào ứng dụng.

Chế độ xem mở rộng của bong bóng trò chuyện được tạo từ một hoạt động (activity) mà bạn chọn. Định cấu hình hoạt động để hiển thị chính xác dưới dạng bong bóng trò chuyện. Hoạt động phải có thể đổi kích thướcđược nhúng. Nếu thiếu một trong hai yêu cầu này thì nội dung đó sẽ hiển thị dưới dạng thông báo.

Mã sau đây minh hoạ cách triển khai bong bóng trò chuyện:

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

Nếu ứng dụng của bạn hiển thị nhiều bong bóng trò chuyện cùng loại, chẳng hạn như nhiều bong bóng trò chuyện các cuộc trò chuyện với những người liên hệ khác nhau, thì hoạt động này phải có thể khởi chạy nhiều thực thể. Trên các thiết bị chạy Android 10 trở xuống: thông báo sẽ không hiển thị dưới dạng bong bóng trừ phi bạn đặt rõ ràng documentLaunchMode đến "always". Kể từ Android 11, bạn không cần phải hãy đặt giá trị này vì hệ thống sẽ tự động đặt tất cả các cuộc trò chuyện documentLaunchMode thành "always".

Để gửi bong bóng trò chuyện, hãy làm theo các bước sau:

  1. Tạo thông báo với tư cách là bạn thường làm.
  2. Gọi BubbleMetadata.Builder(PendingIntent, Icon) hoặc BubbleMetadata.Builder(String) để tạo đối tượng BubbleMetadata.
  3. Sử dụng setBubbleMetadata() để thêm siêu dữ liệu vào thông báo.
  4. Nếu ứng dụng của bạn nhắm đến Android 11 trở lên, hãy đảm bảo bong bóng trò chuyện siêu dữ liệu hoặc thông báo tham chiếu đến lối tắt chia sẻ.

Các bước này được thể hiện trong ví dụ sau đây:

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

Nếu ứng dụng của bạn chạy ở nền trước khi bong bóng trò chuyện được gửi đi, thì mức độ quan trọng sẽ bị bỏ qua và bong bóng trò chuyện của bạn sẽ luôn xuất hiện, trừ phi người dùng chặn bong bóng trò chuyện hoặc thông báo khỏi ứng dụng của bạn.

Tạo bong bóng mở rộng

Bạn có thể định cấu hình bong bóng trò chuyện để tự động hiển thị ở trạng thái mở rộng. T4 chỉ nên sử dụng tính năng này nếu người dùng thực hiện một hành động kết quả trong bong bóng trò chuyện, chẳng hạn như nhấn vào một nút để bắt đầu cuộc trò chuyện mới. Trong trường hợp này, bạn cũng nên ngăn chặn thông báo ban đầu được gửi khi bong bóng trò chuyện đã tạo.

Có các phương pháp bạn có thể sử dụng để đặt cờ cho phép các hành vi này: setAutoExpandBubble()setSuppressNotification().

Ví dụ sau đây cho thấy cách định cấu hình bong bóng trò chuyện để tự động trình bày ở trạng thái mở rộng:

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

Vòng đời của nội dung bong bóng trò chuyện

Khi một bong bóng trò chuyện được mở rộng, hoạt động nội dung sẽ trải qua quá trình vòng đời, dẫn đến trở thành một quy trình trên nền trước (nếu chưa sẵn sàng).

Khi thu gọn hoặc đóng bong bóng, hoạt động sẽ bị huỷ bỏ. Điều này có thể dẫn đến việc quá trình được lưu vào bộ nhớ đệm và sau đó bị dừng, tuỳ thuộc vào việc ứng dụng đang chạy các thành phần trên nền trước khác.

Khi bong bóng trò chuyện xuất hiện

Để giảm tình trạng gián đoạn cho người dùng, bong bóng trò chuyện chỉ xuất hiện trong một số trong trường hợp cụ thể.

Nếu một ứng dụng nhắm mục tiêu đến Android 11 trở lên, thì thông báo sẽ không hiển thị xuất hiện dưới dạng bong bóng trừ phi gặp cuộc trò chuyện . Nếu một ứng dụng nhắm mục tiêu Trên Android 10 trở xuống, thông báo chỉ xuất hiện dưới dạng bong bóng nếu một hoặc nhiều điều kiện sau được đáp ứng:

Nếu không có điều kiện nào trong số này được đáp ứng, thông báo sẽ hiển thị thay vì .

Khởi chạy hoạt động từ bong bóng trò chuyện

Khi bong bóng khởi chạy một hoạt động mới, hoạt động mới đó sẽ khởi chạy trong cùng một việc cần làm và trong cùng một cửa sổ bong bóng trò chuyện hoặc trong một việc cần làm mới ở chế độ toàn màn hình, thu gọn bong bóng khởi chạy quảng cáo.

Để khởi chạy một hoạt động mới trong cùng tác vụ với bong bóng, hãy làm như sau: 1. Hãy sử dụng ngữ cảnh hoạt động khi khởi chạy ý định, activity.startActivity(intent) và 1. Không đặt cờ FLAG_ACTIVITY_NEW_TASK cho ý định.

Nếu không, hoạt động mới sẽ bắt đầu trong một việc cần làm mới và bong bóng sẽ đã thu gọn.

Lưu ý rằng bong bóng đại diện cho một cuộc trò chuyện cụ thể, vì vậy, các hoạt động khởi động trong bong bóng trò chuyện phải liên quan đến cuộc trò chuyện đó. Ngoài ra, khởi chạy một hoạt động trong bong bóng sẽ làm tăng ngăn xếp tác vụ của bong bóng và có thể khiến trải nghiệm người dùng trở nên phức tạp, đặc biệt là xung quanh điều hướng.

Các phương pháp hay nhất

  • Chỉ gửi thông báo dưới dạng bong bóng trò chuyện nếu thông báo đó quan trọng, chẳng hạn như khi một phần của quá trình giao tiếp đang diễn ra hoặc nếu người dùng yêu cầu rõ ràng sử dụng bong bóng nội dung. Bong bóng trò chuyện sử dụng không gian màn hình và che phủ nội dung khác của ứng dụng.
  • Đảm bảo thông báo dạng bong bóng trò chuyện cũng hoạt động như một thông báo thông thường. Thời gian người dùng tắt bong bóng trò chuyện, một thông báo dạng bong bóng trò chuyện hiển thị như bình thường .
  • Gọi super.onBackPressed khi ghi đè onBackPressed trong bong bóng của bạn. Nếu không, bong bóng trò chuyện của bạn có thể không hoạt động chính xác.

Khi một bong bóng trò chuyện đã thu gọn nhận được một tin nhắn cập nhật, bong bóng trò chuyện đó sẽ hiển thị một huy hiệu để cho biết một thư chưa đọc. Khi người dùng mở thư trong ứng dụng liên kết, hãy làm theo các bước sau:

Ứng dụng mẫu

Chiến lược phát hành đĩa đơn Mọi người ứng dụng mẫu là một ứng dụng trò chuyện sử dụng bong bóng. Nhằm mục đích minh hoạ, ứng dụng này sử dụng chatbot. Trong các ứng dụng thực tế, hãy sử dụng bong bóng cho tin nhắn bằng cách con người.