Tạo một nhóm thông báo

Kể từ Android 7.0 (API cấp 24), bạn có thể hiển thị các thông báo liên quan trong một nhóm. Ví dụ: nếu ứng dụng của bạn hiển thị thông báo về email đã nhận, hãy đặt tất cả thông báo về nội dung email mới vào cùng một nhóm để các thông báo đó thu gọn lại với nhau.

Để hỗ trợ các phiên bản thấp hơn, hãy thêm một thông báo tóm tắt xuất hiện riêng để tóm tắt tất cả thông báo riêng biệt. Thông báo kiểu hộp thư đến là cách thông thường để thực hiện việc đó.

Một nhóm thông báo được thu gọn và mở rộng
Hình 1. Một nhóm thông báo được thu gọn (trên cùng) và mở rộng (dưới cùng) notification group.

Nếu tất cả các điều kiện sau đây đều đúng cho trường hợp sử dụng của bạn, hãy sử dụng nhóm thông báo:

  • Các thông báo con là thông báo hoàn chỉnh và có thể hiển thị riêng lẻ mà không cần tóm tắt nhóm.

  • Việc hiển thị riêng lẻ các thông báo con sẽ mang lại lợi ích. Ví dụ:

    • Các thông báo này có những hành động dành riêng cho từng thông báo.

    • Mỗi thông báo có thêm thông tin để người dùng xem.

Nếu thông báo của bạn không đáp ứng các tiêu chí nêu trên, hãy cân nhắc cập nhật thông báo hiện có bằng thông tin mới hoặc tạo thông báo kiểu tin nhắn để hiển thị nhiều thông tin cập nhật trong cùng một cuộc trò chuyện.

Tạo nhóm và thêm thông báo vào nhóm

Để tạo nhóm thông báo, hãy xác định chuỗi giá trị nhận dạng riêng biệt cho nhóm. Sau đó, đối với mỗi thông báo bạn muốn đưa vào nhóm, hãy gọi setGroup, truyền tên nhóm. Ví dụ:

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

Theo mặc định, các thông báo được sắp xếp theo thời điểm đăng, nhưng bạn có thể thay đổi thứ tự bằng cách gọi setSortKey.

Nếu thông báo cho nhóm của một thông báo phải được xử lý bằng một thông báo khác thông báo, hãy gọi setGroupAlertBehavior. Ví dụ: nếu bạn chỉ muốn bản tóm tắt của nhóm phát ra âm thanh, thì tất cả thông báo con trong nhóm phải có hành vi thông báo nhóm GROUP_ALERT_SUMMARY. Các lựa chọn khác là GROUP_ALERT_ALL và GROUP_ALERT_CHILDREN.

Đặt bản tóm tắt nhóm

Các thông báo được nhóm phải có một thông báo bổ sung đóng vai trò là bản tóm tắt nhóm. Để bật thông báo được nhóm, bạn phải đặt bản tóm tắt nhóm. Bản tóm tắt nhóm này phải bao gồm một số văn bản từ mỗi thông báo khác trong nhóm để giúp người dùng hiểu nội dung trong nhóm. Cách hiển thị bản tóm tắt nhóm tuỳ thuộc vào phiên bản Android:

  • Các phiên bản Android thấp hơn 7.0 (cấp độ API 24) không thể hiển thị nhóm thông báo lồng nhau, vì vậy, hệ thống chỉ hiển thị thông báo tóm tắt nhóm và ẩn tất cả thông báo khác. Người dùng có thể nhấn vào thông báo tóm tắt nhóm để mở ứng dụng của bạn.

  • Trên Android 7.0 trở lên, hệ thống sẽ hiển thị thông báo tóm tắt nhóm dưới dạng nhóm thông báo lồng nhau, được gắn nhãn bằng các đoạn văn bản từ mỗi thông báo được nhóm. Hệ thống không hiển thị văn bản bạn đặt trên thông báo tóm tắt nhóm. Người dùng có thể mở rộng nhóm thông báo lồng nhau để xem các thông báo riêng lẻ trong nhóm, như minh hoạ trong Hình 1.

Ngay cả khi các phiên bản Android cao hơn không hiển thị văn bản tóm tắt nhóm mà bạn thiết kế, bạn vẫn phải đặt bản tóm tắt theo cách thủ công để bật thông báo được nhóm. Hành vi của bản tóm tắt nhóm có thể khác nhau trên một số loại thiết bị, chẳng hạn như thiết bị đeo. Việc đặt nội dung đa dạng thức trên bản tóm tắt nhóm sẽ giúp mang lại trải nghiệm tốt nhất trên mọi thiết bị và phiên bản.

Để thêm bản tóm tắt nhóm, hãy tiến hành như sau:

  1. Tạo thông báo mới có nội dung mô tả nhóm – thường là cách tốt nhất để thực hiện thông báo kiểu hộp thư đến.

  2. Thêm thông báo tóm tắt vào nhóm bằng cách gọi setGroup.

  3. Chỉ định rằng thông báo này phải được dùng làm bản tóm tắt nhóm bằng cách gọi setGroupSummary(true).

Mã sau đây cho thấy ví dụ về cách tạo bản tóm tắt nhóm:

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

Mã thông báo tóm tắt phải giữ nguyên để chỉ được đăng một lần và để bạn có thể cập nhật sau này nếu thông tin tóm tắt thay đổi. Việc thêm thông tin vào nhóm sau đó phải dẫn đến việc cập nhật bản tóm tắt hiện có.

Tự động nhóm

Trên Android 7.0 (cấp độ API 24) trở lên, nếu ứng dụng của bạn gửi thông báo và không chỉ định khoá nhóm hoặc bản tóm tắt nhóm, thì hệ thống có thể tự động nhóm các thông báo đó với nhau. Các thông báo được nhóm tự động sẽ xuất hiện cùng với thông báo tóm tắt nhóm được gắn nhãn bằng các đoạn văn bản từ một số thông báo được nhóm. Người dùng có thể mở rộng thông báo tóm tắt này để xem từng thông báo riêng lẻ, như đối với các thông báo được nhóm theo cách thủ công.

Hành vi tự động nhóm có thể khác nhau trên một số loại thiết bị. Để mang lại trải nghiệm tốt nhất trên mọi thiết bị và phiên bản, nếu bạn biết các thông báo phải được nhóm, hãy chỉ định khoá nhóm và bản tóm tắt nhóm để đảm bảo các thông báo đó được nhóm.