Membuat dan Mengelola Saluran Notifikasi

Mulai dari Android 8.0 (API level 26), semua notifikasi harus ditetapkan ke suatu saluran. Untuk setiap saluran, Anda bisa menyetel perilaku visual dan auditori yang diterapkan ke semua notifikasi di saluran tersebut. Kemudian, pengguna bisa mengubah setelan ini dan memutuskan saluran notifikasi mana dari aplikasi Anda yang seharusnya mengganggu atau terlihat.

Tonton video di bawah ini untuk melihat ringkasan tentang saluran dan fitur notifikasi baru lainnya di Android 8.0.

Untuk melihat kode contoh yang menggunakan notifikasi, termasuk fitur Android 8.0, lihat Contoh Notifikasi Android.

Setelan pengguna untuk saluran notifikasi tersedia untuk setiap aplikasi dalam setelan sistem, seperti yang ditunjukkan pada gambar 1.

Gambar 1. Setelan notifikasi untuk aplikasi Jam dan salah satu salurannya

Setelah membuat saluran notifikasi, Anda tidak bisa mengubah perilaku notifikasi — pengguna memiliki kendali penuh di tahap itu. Meskipun demikian, Anda masih bisa mengubah nama dan deskripsi saluran.

Anda harus membuat saluran untuk setiap jenis notifikasi yang perlu dikirim. Anda juga dapat membuat saluran notifikasi untuk memfasilitasi pilihan yang dibuat oleh pengguna aplikasi Anda. Misalnya, Anda dapat menyiapkan saluran notifikasi yang berbeda untuk setiap grup percakapan yang dibuat oleh pengguna dalam aplikasi pesan.

Jika menargetkan Android 8.0 (API level 26), Anda harus menerapkan satu atau beberapa saluran notifikasi. Jika targetSdkVersion Anda ditetapkan ke 25 atau lebih rendah, saat aplikasi berjalan di Android 8.0 (API level 26) atau yang lebih tinggi, perilakunya akan tetap sama seperti pada perangkat yang menjalankan versi Android 7.1 (API level 25) atau versi yang lebih rendah.

Membuat saluran notifikasi

Untuk membuat saluran notifikasi, ikuti langkah-langkah berikut:

  1. Buat objek NotificationChannel dengan ID saluran yang unik, nama yang akan dilihat pengguna, dan tingkat kepentingan.
  2. Jika perlu, tentukan deskripsi yang akan dilihat pengguna dalam setelan sistem dengan setDescription().
  3. Daftarkan saluran notifikasi dengan meneruskannya ke createNotificationChannel().

Kotlin

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        // Create the NotificationChannel
        val name = getString(R.string.channel_name)
        val descriptionText = getString(R.string.channel_description)
        val importance = NotificationManager.IMPORTANCE_DEFAULT
        val mChannel = NotificationChannel(CHANNEL_ID, name, importance)
        mChannel.description = descriptionText
        // Register the channel with the system; you can't change the importance
        // or other notification behaviors after this
        val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
        notificationManager.createNotificationChannel(mChannel)
    }
    

Java

    private void createNotificationChannel() {
        // Create the NotificationChannel, but only on API 26+ because
        // the NotificationChannel class is new and not in the support library
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            CharSequence name = getString(R.string.channel_name);
            String description = getString(R.string.channel_description);
            int importance = NotificationManager.IMPORTANCE_DEFAULT;
            NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);
            channel.setDescription(description);
            // Register the channel with the system; you can't change the importance
            // or other notification behaviors after this
            NotificationManager notificationManager = getSystemService(NotificationManager.class);
            notificationManager.createNotificationChannel(channel);
        }
    }
    

Membuat saluran notifikasi yang ada dengan nilai aslinya tidak akan melakukan operasi apa pun, sehingga akan lebih aman untuk memanggil kode ini saat memulai aplikasi.

Secara default, semua notifikasi yang diposting ke saluran ini menggunakan perilaku visual dan audio yang ditentukan oleh tingkat kepentingan dari class NotificationManagerCompat, seperti IMPORTANCE_DEFAULT dan IMPORTANCE_HIGH. (Lihat di bawah untuk mengetahui informasi selengkapnya tentang tingkat kepentingan.)

