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

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

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

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

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

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

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

    • โดยคุณจะดำเนินการกับสิ่งเหล่านี้ได้ ซึ่งการดำเนินการจะแตกต่างกันไปในแต่ละการแจ้งเตือน

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

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

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

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

Kotlin

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

Java

String GROUP_KEY_WORK_EMAIL = "com.android.example.WORK_EMAIL";

Notification newMessageNotification = new NotificationCompat.Builder(MainActivity.this, 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)

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

Kotlin

// 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)
}

Java

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

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

Notification newMessageNotification2 =
    new NotificationCompat.Builder(MainActivity.this, 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();

Notification summaryNotification =
    new NotificationCompat.Builder(MainActivity.this, 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(new 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 notificationManager = NotificationManagerCompat.from(this);
notificationManager.notify(emailNotificationId1, newMessageNotification1);
notificationManager.notify(emailNotificationId2, newMessageNotification2);
notificationManager.notify(SUMMARY_ID, summaryNotification);

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

ดูโค้ดตัวอย่างที่ใช้การแจ้งเตือนได้ที่ตัวอย่างการแจ้งเตือนของ Android

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

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

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