บับเบิลการแจ้งเตือนช่วยให้ผู้ใช้เห็นและเข้าร่วมการสนทนาได้ง่ายขึ้น
บับเบิลจะลอยอยู่เหนือเนื้อหาอื่นๆ ของแอป และผู้ใช้สามารถขยายบับเบิลเพื่อดูและโต้ตอบกับเนื้อหาของแอป รวมถึงยุบบับเบิลเมื่อไม่ได้ใช้งาน
เมื่ออุปกรณ์ล็อกอยู่หรือเปิดใช้งานฟีเจอร์ Always-on Display บับเบิลจะปรากฏเป็นการแจ้งเตือนตามปกติ
ผู้ใช้เป็นผู้เปิดใช้บับเบิลการแจ้งเตือน โดยสามารถทำได้ด้วยการแตะปุ่มบับเบิลในการแจ้งเตือนที่รองรับบับเบิล ซึ่งจะทำให้แชทนั้นๆ ปรากฏเป็นบับเบิลเสมอ ในส่วนการตั้งค่า ผู้ใช้สามารถปรับแชทที่ต้องการให้ปรากฏเป็นบับเบิลหรือแก้ไขการตั้งค่าสำหรับแอปโดยรวมได้
ผู้ใช้สามารถทำสิ่งต่อไปนี้ได้
- บล็อกบับเบิลการแจ้งเตือนทั้งหมดจากแอป การแจ้งเตือนจะไม่ถูกบล็อก แต่จะไม่ปรากฏเป็นบับเบิล
- อนุญาตบับเบิลการแจ้งเตือนที่เลือกจากแอป การแจ้งเตือนที่ปรากฏเป็นบับเบิลโดยใช้ปุ่มบับเบิลจะถือว่า "เลือก" แล้ว
- อนุญาตบับเบิลการแจ้งเตือนทั้งหมดจากแอป การแจ้งเตือนทั้งหมดที่ส่งด้วย
BubbleMetadataจะปรากฏเป็นบับเบิล
Notification Bubble API
ระบบจะสร้างบับเบิลการแจ้งเตือนโดยใช้ Notification 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" โดยอัตโนมัติ
หากต้องการส่งบับเบิลการแจ้งเตือน ให้ทำตามขั้นตอนต่อไปนี้
- สร้างการแจ้งเตือนตามปกติ
- เรียกใช้
BubbleMetadata.Builder(PendingIntent, Icon)หรือBubbleMetadata.Builder(String)เพื่อสร้างออบเจ็กต์BubbleMetadata - ใช้
setBubbleMetadata()เพื่อเพิ่มข้อมูลเมตาลงในการแจ้งเตือน - หากกำหนดเป้าหมายเป็น Android 11 (ระดับ API 30) ขึ้นไป ให้ตรวจสอบว่าข้อมูลเมตาของบับเบิลหรือการแจ้งเตือนอ้างอิงถึงทางลัดการแชร์
- แก้ไขแอปไม่ให้ ยกเลิกการแจ้งเตือนที่ปรากฏเป็นบับเบิล การยกเลิกการแจ้งเตือนจะนำบับเบิลออกจากหน้าจอ การเปิดบับเบิลจะซ่อนการแจ้งเตือนที่เชื่อมโยงกับบับเบิลโดยอัตโนมัติ
ขั้นตอนเหล่านี้แสดงไว้ในตัวอย่างต่อไปนี้
// Create a bubble intent. val target = Intent(context, BubbleActivity::class.java) val bubbleIntent = PendingIntent.getActivity(context, 0, target, PendingIntent.FLAG_IMMUTABLE /* 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 = ShortcutInfoCompat.Builder(context, shortcutId) .setCategories(setOf(category)) .setIntent(Intent(Intent.ACTION_DEFAULT)) .setLongLived(true) .setShortLabel("Chat partner name") .build() // Publish the shortcut, otherwise the bubble metadata will not apply. ShortcutManagerCompat.pushDynamicShortcut(context, shortcut) // Create a bubble metadata. val bubbleData = NotificationCompat.BubbleMetadata.Builder(bubbleIntent, IconCompat.createWithResource(context, R.drawable.ic_logo)) .setDesiredHeight(600) .build() // Create a notification, referencing the sharing shortcut. val builder = NotificationCompat.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(R.drawable.chat) .setBubbleMetadata(bubbleData) .setShortcutId(shortcutId) .addPerson(chatPartner)
หากแอปอยู่ในเบื้องหน้าเมื่อมีการส่งบับเบิล ระบบจะละเว้นความสำคัญและแสดงบับเบิลเสมอ เว้นแต่ผู้ใช้จะบล็อกบับเบิลหรือการแจ้งเตือนจากแอป
สร้างบับเบิลแบบขยาย
คุณสามารถกำหนดค่าบับเบิลให้แสดงในสถานะขยายโดยอัตโนมัติ เราขอแนะนำให้ใช้ฟีเจอร์นี้เฉพาะในกรณีที่ผู้ใช้ดำเนินการที่ทำให้เกิดบับเบิล เช่น แตะปุ่มเพื่อเริ่มแชทใหม่ ในกรณีนี้ การระงับการแจ้งเตือนเริ่มต้นที่ส่งเมื่อมีการสร้างบับเบิลก็สมเหตุสมผลเช่นกัน
คุณสามารถใช้วิธีการต่อไปนี้เพื่อตั้งค่าแฟล็กที่เปิดใช้ลักษณะการทำงานเหล่านี้:
setAutoExpandBubble()
และ
setSuppressNotification()
ตัวอย่างต่อไปนี้แสดงวิธีกำหนดค่าบับเบิลให้แสดงในสถานะขยายโดยอัตโนมัติ
val bubbleMetadata = NotificationCompat.BubbleMetadata.Builder() .setDesiredHeight(600) .setIntent(bubbleIntent) .setAutoExpandBubble(true) .setSuppressNotification(true) .build()
วงจรการใช้งานเนื้อหาของบับเบิล
เมื่อขยายบับเบิล กิจกรรมเนื้อหาจะผ่านวงจรการใช้งานกระบวนการ ตามปกติ ซึ่งจะทำให้ แอปพลิเคชันกลายเป็นกระบวนการเบื้องหน้า หากยังไม่ได้เป็น
เมื่อยุบหรือปิดบับเบิล ระบบจะทำลายกิจกรรม ซึ่งอาจส่งผลให้กระบวนการถูกแคชและถูกหยุดในภายหลัง ทั้งนี้ขึ้นอยู่กับว่าแอปมีคอมโพเนนต์เบื้องหน้าอื่นๆ ทำงานอยู่หรือไม่
เวลาที่บับเบิลปรากฏ
บับเบิลจะปรากฏขึ้นในบางกรณีเท่านั้นเพื่อลดการรบกวนผู้ใช้
หากแอปกำหนดเป้าหมายเป็น Android 11 (ระดับ API 30) ขึ้นไป การแจ้งเตือนจะไม่ปรากฏเป็นบับเบิล เว้นแต่จะเป็นไปตามข้อกำหนดของการสนทนา หากแอปกำหนดเป้าหมายเป็น Android 10 (ระดับ API 29) หรือต่ำกว่า การแจ้งเตือนจะปรากฏเป็นบับเบิลก็ต่อเมื่อเป็นไปตามเงื่อนไขข้อใดข้อหนึ่งต่อไปนี้
- การแจ้งเตือนใช้
MessagingStyleและมีการเพิ่มPerson - การแจ้งเตือนมาจากการเรียกใช้
Service.startForegroundมีcategoryเป็นCATEGORY_CALLและมีการเพิ่มPerson - แอปอยู่ในเบื้องหน้าเมื่อมีการส่งการแจ้งเตือน
หากไม่เป็นไปตามเงื่อนไขใดๆ ข้างต้น ระบบจะแสดงการแจ้งเตือนแทนบับเบิล
การเปิดใช้กิจกรรมจากบับเบิล
เมื่อบับเบิลเปิดใช้กิจกรรมใหม่ กิจกรรมใหม่จะเปิดใช้ภายในงานเดียวกันและหน้าต่างบับเบิลเดียวกัน หรือในงานใหม่แบบเต็มหน้าจอ โดยจะยุบบับเบิลที่เปิดใช้
วิธีเปิดใช้กิจกรรมใหม่ในงานเดียวกับบับเบิล:
1. ใช้บริบทของกิจกรรมเมื่อเปิดใช้ Intent,
activity.startActivity(intent), และ
1. อย่าตั้งค่าแฟล็ก FLAG_ACTIVITY_NEW_TASK ใน Intent
มิเช่นนั้น ระบบจะเริ่มกิจกรรมใหม่ในงานใหม่และยุบบับเบิล
โปรดทราบว่าบับเบิลแสดงถึงการสนทนาที่เฉพาะเจาะจง ดังนั้นกิจกรรมที่เปิดใช้ภายในบับเบิลควรเกี่ยวข้องกับการสนทนานั้น นอกจากนี้ การเปิดใช้กิจกรรมภายในบับเบิลจะเพิ่มสแต็กงานของบับเบิลและอาจทำให้ประสบการณ์ของผู้ใช้ซับซ้อนขึ้น โดยเฉพาะอย่างยิ่งในส่วนของการนำทาง
แนวทางปฏิบัติแนะนำ
- ส่งการแจ้งเตือนเป็นบับเบิลเฉพาะในกรณีที่สำคัญ เช่น เมื่อเป็นการแจ้งเตือนที่เป็นส่วนหนึ่งของการสื่อสารที่กำลังดำเนินอยู่ หรือหากผู้ใช้ขอให้แสดงเนื้อหาเป็นบับเบิลอย่างชัดเจน บับเบิลใช้พื้นที่หน้าจอและบังเนื้อหาอื่นๆ ของแอป
- ตรวจสอบว่าการแจ้งเตือนแบบบับเบิลทำงานเป็นการแจ้งเตือนปกติได้ด้วย เมื่อผู้ใช้ปิดใช้บับเบิล การแจ้งเตือนแบบบับเบิลจะแสดงเป็นการแจ้งเตือนปกติ
- ใช้คอมโพสได้
BackHandlerและผูกพารามิเตอร์enabledกับ สถานะ UI เพื่อให้คอมโพสได้นี้ดักจับการกดกลับเฉพาะเมื่อจำเป็น เมื่อตัวแฮนเดิลปิดใช้ตัวเอง บับเบิลจะยุบ
เมื่อบับเบิลที่ยุบอยู่ได้รับข้อความที่อัปเดต บับเบิลจะแสดงไอคอนป้ายเพื่อระบุว่ามีข้อความที่ยังไม่ได้อ่าน เมื่อผู้ใช้เปิดข้อความในแอปที่เชื่อมโยง ให้ทำตามขั้นตอนต่อไปนี้
- อัปเดต
BubbleMetadataเพื่อระงับการแจ้งเตือน เรียกใช้BubbleMetadata.Builder.setSuppressNotification()ซึ่งจะนำไอคอนป้ายออกเพื่อระบุว่าผู้ใช้โต้ตอบกับข้อความแล้ว - ตั้งค่า
Notification.Builder.setOnlyAlertOnce()เป็นtrueเพื่อระงับเสียงหรือการสั่นที่มาพร้อมกับการอัปเดตBubbleMetadata
แอปตัวอย่าง
แอปตัวอย่าง SociaLite เป็นแอปการสนทนาที่ใช้ บับเบิล แอปนี้ใช้แชทบ็อตเพื่อวัตถุประสงค์ในการสาธิต ในแอปพลิเคชันจริง ให้ใช้บับเบิลสำหรับข้อความจากบุคคล