Jika ingin menyesuaikan perilaku notifikasi default saluran Anda lebih lanjut, Anda dapat memanggil metode seperti enableLights(), setLightColor(), dan setVibrationPattern() pada NotificationChannel. Namun ingat bahwa setelah membuat saluran, Anda tidak dapat mengubah setelan ini dan pengguna dapat sepenuhnya menentukan apakah perilaku ini akan diaktifkan atau dinonaktifkan.

Anda juga dapat membuat beberapa saluran notifikasi dalam satu operasi dengan memanggil createNotificationChannels().

Menetapkan tingkat kepentingan

Tingkat kepentingan saluran memengaruhi tingkat gangguan semua notifikasi yang diposting di saluran, dan Anda harus menetapkannya dalam konstruktor NotificationChannel. Anda dapat menggunakan salah satu dari lima tingkat kepentingan, mulai dari IMPORTANCE_NONE(0) hingga IMPORTANCE_HIGH(4). Tingkat kepentingan yang Anda tetapkan ke suatu saluran akan berlaku untuk semua pesan notifikasi yang Anda posting ke saluran tersebut.

Untuk mendukung perangkat yang menjalankan Android 7.1 (API level 25) atau yang lebih rendah, Anda juga harus memanggil setPriority() untuk setiap notifikasi, menggunakan konstanta prioritas dari class NotificationCompat.

Konstanta tingkat kepentingan (NotificationManager.IMPORTANCE_*) dan prioritas (NotificationCompat.PRIORITY_*) akan menjadi opsi tingkat kepentingan yang dapat dilihat oleh pengguna, seperti pada tabel 1.

Tabel 1. Tingkat kepentingan saluran

Tingkat kepentingan yang terlihat oleh pengguna Tingkat kepentingan (Android 8.0 dan versi lebih tinggi) Prioritas (Android 7.1 dan yang lebih rendah)
Mendesak
Berbunyi dan muncul sebagai notifikasi pendahuluan
IMPORTANCE_HIGH PRIORITY_HIGH atau PRIORITY_MAX
Tinggi
Berbunyi
IMPORTANCE_DEFAULT PRIORITY_DEFAULT
Sedang
Tidak ada bunyi
IMPORTANCE_LOW PRIORITY_LOW
Rendah
Tidak ada bunyi dan tidak muncul di status bar
IMPORTANCE_MIN PRIORITY_MIN

Semua notifikasi, terlepas dari tingkat kepentingannya, akan muncul di lokasi UI sistem yang tidak mengganggu, seperti di panel samping notifikasi dan sebagai badge di ikon peluncur, meskipun Anda dapat mengubah tampilan badge notifikasi.

Setelah mengirimkan saluran ke NotificationManager, Anda tidak dapat mengubah tingkat kepentingannya. Namun, pengguna dapat mengubah preferensinya terkait saluran aplikasi Anda kapan pun.

Untuk mengetahui informasi tentang pemilihan tingkat prioritas yang sesuai, lihat "Tingkat prioritas" dalam Panduan desain notifikasi.

Membaca setelan saluran notifikasi

Pengguna bisa memodifikasi setelan saluran notifikasi, termasuk perilaku seperti getaran dan suara notifikasi. Jadi, jika Anda ingin mengetahui setelan yang telah diterapkan pengguna ke saluran notifikasi Anda, ikuti langkah-langkah berikut:

  1. Dapatkan objek NotificationChannel dengan memanggil getNotificationChannel() atau getNotificationChannels().
  2. Buat kueri untuk setelan saluran khusus seperti getVibrationPattern(), getSound(), dan getImportance().

Kemudian, jika melihat setelan saluran yang sekiranya akan menghambat perilaku yang dimaksudkan bagi aplikasi Anda, Anda dapat menyarankan pengguna untuk mengubahnya dan menyediakan tindakan untuk membuka setelan saluran (lihat bagian berikutnya).

Membuka setelan saluran notifikasi

