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 có 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ề email mới vào cùng một nhóm để chúng thu gọn lại với nhau.

Để hỗ trợ các phiên bản cũ, 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ả các thông báo riêng lẻ. Cách tốt nhất để thực hiện việc này là sử dụng 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).

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

  • 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 bản tóm tắt nhóm.

  • Việc hiển thị riêng lẻ các thông báo con có một lợi ích. Ví dụ:

    • Các thông báo này có thể hành động được, với các hành động dành riêng cho từng thông báo.

    • Mỗi thông báo sẽ 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 việ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 dạng tin nhắn để hiển thị nhiều nội dung 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 một nhóm thông báo, hãy xác định một chuỗi giá trị nhận dạng duy nhất cho nhóm đó. Sau đó, đối với mỗi thông báo mà bạn muốn trong nhóm, hãy gọi setGroup(), truyề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, 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 một thông báo khác phải xử lý cảnh báo cho nhóm thông báo, hãy gọi setGroupAlertBehavior(). Ví dụ: nếu bạn chỉ muốn tóm tắt nhóm của mình phát ra âm thanh, thì tất cả phần tử 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 phần tóm tắt nhóm

Thông báo được phân theo nhóm phải có một thông báo bổ sung đóng vai trò là thông tin tóm tắt về nhóm. Để bật thông báo theo 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 phụ 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ị một nhóm thông báo lồng nhau, hệ thống sẽ 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 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 từ mỗi thông báo được nhóm lại. Cột này không hiển thị văn bản mà 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 từng thông báo trong nhóm, như 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ế, thì bạn luôn cầ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 phầ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 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 thì tốt nhất là bạn nên dùng 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 bạn phải sử dụng nó làm bả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 để chỉ được đăng một lần để bạn có thể cập nhật sau này nếu thông tin tóm tắt thay đổi. Các nội dung bổ sung sau đó vào nhóm phải được cập nhật trong 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 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 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 đượ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ẻ, tương tự như 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 tất cả các thiết bị và phiên bản, nếu bạn biết phải nhóm các thông báo, 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.