Apa Dan Bagaimana Memakai Notification Channel Di Android Oreo?
Selasa, 17 September 2019
Edit
Google telah meluncurkan pratinjau pengembangan pertaama versi Android berikutnya, dikala ini kodenya yakni Android O (Oreo) Beberapa fitur menarik telah dirilis, dan salah satunya yakni Notification Channels. Dalam tutorial ini, kita akan mengeksplorasi fitur ini dan menciptakan aplikasi sederhana yang mendemostrasikan fungsionalitas yang disediakannya.
Apa Itu Notification Channels?
Kanal notifikasi (notification channels) memungkinkan kita sebagai pengembang aplikasi untuk mengelompokkan notifikasi menurut grup-grup—channels—dan pengembang punya kemampuan untuk memodifikasi pengaturan notifikasi untuk keseluruhan kanal dalam satu waktu. Sebagai contoh, untuk tiap kanal, pengguna bisa sepenuhnya memblok semua notifikasi, mengabaikan tingkat kepentingan, atau mengizinkan tampilnya notification badge. Fitur gres ini sangat membantu dalam meningkatkan pengalaman pengguna suatu aplikasi.
Kita akan beajar perihal fitur ini dengan menciptakan aplikasi sederhana berjulukan "TutsplusAlerts" yang akan menyediakan dua kanal pemberitahuan: Android dan iOS. Pengguna akan mendapatkan pemberitahuan dari salah satu kanal yang terpisah itu apabila ada artikel gres yang dikirimkan.
1. Pengaturan Awal Android O SDK
Untuk mulai memakai Android O API, pada dikala artikel ini ditulis, Anda akan membutuhkan Android Studion 2.4 Canary yang sudah dipasang di komputer Anda.
Buka Android Studio 2.4 dan SDK Manager dengan mengklik Tools > Android > SDK Manager.
Lalu di tab SDK Platforms, centang Show Package Details. Di bawah Android O Preview, centang: Android SDK Platform O dan Google APIs Intel x86 Atom System Image (hanya disyaratkan untuk emulator).
Selajutnya buka tab SDK Tools dan pilih yang berikut ini:
- Android SDK Build-Tools 26.0.0 (rc1 atau yang lebih tinggi)
- Android SDK Platform-Tools 26.0.0 (rc1 atau yang lebih tinggi)
- Android Emulator 26.0.0
- Support Repository
Klik tombol OK untuk mengunduh semua komponen ini.
2. Buat Sebuah Android Studio Project
Di Android Studio, buat proyek gres yang berjulukan TutsplusAlert dengan activity kosong yang berjulukan
MainActivity
.3. Perbarui build.gradle
Buka file build.gradle di modul aplikasi dan perbarui compileSdkVersion,
buildToolsVersion
dan targetSdkVersion
serta versi Support Library
.android { compileSdkVersion "android-O" buildToolsVersion "26.0.0-rc1" defaultConfig { applicationId "com.chikeandroid.tutsplusalerts" minSdkVersion 'O' targetSdkVersion 'O' versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } ... } dependencies { ... compile 'com.android.support:appcompat-v7:26.0.0-alpha1' ... }
Ingatlah untuk melaksanakan sinkronisasi proyek Anda sesudah melaksanakan beberapa perubahan tersebut.
4. Buat Notification Channels
Buat kelas gres dan beri nama
NotificationUtils
, memperluas ContextWrapper
.import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager; import android.content.Context; import android.content.ContextWrapper; import android.graphics.Color; public class NotificationUtils extends ContextWrapper { private NotificationManager mManager; public static final String ANDROID_CHANNEL_ID = "com.chikeandroid.tutsplustalerts.ANDROID"; public static final String IOS_CHANNEL_ID = "com.chikeandroid.tutsplustalerts.IOS"; public static final String ANDROID_CHANNEL_NAME = "ANDROID CHANNEL"; public static final String IOS_CHANNEL_NAME = "IOS CHANNEL"; public NotificationUtils(Context base) { super(base); createChannels(); } public void createChannels() { // create android channel NotificationChannel androidChannel = new NotificationChannel(ANDROID_CHANNEL_ID, ANDROID_CHANNEL_NAME, NotificationManager.IMPORTANCE_DEFAULT); // Sets whether notifications posted to this channel should display notification lights androidChannel.enableLights(true); // Sets whether notification posted to this channel should vibrate. androidChannel.enableVibration(true); // Sets the notification light color for notifications posted to this channel androidChannel.setLightColor(Color.GREEN); // Sets whether notifications posted to this channel appear on the lockscreen or not androidChannel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE); getManager().createNotificationChannel(androidChannel); // create ios channel NotificationChannel iosChannel = new NotificationChannel(IOS_CHANNEL_ID, IOS_CHANNEL_NAME, NotificationManager.IMPORTANCE_HIGH); iosChannel.enableLights(true); iosChannel.enableVibration(true); iosChannel.setLightColor(Color.GRAY); iosChannel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC); getManager().createNotificationChannel(iosChannel); } private NotificationManager getManager() { if (mManager == null) { mManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); } return mManager; } }
Dalam kode di atas, kita menciptakan dua instance
NotificationChannel
, memasukkan suatu id (yang harus unik dalam paket Anda), suatu nama channel, dan juga importance level dalam constructornya. Untuk tiap notification channel, kita mengaplikasikan karakteristik menyerupai suara, cahaya, vibrasi, dan suatu pemberitahuan untuk ditunjukkan di lock screen. Akhirnya, kita mendapatkan NotificationManager
dari sistem dan meregistrasi channelnya dengan memanggil metode createNotificationChannel()
, melewati channel yang telah kita buat.Kita bisa menciptakan banyak sekali notification channel secara serentak dengan
createNotificationChannels()
, memasukkan suatu list Java instance NotificationChannel
. Anda bisa mendapatkan semua notification channel untuk aplikasi dengan getNotificationChannels()
dan mendapatkan channel khusus dengan getNotificationChannel()
, hanya memasukkan channel id sebagai suatu argumen.Importance Level (Tingkat Kepentingan)
Mulai dari Android O, tingkat prioritas tidak berlaku lagi untuk pemberitahuan individual. Alih-alih, Anda menentukan tingkat kepentingan ketika menciptakan suatu notification channel—yang berkisar dari
NotificationManager.IMPORTANCE_NONE
ke NotificationManager.IMPORTANCE_HIGH
. Kita akan mengeset channel Android ke IMPORTANCE_DEFAULT
, sedangkan yang di iOS channel yakni IMPORTANCE_HIGH
.Daftar lengkap opsi kepentingan (importance) yang ada adalah:
IMPORTANCE_MAX
: tidak dipakaiIMPORTANCE_HIGH:
tampil di mana saja, menciptakan keributan dan muncul tiba-tiba.IMPORTANCE_DEFAULT:
tampil di mana saja, menciptakan keributan, tetapi secara visual tidak menggangguIMPORTANCE_LOW
: tampil di mana saja, tetapi tidak menggangguIMPORTANCE_MIN
: hanya tampil di bawah bayang-bayang, di balik lipatan.IMPORTANCE_NONE
: pemberitahuan yang tidak penting; tidak tampil dalam bayang-bayang
Semua pemberitahuan untuk suatu kanal akan diberi tingkat kepentingan yang sama.
5. Membuat Pemberitahuan dan Mengirimkannya ke Kanal
Kita akan menciptakan dua Notifications untuk masing-masing kanal kita di kelas
NotificationUtils
yang kita buat. Kita akan menetapkan notifikasi mana yang harus dikirimkan ke suatu kanal dalam Notification.Builder
(Android API 25) constructor, yang kita masukkan ke dalam channel id sebagai argumen kedua.// ... public Notification.Builder getAndroidChannelNotification(String title, String body) { return new Notification.Builder(getApplicationContext(), ANDROID_CHANNEL_ID) .setContentTitle(title) .setContentText(body) .setSmallIcon(android.R.drawable.stat_notify_more) .setAutoCancel(true); } public Notification.Builder getIosChannelNotification(String title, String body) { return new Notification.Builder(getApplicationContext(), IOS_CHANNEL_ID) .setContentTitle(title) .setContentText(body) .setSmallIcon(android.R.drawable.stat_notify_more) .setAutoCancel(true); } //...
Waspadalah bahwa
Notification.Builder()
juga mempunyai suatu metodee id setter untuk notification channel id setter yang disebut setChannel(String channelId)
, jadi Anda bisa menentukan untuk mengeset id notification channel baik di constructor maupun memakai metode setter.6. Membuat Tata Letak XML
Sekarang kita telah mempunyai pengaturan awal untuk menciptakan dan mengirimkan ke notification channel, mari menciptakan antarmuka tata letak XML untuk mengirimkan pesaan ke activity_main.xml.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:layout_margin="16dp" tools:context="com.chikeandroid.tutsplusalerts.MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Tuts+ Android Channel" android:layout_gravity="center_horizontal" android:textAppearance="@style/TextAppearance.AppCompat.Title"/> <EditText android:id="@+id/et_android_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Title"/> <EditText android:id="@+id/et_android_author" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Author"/> <Button android:id="@+id/btn_send_android" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Send"/> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:layout_marginTop="20dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Tuts+ IOS Channel" android:layout_gravity="center_horizontal" android:textAppearance="@style/TextAppearance.AppCompat.Title"/> <EditText android:id="@+id/et_ios_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Title" /> <EditText android:id="@+id/et_ios_author" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Author"/> <Button android:id="@+id/btn_send_ios" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Send"/> </LinearLayout> </LinearLayout>
7. Mengirimkan Pemberitahuan ke Kanal
Mengirimkan ke Android Channel
Dalam bab ini, kita akan menyunting
MainActivity
supaya bisa mendapatkan judul dan penulis dari komponen EditText
dan mengirimnya ke Android channel. Kita mendapatkan Notification.Builder
untuk Android channel yang dibentuk di NotificationUtils
, dan kemudian memberitahu NotificationManager
.import android.app.Notification; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.text.TextUtils; import android.view.View; import android.widget.Button; import android.widget.EditText; public class MainActivity extends AppCompatActivity { private NotificationUtils mNotificationUtils; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mNotificationUtils = new NotificationUtils(this); final EditText editTextTitleAndroid = (EditText) findViewById(R.id.et_android_title); final EditText editTextAuthorAndroid = (EditText) findViewById(R.id.et_android_author); Button buttonAndroid = (Button) findViewById(R.id.btn_send_android); buttonAndroid.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String title = editTextTitleAndroid.getText().toString(); String author = editTextAuthorAndroid.getText().toString(); if(!TextUtils.isEmpty(title) && !TextUtils.isEmpty(author)) { Notification.Builder nb = mNotificationUtils. getAndroidChannelNotification(title, "By " + author); mNotificationUtils.getManager().notify(101, nb.build()); } } }); } }
Di titik ini, jalankan aplikasinya dan masukkan judul dan penulisnya, kemudian klik tombol send untuk mendapatkan notifikasinya secara langsung.
Mengirimkan ke iOS Channel
Di sini kami akan mengirimkan ke kanal iOS. Kita akan mendapatkan
Notification.Builder
untuk kanal iOS yang kami buat di NotificationUtils
kami dan kemudian memanggil metode notify()
di NotificationManager
.@Override protected void onCreate(Bundle savedInstanceState) { // ... final EditText editTextTitleIos = (EditText) findViewById(R.id.et_ios_title); final EditText editTextAuthorIos = (EditText) findViewById(R.id.et_ios_author); Button buttonIos = (Button) findViewById(R.id.btn_send_ios); buttonIos.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String title = editTextTitleIos.getText().toString(); String author = editTextAuthorIos.getText().toString(); if(!TextUtils.isEmpty(title) && !TextUtils.isEmpty(author)) { Notification.Builder nb = mNotificationUtils .getIosChannelNotification(title, "By " + author); mNotificationUtils.getManager().notify(102, nb.build()); } } }); }
Jalankan aplikasinya lagi kemudian masukkan judul serta penulis, kemudian klik tombol send untuk mengirimkan pemberitahuan secara langsung.
8. Pengaturan Notification Channel
Pada dikala artikel ini ditulis, Anda tidak bisa secara terprogram mengubah konfigurasi pengaturan notification channel tertentu. Alih-alih, satu-satunya pilihan yang ada yakni pengguna membuka layar pengaturan notifikasi untuk aplikasi di pengaturan perangkat. Dari sana, pengguna bisa mengakses pengaturan pemberitahuan aplikasi untuk memodifikasi pengaturan menyerupai getar, suara, dsb.Pengguna bisa menavigasi ke pengaturan pemberitahuan aplikasi dengan salah satu dari cara di bawah ini:
- Tekan agak usang pemberitahuan di notification drawer (gambar kiri bawah).
- Settings > Apps & notifications > Notifications > kemudian menentukan aplikasinya (gambar di sebelah kanan bawah ini).
Anda juga bisa mengirim pengguna ke pengaturan pemberitahuan channel pribadi dari aplikasi Anda. Mari kita lihat bagaimana cara melakukannya untuk kanal Android. Direkomendasikan Anda melaksanakan ini dalam pengaturan aplikasi Anda untuk menciptakan pengguna gampang mengakses pilihan pemberitahuan ini.
Menyunting Tata Letak XML
Masukkan tombol lainnya yang akan mengirikan pengguna ke pengaturan pemberitahuan kanal.
<!--...--> <Button android:id="@+id/btn_android_notif_settings" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Notification Settings"/> <!--...-->
Menulis Kode Intent
Di sini kita menciptakan suatu intent dan memasukkannya ke action Settings—
ACTION_CHANNEL_NOTIFICATION_SETTINGS
(API 25)—dan tambahkan sejumlah nilai ekstra: nama package aplikasi dan id channel. Terakhir, kita memulai pengaturan activity dengan intent.// ... @Override protected void onCreate(Bundle savedInstanceState) { //... Button buttonAndroidNotifSettings = (Button) findViewById(R.id.btn_android_notif_settings); buttonAndroidNotifSettings.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent i = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS); i.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName()); i.putExtra(Settings.EXTRA_CHANNEL_ID, NotificationUtils.ANDROID_CHANNEL_ID); startActivity(i); } }); } //...
Jalankan aplikasinya dan klik pengaturan pemberitahuan (notification settings) untuk kanal Android.
Di pengaturan pemberitahuan channel, pengguna bisa menyunting pengaturan menyerupai mengaktifkan getar, mengubah importance, atau menampilkan suatu badge (jika didukung) untuk channelnya.
Jika Anda ingin membawa pelanggan ke pengaturan pemberitahuan umum untuk aplikasi Anda, itu juga bisa dilakukan dengan suatu
Intent
:Intent i = new Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS); i.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName()); startActivity(i);
9. Buat Grup Pemberitahuan
Kita juga bisa mengelompokkan kanal-kanal pemberitahuan semoga bisa dikelola bersama. Hal ini bermanfaat untuk aplikasi yang mendukung banyak akun pengguna. Kanal pemberitahuan yang sama tersedia lintas akun-akun individual. Sebagai contoh, suatu aplikasi jaringan sosial mungkin meliputi untuk akun pengguna personal maupun bisnis. Kode di bawah ini menunjukkan Anda cara menciptakan grup notification channel:
String groupId = "group_id_101"; CharSequence groupName = "Channel Name"; NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); mNotificationManager.createNotificationChannelGroup(new NotificationChannelGroup(groupId, groupName));
Kami memakai metode
NotificationManager
createNotificationChannelGroup()
, memasukkan suatu instance NotificationChannelGroup
ke dalamnya, yang membutuhkan id grup dann nama grup untuk membuat instance tersebut..Sekalinya ini selesai, kita harus menyambungkan notification channel ke suatu grup dengan memakai metode
NotificationChannel.setGroup()
dan memasukannya ke id grup. Jika Anda ingin menciptakan banyak grup pemberitahuan secara bersamaan, gunakan createNotificationChannelGroups()
, memasukkan list Java instance NotificationChannelGroup
.10. Menghapus Suatu Notification Channel
Menghapus suatu notification channel cukup gampang bila tidak lagi dibutuhkan. Gunakan saja metode pengelola pemberitahuan
deleteNotificationChannel()
dan masukkan channel idnya.NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); mNotificationManager.deleteNotificationChannel(IOS_CHANNEL_ID);
Meskipun demikian, waspadilah bahwa channel yang dihapus tetap tampak di pengaturan pemberitahuan untuk mencegah spam.
Kesimpulan
Dalam tutorial ini, Anda berguru perihal Notification Channel untuk Android O: apa mereka dan bagaimana membuatnya, termasuk bagaimana mengirimkan pemberitahuan ke channel, bagaimana mengakses pengaturan pemberitahuan channel, bagaimana mengelompokkan notification channel, dan bagaimana menghapus suatu notification channel.
Untuk berguru lebih lanjut perihal Notification Channel, merujuklah ke dokumentasi resminya.
Dilansir dari tutsplus.com/tutorials
Diterjemahkan oleh Kurniawan Sugi Purwanto