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ông báo về các email đã nhận, hãy đặt mọi thông báo về email mới vào cùng một nhóm để chúng thu gọn cùng nhau.

Để hỗ trợ các phiên bản cũ, hãy thêm thông báo tóm tắt xuất hiện riêng để tóm tắt tất cả các thông báo riêng biệt. Bạn thường làm việc này hiệu quả nhất với thông báo kiểu hộp thư đến.

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

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

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

  • Việc hiển thị riêng từng thông báo của từng trẻ sẽ giúp ích cho bạn. Ví dụ:

    • Đây là những thông báo mà bạn có thể thực hiện, với các thao tác dành riêng cho từng thông báo.

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

Nếu thông báo của bạn không đáp ứng các tiêu chí trước đó, 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 thông báo để hiện nhiều nội dung cập nhật trong cùng một cuộc trò chuyện.

Tạo một nhóm rồi 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 duy nhất cho nhóm đó. Sau đó, đối với mỗi thông báo bạn muốn trong nhóm, hãy gọi setGroup(), chuyển tên nhóm. Ví dụ:

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

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 bạn phải xử lý cảnh báo về nhóm của một thông báo khác, hãy gọi setGroupAlertBehavior().Ví dụ: nếu bạn chỉ muốn nội dung tóm tắt về nhóm đó gây nhiễu, thì tất cả các thành phần con trong nhóm phải có hành vi cảnh báo nhóm GROUP_ALERT_SUMMARY. Các tuỳ chọn khác là GROUP_ALERT_ALLGROUP_ALERT_CHILDREN.

Đặt nội dung tóm tắt về 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 theo nhóm, bạn phải đặt bản tóm tắt về nhóm. Phần tóm tắt về nhóm này phải bao gồm một số văn bản của các thông báo khác trong nhóm để giúp người dùng hiểu có gì trong nhóm. Cách hiển thị nội dung tóm tắt nhóm tuỳ thuộc vào phiên bản Android:

  • Trên các phiên bản Android thấp hơn 7.0 (API cấp 24) không thể hiển thị nhóm thông báo lồng nhau, hệ thống chỉ hiển thị thông báo tóm tắt nhóm và ẩn tất cả cá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 về 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 về nhóm của bạn dưới dạng một nhóm thông báo lồng nhau, được gắn nhãn bằng các đoạn văn bản của mỗi thông báo theo nhóm. Thao tác này không hiển thị văn bản bạn đặt trong 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 từng thông báo trong nhóm, như minh hoạ trong hình 1.

Ngay cả khi các phiên bản Android mới 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 luôn cần thiết lập bản tóm tắt theo cách thủ công để bật thông báo theo nhóm. Hành vi của phần tóm tắt nhóm có thể thay đổi tuỳ theo 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 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 về nhóm, hãy tiến hành như sau:

  1. Tạo một thông báo mới có nội dung mô tả về nhóm – thường nên làm tốt nhất là 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. Hãy chỉ định rằng giá trị này phải được dùng làm phần tóm tắt nhóm bằng cách gọi setGroupSummary(true).

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

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

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

Để biết mã mẫu sử dụng thông báo, hãy xem Mẫu thông báo của Android.

Nhóm tự động

Trên Android 7.0 (API cấp 24) trở lên, nếu ứng dụng của bạn gửi từ 4 thông báo trở lên và không chỉ định khoá nhóm hoặc tóm tắt nhóm, thì hệ thống có thể tự động nhóm các thông báo đó lại với nhau. Các thông báo được nhóm sẽ tự động xuất hiện cùng với một 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 theo 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, giống như các thông báo được nhóm theo cách thủ công.

Hành vi nhóm tự động 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 rằng các thông báo phải được nhóm, hãy chỉ định khoá nhóm và tóm tắt nhóm để đảm bảo các thông báo đó được nhóm lại.