สร้างกลุ่มการแจ้งเตือน

ตั้งแต่ Android 7.0 (API ระดับ 24) เป็นต้นไป คุณสามารถแสดงการแจ้งเตือนที่เกี่ยวข้องในกลุ่มได้ เช่น หากแอปแสดงการแจ้งเตือนสำหรับอีเมลที่ได้รับ ให้ใส่การแจ้งเตือนทั้งหมดสำหรับข้อความอีเมลใหม่ไว้ในกลุ่มเดียวกันเพื่อให้ยุบรวมกัน

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

กลุ่มการแจ้งเตือนที่ยุบและขยาย
รูปที่ 1 กลุ่มการแจ้งเตือน
ที่ยุบ (ด้านบน) และขยาย (ด้านล่าง)

หากกรณีการใช้งานของคุณเป็นไปตามเงื่อนไขทั้งหมดต่อไปนี้ ให้ใช้กลุ่มการแจ้งเตือน

  • การแจ้งเตือนย่อยเป็นการแจ้งเตือนที่สมบูรณ์และสามารถแสดงแยกกันได้โดยไม่จำเป็นต้องมีสรุปกลุ่ม

  • การแสดงการแจ้งเตือนย่อยแยกกันมีประโยชน์ เช่น

    • มีการดำเนินการเฉพาะสำหรับการแจ้งเตือนแต่ละรายการ

    • การแจ้งเตือนแต่ละรายการมีข้อมูลเพิ่มเติมให้ผู้ใช้ดู

หากการแจ้งเตือนไม่เป็นไปตามเกณฑ์ข้างต้น ให้พิจารณา อัปเดตการแจ้งเตือนที่มีอยู่ด้วยข้อมูลใหม่หรือสร้าง การแจ้งเตือนในรูปแบบข้อความเพื่อแสดงการอัปเดตหลายรายการใน การสนทนาเดียวกันแทน

สร้างกลุ่มและเพิ่มการแจ้งเตือนลงในกลุ่ม

หากต้องการสร้างกลุ่มการแจ้งเตือน ให้กำหนดสตริงตัวระบุที่ไม่ซ้ำกันสำหรับกลุ่ม จากนั้นเรียกใช้ setGroup, โดยส่งชื่อกลุ่มสำหรับการแจ้งเตือนแต่ละรายการที่ต้องการใส่ไว้ในกลุ่ม เช่น

val GROUP_KEY_WORK_EMAIL = "com.android.example.WORK_EMAIL"

val newMessageNotification = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID)
    .setSmallIcon(R.drawable.new_mail)
    .setContentTitle(emailObject.getSenderName())
    .setContentText(emailObject.getSubject())
    .setLargeIcon(emailObject.getSenderAvatar())
    .setGroup(GROUP_KEY_WORK_EMAIL)
    .build()

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

หากการแจ้งเตือนสำหรับกลุ่มการแจ้งเตือนต้องได้รับการจัดการโดยการแจ้งเตือนอื่น ให้เรียกใช้ setGroupAlertBehavior เช่น หากต้องการให้เฉพาะ สรุปของกลุ่มส่งเสียง การแจ้งเตือนย่อยทั้งหมดในกลุ่มต้องมี ลักษณะการแจ้งเตือนของกลุ่มเป็น GROUP_ALERT_SUMMARY ตัวเลือกอื่นๆ ได้แก่ GROUP_ALERT_ALL และ GROUP_ALERT_CHILDREN

ตั้งค่าสรุปกลุ่ม

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

  • Android เวอร์ชันต่ำกว่า 7.0 (ระดับ API 24) ไม่สามารถแสดงกลุ่มการแจ้งเตือนที่ซ้อนกันได้ ดังนั้นระบบจะแสดงเฉพาะการแจ้งเตือนสรุปกลุ่มและซ่อนการแจ้งเตือนอื่นๆ ทั้งหมด ผู้ใช้สามารถแตะการแจ้งเตือนสรุปกลุ่มเพื่อเปิดแอปได้

  • ใน Android 7.0 ขึ้นไป ระบบจะแสดงการแจ้งเตือนสรุปกลุ่มเป็นกลุ่มการแจ้งเตือนที่ซ้อนกัน โดยติดป้ายกำกับด้วยข้อความบางส่วนจากการแจ้งเตือนที่จัดกลุ่มแต่ละรายการ ระบบจะไม่แสดงข้อความที่คุณตั้งค่าในการแจ้งเตือนสรุปกลุ่ม ผู้ใช้สามารถขยายกลุ่มการแจ้งเตือนที่ซ้อนกันเพื่อดูการแจ้งเตือนแต่ละรายการในกลุ่มได้ ดังที่แสดงในรูปที่ 1

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

หากต้องการเพิ่มสรุปกลุ่ม ให้ทำดังนี้

  1. สร้างการแจ้งเตือนใหม่พร้อมคำอธิบายกลุ่ม ซึ่งมักจะทำได้ดีที่สุด ด้วยการแจ้งเตือนในรูปแบบกล่องจดหมาย

  2. เพิ่มการแจ้งเตือนสรุปลงในกลุ่มโดยเรียกใช้ setGroup

  3. ระบุว่าต้องใช้เป็นการแจ้งเตือนสรุปกลุ่มโดยเรียกใช้ setGroupSummary(true)

โค้ดต่อไปนี้แสดงตัวอย่างการสร้างสรุปกลุ่ม

// Use constant ID for notifications used as group summary.
val SUMMARY_ID = 0
val GROUP_KEY_WORK_EMAIL = "com.android.example.WORK_EMAIL"

val newMessageNotification1 = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID)
    .setSmallIcon(R.drawable.ic_notify_email_status)
    .setContentTitle(emailObject1.getSummary())
    .setContentText("You will not believe...")
    .setGroup(GROUP_KEY_WORK_EMAIL)
    .build()

val newMessageNotification2 = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID)
    .setSmallIcon(R.drawable.ic_notify_email_status)
    .setContentTitle(emailObject2.getSummary())
    .setContentText("Please join us to celebrate the...")
    .setGroup(GROUP_KEY_WORK_EMAIL)
    .build()

val summaryNotification = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID)
    .setContentTitle(emailObject.getSummary())
    // Set content text to support devices running API level < 24.
    .setContentText("Two new messages")
    .setSmallIcon(R.drawable.ic_notify_summary_status)
    // Build summary info into InboxStyle template.
    .setStyle(
        NotificationCompat.InboxStyle()
            .addLine("Alex Faarborg Check this out")
            .addLine("Jeff Chang Launch Party")
            .setBigContentTitle("2 new messages")
            .setSummaryText("janedoe@example.com")
    )
    // Specify which group this notification belongs to.
    .setGroup(GROUP_KEY_WORK_EMAIL)
    // Set this notification as the summary for the group.
    .setGroupSummary(true)
    .build()

NotificationManagerCompat.from(this).apply {
    notify(emailNotificationId1, newMessageNotification1)
    notify(emailNotificationId2, newMessageNotification2)
    notify(SUMMARY_ID, summaryNotification)
}

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

การจัดกลุ่มอัตโนมัติ

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

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