Membuat dan Mengelola Saluran Notifikasi

Mulai di 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 ringkasan saluran dan fitur notifikasi baru lainnya di Android 8.0.

Untuk kode sampel yang menggunakan notifikasi, termasuk fitur Android 8.0, lihat Sampel 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 berbeda yang perlu dikirim. Anda juga bisa membuat saluran notifikasi untuk menunjukkan pilihan yang dibuat oleh pengguna aplikasi. Misalnya, Anda bisa menyiapkan saluran notifikasi yang terpisah untuk setiap grup percakapan yang dibuat oleh pengguna dalam aplikasi pesan.

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

Membuat saluran notifikasi

Untuk membuat saluran notifikasi, ikuti langkah-langkah ini:

  1. Buat objek NotificationChannel dengan ID saluran unik, nama yang dapat dilihat pengguna, dan tingkat kepentingan.
  2. Jika ingin, tentukan deskripsi yang 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 beroperasi, jadi aman untuk memanggil kode ini saat memulai aplikasi.

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

Jika ingin menyesuaikan perilaku notifikasi default saluran Anda secara lebih lanjut, Anda bisa memanggil metode seperti enableLights(), setLightColor(), dan setVibrationPattern() pada NotificationChannel. Namun ingat bahwa setelah membuat saluran, Anda tidak bisa mengubah setelan ini dan pengguna memiliki kontrol akhir apakah perilaku ini akan aktif.

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

Menyetel tingkat kepentingan

Tingkat kepentingan saluran memengaruhi tingkat gangguan semua notifikasi yang diposting di saluran, dan Anda harus menentukannya di konstruktor NotificationChannel. Anda bisa 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 pada semua pesan notifikasi yang Anda posting ke saluran tersebut.

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

Tingkat kepentingan (NotificationManager.IMPORTANCE_*) dan konstanta prioritas (NotificationCompat.PRIORITY_*) dipetakan ke opsi kepentingan yang terlihat oleh pengguna seperti yang ditunjukkan 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 versi lebih rendah)
Mendesak
Berbunyi dan muncul sebagai notifikasi pendahuluan.
IMPORTANCE_HIGH PRIORITY_HIGH atau PRIORITY_MAX
Tinggi
Berbunyi
IMPORTANCE_DEFAULT PRIORITY_DEFAULT
Medium
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, muncul di lokasi UI sistem yang tidak mengganggu, seperti panel samping notifikasi dan sebagai badge di ikon peluncur (namun Anda bisa mengubah tampilan badge notifikasi ).

Setelah mengirimkan saluran ke NotificationManager, Anda tidak bisa mengubah tingkat kepentingannya. Namun, pengguna bisa mengubah preferensinya terhadap saluran aplikasi Anda kapan saja.

Untuk informasi tentang pemilihan tingkat prioritas yang sesuai, lihat "Tingkat prioritas" di 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 diterapkan pengguna ke saluran notifikasi, ikuti langkah-langkah ini:

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

Kemudian, jika Anda mendeteksi setelan saluran yang diyakini menghambat perilaku yang dimaksudkan untuk aplikasi, Anda bisa menyarankan pengguna agar mengubahnya dan melakukan tindakan untuk membuka setelan saluran (lihat bagian selanjutnya).

Membuka setelan saluran notifikasi

Setelah membuat saluran notifikasi, Anda tidak bisa mengubah perilaku visual dan auditori saluran notifikasi secara terprogram — hanya pengguna yang bisa mengubah perilaku saluran dari setelan sistem. Untuk memberikan pengguna akses mudah menuju setelan notifikasi ini, Anda harus menambahkan item di UI setelan aplikasi Anda yang akan membuka setelan sistem ini.

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

Misalnya, kode sampel berikut menunjukkan cara Anda bisa 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 bisa menghapus saluran notifikasi dengan memanggil deleteNotificationChannel(). Kode sampel 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 Anda ingin mengatur tampilan saluran Anda di UI setelan lebih lanjut, buat grup saluran. Merupakan ide bagus 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 bisa memanggil setGroup() untuk mengaitkan objek NotificationChannel yang baru dengan grup.

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