Membuat Grup Notifikasi

Mulai di Android 7.0 (API level 24), Anda dapat menampilkan notifikasi terkait dalam grup (sebelumnya disebut notifikasi "paket"). Misalnya, jika aplikasi menampilkan notifikasi untuk email yang diterima, Anda harus memasukkan semua notifikasi ke dalam grup yang sama agar dapat diciutkan bersama.

Untuk mendukung versi lama, Anda juga bisa menambahkan notifikasi ringkasan yang muncul sendiri untuk meringkas semua notifikasi terpisah—sebaiknya hal ini dilakukan dengan notifikasi bergaya kotak masuk.

Gambar 1. Grup notifikasi yang diciutkan dan diperluas

Anda harus menggunakan grup notifikasi hanya jika semua ketentuan berikut ini bernilai benar untuk kasus penggunaan Anda:

  • Notifikasi turunan adalah notifikasi lengkap dan bisa ditampilkan satu per satu tanpa perlu ringkasan grup.
  • Ada manfaatnya memunculkan notifikasi turunan satu per satu. Contoh:
    • Hal ini dapat diaplikasikan dengan tindakan khusus untuk setiap turunan.
    • Ada lebih banyak informasi di setiap notifikasi yang harus dilihat pengguna.

Jika notifikasi Anda tidak memenuhi kriteria di atas, Anda sebaiknya mempertimbangkan untuk memperbarui notifikasi yang ada dengan informasi baru atau membuat notifikasi bergaya pesan untuk menampilkan beberapa pembaruan dalam percakapan yang sama.

Membuat grup dan menambahkan notifikasi

Untuk membuat grup notifikasi, tentukan string ID unik untuk grup tersebut. Lalu, untuk setiap notifikasi yang ingin dimasukkan dalam grup, cukup panggil setGroup(), yang meneruskan nama grup. Contoh:

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

Secara default, notifikasi akan diurutkan sesuai dengan waktu diposting, tetapi Anda bisa mengubah urutan dengan memanggil setSortKey().

Jika pemberitahuan untuk grup notifikasi harus ditangani oleh notifikasi yang berbeda, panggil setGroupAlertBehavior(). Misalnya, jika Anda hanya ingin ringkasan grup Anda saja yang mengeluarkan suara, semua turunan dalam grup harus memiliki GROUP_ALERT_SUMMARY perilaku pemberitahuan grup. Opsi lainnya adalah GROUP_ALERT_ALL dan GROUP_ALERT_CHILDREN.

Menetapkan ringkasan grup

Di Android 7.0 (API level 24) dan versi lebih tinggi, sistem akan secara otomatis membuat ringkasan untuk grup Anda menggunakan cuplikan teks dari setiap notifikasi. Pengguna dapat memperluas notifikasi ini untuk melihat setiap notifikasi yang terpisah, seperti yang ditunjukkan pada gambar 1. Untuk mendukung versi lama, yang tidak dapat menampilkan grup notifikasi bertingkat, Anda harus membuat notifikasi tambahan yang bertindak sebagai ringkasan. Ringkasan ini muncul sebagai satu-satunya notifikasi dan sistem akan menyembunyikan yang lainnya. Jadi, ringkasan ini harus menyertakan cuplikan dari semua notifikasi lainnya yang dapat diketuk pengguna untuk membuka aplikasi Anda.

Untuk menambahkan ringkasan grup, lakukan langkah-langkah berikut:

  1. Buat notifikasi baru dengan deskripsi grup—sebaiknya dilakukan dengan notifikasi bergaya kotak masuk.
  2. Tambahkan notifikasi ringkasan ke grup dengan memanggil setGroup().
  3. Tentukan bahwa hal tersebut harus digunakan sebagai ringkasan grup dengan memanggil setGroupSummary(true).

Contoh:

Kotlin

    //use constant ID for notification 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 notification 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);
    

ID notifikasi ringkasan harus tetap sama agar diposting hanya satu kali, dan Anda dapat mengupdatenya nanti jika informasi ringkasan berubah (penambahan berikutnya pada grup akan menyebabkan adanya update pada ringkasan yang ada).

Untuk kode contoh yang menggunakan notifikasi, lihat Contoh Notifikasi Android.