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

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

รูปที่ 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 อัปเดต

แอปตัวอย่าง

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