ใช้บับเบิลเพื่ออนุญาตให้ผู้ใช้เข้าร่วมการสนทนา

บับเบิลช่วยให้ผู้ใช้เห็นและเข้าร่วมการสนทนาได้ง่ายขึ้น

รูปที่ 1 บับเบิลแชท

โดยจะมีลูกโป่งอยู่ในระบบการแจ้งเตือน ส่วนขยายจะลอยอยู่เหนือแอปอื่นๆ และติดตามผู้ใช้ได้ไม่ว่าจะไปที่ใด ผู้ใช้สามารถขยายลูกโป่งเพื่อแสดง และโต้ตอบกับเนื้อหาแอป โดยสามารถยุบได้เมื่อไม่ โดยใช้ฟีเจอร์เหล่านั้น

เมื่ออุปกรณ์ล็อกอยู่หรือเปิดจอแสดงผลตลอดเวลา บับเบิลจะปรากฏขึ้นเป็น การแจ้งเตือนตามปกติ

ลูกโป่งเป็นฟีเจอร์เลือกไม่ใช้ เมื่อแอปแสดงลูกโป่งแรก กล่องโต้ตอบสิทธิ์มี 2 ตัวเลือก ได้แก่

  • บล็อกบับเบิลทั้งหมดจากแอปของคุณ การแจ้งเตือนจะไม่ถูกบล็อก แต่ ไม่ปรากฏเป็นบับเบิล
  • อนุญาตบับเบิลทั้งหมดจากแอปของคุณ การแจ้งเตือนทั้งหมดที่ส่งด้วย BubbleMetaData จะปรากฏเป็นบับเบิล

API ลูกโป่ง

ลูกโป่งสร้างขึ้นโดยใช้ API การแจ้งเตือน ดังนั้นโปรดส่งการแจ้งเตือนของคุณเป็น ปกติ หากต้องการให้การแจ้งเตือนแสดงเป็นบับเบิล ให้แนบข้อมูลเพิ่มเติม กับโมเดลนั้น

มุมมองแบบขยายของลูกโป่งจะสร้างจากกิจกรรมที่คุณเลือก กำหนดค่ากิจกรรมให้แสดงเป็นบับเบิลอย่างถูกต้อง กิจกรรมต้อง resizeable [ปรับขนาดได้] และ ที่ฝังไว้ ถ้าขาดข้อมูลดังกล่าว ข้อกำหนดข้อใดข้อหนึ่งข้างต้น ระบบจะแสดงเป็นการแจ้งเตือนแทน

โค้ดต่อไปนี้แสดงวิธีใช้งานลูกโป่ง

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

หากแอปแสดงบับเบิลประเภทเดียวกันหลายรายการ เช่น แชทหลายรายการ การสนทนากับรายชื่อติดต่ออื่น กิจกรรมจะต้องสามารถเปิดได้ อินสแตนซ์หลายรายการ สำหรับอุปกรณ์ที่ใช้ Android 10 และต่ำกว่า การแจ้งเตือนจะไม่แสดงเป็นบับเบิล เว้นแต่คุณจะตั้งค่า documentLaunchMode ถึง "always" เริ่มตั้งแต่ Android 11 คุณไม่จำเป็นต้อง ตั้งค่านี้ เนื่องจากระบบจะตั้งค่าการสนทนาทั้งหมดโดยอัตโนมัติ documentLaunchMode ไปยัง "always"

หากต้องการส่งบับเบิล ให้ทำตามขั้นตอนต่อไปนี้

  1. สร้างการแจ้งเตือนเมื่อคุณ แบบปกติทั่วไป
  2. โทร BubbleMetadata.Builder(PendingIntent, Icon) หรือ BubbleMetadata.Builder(String) เพื่อสร้างออบเจ็กต์ BubbleMetadata
  3. ใช้ setBubbleMetadata() เพื่อเพิ่มข้อมูลเมตาลงในการแจ้งเตือน
  4. หากกําหนดเป้าหมายเป็น Android 11 ขึ้นไป ให้ตรวจสอบว่าลูกโป่ง ข้อมูลเมตาหรือการแจ้งเตือนอ้างอิงถึงทางลัดการแชร์

ขั้นตอนเหล่านี้แสดงในตัวอย่างต่อไปนี้

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

หากแอปทำงานอยู่เบื้องหน้าเมื่อมีการส่งลูกโป่ง ระบบจะไม่สนใจความสำคัญ และลูกโป่งของคุณจะแสดงเสมอ เว้นแต่ผู้ใช้บล็อกบับเบิลหรือการแจ้งเตือน จากแอปของคุณ

สร้างลูกโป่งที่ขยาย

คุณกำหนดค่าบับเบิลให้แสดงในสถานะขยายโดยอัตโนมัติได้ พ ขอแนะนำให้ใช้ฟีเจอร์นี้เฉพาะเมื่อผู้ใช้ดำเนินการที่ จะปรากฏขึ้นในบับเบิล เช่น แตะปุ่มเพื่อเริ่มแชทใหม่ ในกรณีนี้ การระงับการแจ้งเตือนแรกที่ส่งเมื่อบับเบิล สร้าง แล้ว

มีหลายวิธีที่คุณสามารถใช้เพื่อตั้งค่าสถานะที่เปิดใช้ลักษณะการทำงานเหล่านี้ setAutoExpandBubble() และ setSuppressNotification()

ตัวอย่างต่อไปนี้แสดงวิธีกำหนดค่าลูกโป่งให้นำเสนอโดยอัตโนมัติ ในสถานะขยาย:

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

วงจรเนื้อหาลูกโป่ง

