บับเบิลช่วยให้ผู้ใช้เห็นและเข้าร่วมการสนทนาได้ง่ายขึ้น
บับเบิลจะอยู่ในระบบการแจ้งเตือน โดยป๊อปอัปจะลอยอยู่เหนือเนื้อหาแอปอื่นๆ และติดตามผู้ใช้ไปทุกที่ ผู้ใช้สามารถขยายป๊อปอัปเพื่อแสดงและโต้ตอบกับเนื้อหาแอป และสามารถยุบป๊อปอัปเมื่อไม่ได้ใช้งาน
เมื่ออุปกรณ์ล็อกอยู่หรือจอแสดงผลแบบเปิดอยู่ตลอดเวลาทำงานอยู่ ฟองข้อความจะปรากฏขึ้นเหมือนการแจ้งเตือนปกติ
ฟีเจอร์บับเบิลเป็นฟีเจอร์ที่คุณเลือกไม่ใช้ได้ เมื่อแอปแสดงป๊อปอัปแรก กล่องโต้ตอบสิทธิ์จะมี 2 ตัวเลือก ดังนี้
- บล็อกลูกโป่งทั้งหมดจากแอป โดยการแจ้งเตือนจะไม่ถูกบล็อก แต่จะไม่เคยปรากฏเป็นลูกโป่ง
- อนุญาตลูกโป่งทั้งหมดจากแอปของคุณ การแจ้งเตือนทั้งหมดที่ส่งด้วย
BubbleMetaData
จะปรากฏเป็นลูกโป่ง
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 ขึ้นไป ให้ตรวจสอบว่าข้อมูลเมตาหรือการแจ้งเตือนของฟองอ้างอิงทางลัดการแชร์
- แก้ไขแอปให้ไม่ยกเลิกการแจ้งเตือนที่ปรากฏเป็นลูกโป่ง
หากต้องการตรวจสอบว่ามีการเริ่มกิจกรรมการแจ้งเตือนเป็นป๊อปอัปหรือไม่ ให้เรียกใช้
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();
วงจรของเนื้อหาใน Bubble
เมื่อขยายฟอง กิจกรรมเนื้อหาจะเข้าสู่วงจรของกระบวนการตามปกติ ซึ่งจะทำให้แอปพลิเคชันกลายเป็นกระบวนการที่ทำงานอยู่เบื้องหน้า หากยังไม่ได้เป็นเช่นนั้น
เมื่อยุบหรือปิดลูกโป่ง ระบบจะทำลายกิจกรรม ซึ่งอาจส่งผลให้ระบบแคชกระบวนการไว้และหยุดกระบวนการในภายหลัง ทั้งนี้ขึ้นอยู่กับว่าแอปมีคอมโพเนนต์อื่นๆ ที่ทำงานอยู่เบื้องหน้าหรือไม่
เวลาที่ฟองอากาศจะปรากฏ
เพื่อไม่ให้เป็นการรบกวนผู้ใช้ ฟองข้อความจะปรากฏในบางกรณีเท่านั้น
หากแอปกำหนดเป้าหมายเป็น 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
การอัปเดต
แอปตัวอย่าง
แอปตัวอย่าง SociaLite เป็นแอปการสนทนาที่ใช้บับเบิล แอปนี้ใช้แชทบ็อตเพื่อการสาธิต ในแอปพลิเคชันในชีวิตจริง ให้ใช้ฟองสำหรับข้อความที่มนุษย์เขียน