Setelah membuat saluran notifikasi, Anda tidak dapat mengubah perilaku visual dan audionya secara terprogram; hanya pengguna yang dapat mengubah perilaku saluran dari setelan sistem. Untuk memberikan akses mudah ke setelan notifikasi ini kepada pengguna, Anda harus menambahkan sebuah item di UI setelan aplikasi yang akan membuka setelan sistem ini.

Anda dapat membuka setelan sistem untuk saluran notifikasi dengan Intent yang menggunakan tindakan ACTION_CHANNEL_NOTIFICATION_SETTINGS.

Misalnya, kode contoh berikut menunjukkan cara mengarahkan pengguna ke setelan untuk saluran notifikasi:

Kotlin

    val intent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS).apply {
        putExtra(Settings.EXTRA_APP_PACKAGE, packageName)
        putExtra(Settings.EXTRA_CHANNEL_ID, myNotificationChannel.getId())
    }
    startActivity(intent)
    

Java

    Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS);
    intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName());
    intent.putExtra(Settings.EXTRA_CHANNEL_ID, myNotificationChannel.getId());
    startActivity(intent);
    

Perhatikan bahwa intent memerlukan dua tambahan yang menentukan nama paket aplikasi Anda (juga disebut sebagai ID aplikasi) dan saluran untuk diedit.

Menghapus saluran notifikasi

Anda dapat menghapus saluran notifikasi dengan memanggil deleteNotificationChannel(). Kode contoh berikut menunjukkan cara menyelesaikan proses ini:

Kotlin

    // The id of the channel.
    val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
    val id: String = "my_channel_01"
    notificationManager.deleteNotificationChannel(id)
    

Java

    NotificationManager notificationManager =
            (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    // The id of the channel.
    String id = "my_channel_01";
    notificationManager.deleteNotificationChannel(id);
    

Membuat grup saluran notifikasi

Jika ingin mengatur tampilan saluran di UI setelan agar lebih tertata, buat grup saluran. Ada baiknya jika aplikasi Anda mendukung beberapa akun pengguna (seperti untuk profil kerja), sehingga Anda bisa membuat grup saluran notifikasi untuk setiap akun. Dengan cara ini, pengguna bisa dengan mudah mengidentifikasi dan mengontrol beberapa saluran notifikasi yang memiliki nama identik.

Gambar 2. Setelan saluran notifikasi dengan grup untuk akun pribadi dan kerja

Misalnya, aplikasi jejaring sosial mungkin menyertakan dukungan untuk akun pribadi dan kerja. Dalam skenario ini, setiap akun mungkin memerlukan beberapa saluran notifikasi dengan fungsi dan nama yang identik, seperti berikut ini:

  • Akun pribadi dengan dua saluran:
    • Komentar baru
    • Rekomendasi postingan
  • Akun bisnis dengan dua saluran:
    • Komentar baru
    • Rekomendasi postingan

Mengatur saluran notifikasi ke dalam grup untuk setiap akun memastikan bahwa pengguna dapat dengan mudah untuk membedakannya.

Setiap grup saluran notifikasi memerlukan ID yang harus bersifat unik dalam paket Anda, begitu juga nama yang terlihat oleh pengguna. Cuplikan berikut menunjukkan cara membuat sebuah grup saluran notifikasi.

Kotlin

    // The id of the group.
    val groupId = "my_group_01"
    // The user-visible name of the group.
    val groupName = getString(R.string.group_name)
    val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
    notificationManager.createNotificationChannelGroup(NotificationChannelGroup(groupId, groupName))
    

Java

    // The id of the group.
    String groupId = "my_group_01";
    // The user-visible name of the group.
    CharSequence groupName = getString(R.string.group_name);
    NotificationManager notificationManager =
            (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    mNotificationManager.createNotificationChannelGroup(new NotificationChannelGroup(groupId, groupName));
    

Setelah membuat grup baru, Anda dapat memanggil setGroup() untuk mengaitkan objek NotificationChannel baru dengan grup tersebut.

Setelah mengirimkan saluran ke pengelola notifikasi, Anda tidak dapat mengubah hubungan antara saluran notifikasi dengan grup.