เมื่อลูกโป่งขยายออก กิจกรรมเนื้อหาจะเข้าสู่กระบวนการปกติ วงจร ซึ่งส่งผลให้เกิด กลายเป็นกระบวนการที่ทำงานอยู่เบื้องหน้า ถ้ายังไม่ได้ดำเนินการ

เมื่อลูกโป่งยุบหรือปิดไป กิจกรรมจะถูกทำลาย การดำเนินการนี้อาจ ส่งผลให้กระบวนการถูกแคชและหยุดทำงานในภายหลัง ขึ้นอยู่กับว่า แอปมีคอมโพเนนต์เบื้องหน้าอื่นๆ ทำงานอยู่

เวลาที่บับเบิลปรากฏขึ้น

เพื่อลดการขัดจังหวะสำหรับผู้ใช้ บับเบิลจะปรากฏขึ้นภายใต้ สถานการณ์

หากแอปกําหนดเป้าหมายเป็น Android 11 ขึ้นไป การแจ้งเตือนจะไม่ ปรากฏเป็นบับเบิล เว้นแต่ในการสนทนา ข้อกำหนด หากแอปกำหนดเป้าหมาย Android 10 หรือต่ำกว่า การแจ้งเตือนจะปรากฏเป็นบับเบิลเฉพาะในกรณีต่อไปนี้ ตรงกับเงื่อนไขต่อไปนี้อย่างน้อย 1 ข้อ

  • การแจ้งเตือนจะใช้ MessagingStyle และมี เพิ่ม Person แล้ว
  • การแจ้งเตือนมาจากการโทรถึง Service.startForeground มี category จาก CATEGORY_CALL และ เพิ่ม Person แล้ว
  • แอปทำงานอยู่เบื้องหน้าเมื่อส่งการแจ้งเตือน

หากไม่เป็นไปตามเงื่อนไขเหล่านี้ การแจ้งเตือนจะแสดงแทน

กำลังเปิดกิจกรรมจากบับเบิล

เมื่อลูกโป่งแสดงกิจกรรมใหม่ กิจกรรมใหม่จะปรากฏขึ้น ภายในงานเดียวกันและหน้าต่างลูกโป่งเดิม หรือในงานใหม่ แบบเต็มหน้าจอ ยุบลูกโป่งที่เปิดขึ้น

วิธีเปิดกิจกรรมใหม่ในงานเดียวกับลูกโป่ง 1. ใช้บริบทกิจกรรมเมื่อเปิดใช้งาน Intent activity.startActivity(intent) และ 1. อย่าตั้งค่าสถานะ FLAG_ACTIVITY_NEW_TASK เกี่ยวกับ Intent

มิฉะนั้น กิจกรรมใหม่จะเริ่มต้นในงานใหม่ และลูกโป่งจะเริ่มต้น ยุบแล้ว

โปรดทราบว่า ลูกโป่งจะแสดงแทนการสนทนาหนึ่งๆ ดังนั้นกิจกรรม ที่เปิดอยู่ในบับเบิลควรเกี่ยวข้องกับการสนทนานั้น นอกจากนี้ การเปิดกิจกรรมภายในลูกโป่งจะเป็นการเพิ่มสแต็กงานของลูกโป่ง และอาจทำให้ประสบการณ์ของผู้ใช้ยุ่งยากขึ้น โดยเฉพาะในเรื่องของ การนำทาง

แนวทางปฏิบัติแนะนำ

  • ส่งการแจ้งเตือนเป็นบับเบิลเฉพาะเมื่อจำเป็นเท่านั้น เช่น เมื่อเป็นบับเบิล ส่วนหนึ่งของการสื่อสารที่ต่อเนื่อง หรือหากผู้ใช้ร้องขออย่างชัดเจนถึงลูกโป่งสำหรับ เนื้อหา ลูกโป่งใช้พื้นที่บนหน้าจอและบดบังเนื้อหาอื่นๆ ของแอป
  • ตรวจสอบว่าการแจ้งเตือนบับเบิลใช้งานเป็นการแจ้งเตือนปกติได้ด้วย วันและเวลา ผู้ใช้ปิดใช้งานลูกโป่ง การแจ้งเตือนบับเบิลจะแสดงขึ้นตามปกติ การแจ้งเตือน
  • เรียกใช้ super.onBackPressed เมื่อลบล้าง onBackPressed ในลูกโป่ง กิจกรรม มิฉะนั้นลูกโป่งอาจทำงานไม่ถูกต้อง

เมื่อลูกโป่งที่ยุบได้รับข้อความที่อัปเดต ลูกโป่งจะแสดงป้าย เพื่อแสดงข้อความที่ยังไม่อ่าน เมื่อผู้ใช้เปิดข้อความใน ที่เกี่ยวข้อง ให้ทำตามขั้นตอนต่อไปนี้

  • อัปเดต BubbleMetadataเพื่อระงับการแจ้งเตือน โทร BubbleMetadata.Builder.setSuppressNotification() ซึ่งจะนำไอคอนป้ายออกเพื่อระบุว่าผู้ใช้โต้ตอบกับข้อความ
  • ตั้งค่า Notification.Builder.setOnlyAlertOnce() เป็น true เพื่อระงับเสียงหรือการสั่นที่มาพร้อมกับ BubbleMetadata อัปเดต

แอปตัวอย่าง

ผู้คน แอปตัวอย่างเป็นแอปสนทนาที่ใช้บับเบิล สำหรับการสาธิต แอปนี้ใช้แชทบ็อต ในการใช้งานจริง ให้ใช้บับเบิลสำหรับข้อความโดย มนุษย์