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

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

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

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

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

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

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

Bubble API

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

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

โค้ดต่อไปนี้แสดงวิธีใช้ฟีเจอร์ฟอง

<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 ขึ้นไป ให้ตรวจสอบว่าลูกโป่ง ข้อมูลเมตาหรือการแจ้งเตือนอ้างอิงถึงทางลัดการแชร์
  5. แก้ไขแอปให้ไม่ยกเลิกการแจ้งเตือนที่ปรากฏเป็นลูกโป่ง หากต้องการตรวจสอบว่าระบบเปิดกิจกรรมการแจ้งเตือนเป็นป๊อปอัปหรือไม่ ให้เรียกใช้ Activity#isLaunchedFromBubble() การยกเลิกการแจ้งเตือนจะนำบับเบิลออกจากหน้าจอ กำลังเปิดบับเบิล จะซ่อนการแจ้งเตือนที่เกี่ยวข้องโดยอัตโนมัติ

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

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

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

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

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

คุณใช้วิธีการต่อไปนี้เพื่อตั้งค่า Flag ที่เปิดใช้ลักษณะการทำงานเหล่านี้ได้ 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 FLAG_ACTIVITY_NEW_TASK ใน Intent

มิเช่นนั้น ระบบจะเริ่มกิจกรรมใหม่ในแท็บงานใหม่และยุบฟองอากาศ

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

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

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

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

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

แอปตัวอย่าง

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