Advertisement
  1. Code
  2. Mobile Development
  3. Android Development

Android-O: Bagaimana Menggunakan Notification Channels

Scroll to top
Read Time: 10 min

() translation by (you can also view the original English article)

Final product imageFinal product imageFinal product image
What You'll Be Creating

Google telah meluncurkan pratinjau pengembangan pertaama versi Android berikutnya, saat ini kodenya adalah Android O (mungkinkah Oreo?) Beberapa fitur menarik telah dirilis, dan salah satunya adalah Notification Channels. Dalam tutorial ini, kita akan mengeksplorasi fitur ini dan membuat aplikasi sederhana yang mendemostrasikan fungsionalitas yang disediakannya.

Apa Itu Notification Channels?

Kanal notifikasi (notification channels) memungkinkan kita sebagai pengembang aplikasi untuk mengelompokkan notifikasi berdasarkan 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 baru ini sangat membantu dalam meningkatkan pengalaman pengguna suatu aplikasi.

Kita akan beajar tentang fitur ini dengan membuat aplikasi sederhana bernama "TutsplusAlerts" yang akan menyediakan dua kanal pemberitahuan: Android dan iOS. Pengguna akan menerima pemberitahuan dari salah satu kanal yang terpisah itu apabila ada artikel baru yang dikirimkan.

1. Pengaturan Awal Android O SDK

Untuk mulai menggunakan Android O API, pada saat 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).

Android Studio SDK Manager Android Studio SDK Manager Android Studio SDK Manager

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 baru yang bernama TutsplusAlert dengan activity kosong yang bernama MainActivity.

Android Studio new project setupAndroid Studio new project setupAndroid Studio new project setup

3. Perbarui build.gradle

Buka file build.gradle di modul aplikasi dan perbarui compileSdkVersion, buildToolsVersion dan targetSdkVersion serta versi Support Library.

1
android {
2
    compileSdkVersion "android-O"
3
    buildToolsVersion "26.0.0-rc1"
4
5
    defaultConfig {
6
        applicationId "com.chikeandroid.tutsplusalerts"
7
        minSdkVersion 'O'
8
        targetSdkVersion 'O'
9
        versionCode 1
10
        versionName "1.0"
11
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
12
  }
13
  ...
14
}
15
16
dependencies {
17
    ...
18
    compile 'com.android.support:appcompat-v7:26.0.0-alpha1'
19
    ...
20
}

Ingatlah untuk melakukan sinkronisasi proyek Anda setelah melakukan beberapa perubahan tersebut.

4. Buat Notification Channels

Buat kelas baru dan beri nama NotificationUtils, memperluas ContextWrapper.

1
import android.app.Notification;
2
import android.app.NotificationChannel;
3
import android.app.NotificationManager;
4
import android.content.Context;
5
import android.content.ContextWrapper;
6
import android.graphics.Color;
7
8
public class NotificationUtils extends ContextWrapper {
9
10
    private NotificationManager mManager;
11
    public static final String ANDROID_CHANNEL_ID = "com.chikeandroid.tutsplustalerts.ANDROID";
12
    public static final String IOS_CHANNEL_ID = "com.chikeandroid.tutsplustalerts.IOS";
13
    public static final String ANDROID_CHANNEL_NAME = "ANDROID CHANNEL";
14
    public static final String IOS_CHANNEL_NAME = "IOS CHANNEL";
15
16
    public NotificationUtils(Context base) {
17
        super(base);
18
        createChannels();
19
    }
20
21
    public void createChannels() {
22
23
        // create android channel

24
        NotificationChannel androidChannel = new NotificationChannel(ANDROID_CHANNEL_ID,
25
                ANDROID_CHANNEL_NAME, NotificationManager.IMPORTANCE_DEFAULT);
26
        // Sets whether notifications posted to this channel should display notification lights

27
        androidChannel.enableLights(true);
28
        // Sets whether notification posted to this channel should vibrate.

29
        androidChannel.enableVibration(true);
30
        // Sets the notification light color for notifications posted to this channel

31
        androidChannel.setLightColor(Color.GREEN);
32
        // Sets whether notifications posted to this channel appear on the lockscreen or not

33
        androidChannel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
34
35
        getManager().createNotificationChannel(androidChannel);
36
37
        // create ios channel

38
        NotificationChannel iosChannel = new NotificationChannel(IOS_CHANNEL_ID,
39
                IOS_CHANNEL_NAME, NotificationManager.IMPORTANCE_HIGH);
40
        iosChannel.enableLights(true);
41
        iosChannel.enableVibration(true);
42
        iosChannel.setLightColor(Color.GRAY);
43
        iosChannel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC);
44
        getManager().createNotificationChannel(iosChannel);
45
    }
46
47
    private NotificationManager getManager() {
48
        if (mManager == null) {
49
            mManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
50
        }
51
        return mManager;
52
    }
53
}

Dalam kode di atas, kita membuat 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 seperti 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 membuat berbagai 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 membuat 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 adalah IMPORTANCE_HIGH.

Daftar lengkap opsi kepentingan (importance) yang ada adalah:

  • IMPORTANCE_MAX: tidak dipakai
  • IMPORTANCE_HIGH: tampil di mana saja, membuat keributan dan muncul tiba-tiba.
  • IMPORTANCE_DEFAULT: tampil di mana saja, membuat keributan, tetapi secara visual tidak mengganggu
  • IMPORTANCE_LOW: tampil di mana saja, tetapi tidak mengganggu
  • IMPORTANCE_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 membuat 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.

1
// ...

2
public Notification.Builder getAndroidChannelNotification(String title, String body) {
3
    return new Notification.Builder(getApplicationContext(), ANDROID_CHANNEL_ID)
4
            .setContentTitle(title)
5
            .setContentText(body)
6
            .setSmallIcon(android.R.drawable.stat_notify_more)
7
            .setAutoCancel(true);
8
}
9
10
public Notification.Builder getIosChannelNotification(String title, String body) {
11
    return new Notification.Builder(getApplicationContext(), IOS_CHANNEL_ID)
12
            .setContentTitle(title)
13
            .setContentText(body)
14
            .setSmallIcon(android.R.drawable.stat_notify_more)
15
            .setAutoCancel(true);
16
}
17
//...

Waspadalah bahwa Notification.Builder() juga memiliki suatu metodee id setter untuk notification channel id setter yang disebut setChannel(String channelId), jadi Anda bisa memilih untuk mengeset id notification channel baik di constructor maupun menggunakan metode setter.

6. Membuat Tata Letak XML

Sekarang kita telah memiliki pengaturan awal untuk membuat dan mengirimkan ke notification channel, mari membuat antarmuka tata letak XML untuk mengirimkan pesaan ke activity_main.xml.

1
<?xml version="1.0" encoding="utf-8"?>
2
<LinearLayout
3
        xmlns:android="https://schemas.android.com/apk/res/android"
4
        xmlns:app="http://schemas.android.com/apk/res-auto"
5
        xmlns:tools="http://schemas.android.com/tools"
6
        android:id="@+id/activity_main"
7
        android:layout_width="match_parent"
8
        android:layout_height="match_parent"
9
        android:orientation="vertical"
10
        android:layout_margin="16dp"
11
        tools:context="com.chikeandroid.tutsplusalerts.MainActivity">
12
13
    <LinearLayout
14
            android:layout_width="match_parent"
15
            android:layout_height="wrap_content"
16
            android:orientation="vertical">
17
18
        <TextView
19
                android:layout_width="wrap_content"
20
                android:layout_height="wrap_content"
21
                android:text="Tuts+ Android Channel"
22
                android:layout_gravity="center_horizontal"
23
                android:textAppearance="@style/TextAppearance.AppCompat.Title"/>
24
25
        <EditText
26
                android:id="@+id/et_android_title"
27
                android:layout_width="match_parent"
28
                android:layout_height="wrap_content"
29
                android:hint="Title"/>
30
31
        <EditText
32
                android:id="@+id/et_android_author"
33
                android:layout_width="match_parent"
34
                android:layout_height="wrap_content"
35
                android:hint="Author"/>
36
        
37
        <Button
38
                android:id="@+id/btn_send_android"
39
                android:layout_width="match_parent"
40
                android:layout_height="wrap_content"
41
                android:text="Send"/>
42
    </LinearLayout>
43
44
    <LinearLayout
45
            android:layout_width="match_parent"
46
            android:layout_height="wrap_content"
47
            android:orientation="vertical"
48
            android:layout_marginTop="20dp">
49
50
        <TextView
51
                android:layout_width="wrap_content"
52
                android:layout_height="wrap_content"
53
                android:text="Tuts+ IOS Channel"
54
                android:layout_gravity="center_horizontal"
55
                android:textAppearance="@style/TextAppearance.AppCompat.Title"/>
56
57
        <EditText
58
                android:id="@+id/et_ios_title"
59
                android:layout_width="match_parent"
60
                android:layout_height="wrap_content"
61
                android:hint="Title"
62
                />
63
64
        <EditText
65
                android:id="@+id/et_ios_author"
66
                android:layout_width="match_parent"
67
                android:layout_height="wrap_content"
68
                android:hint="Author"/>
69
        <Button
70
                android:id="@+id/btn_send_ios"
71
                android:layout_width="match_parent"
72
                android:layout_height="wrap_content"
73
                android:text="Send"/>
74
    </LinearLayout>
75
    
76
</LinearLayout>

7. Mengirimkan Pemberitahuan ke Kanal

Mengirimkan ke Android Channel

Dalam bagian 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 dibuat di NotificationUtils, dan kemudian memberitahu NotificationManager.

1
import android.app.Notification;
2
import android.os.Bundle;
3
import android.support.v7.app.AppCompatActivity;
4
import android.text.TextUtils;
5
import android.view.View;
6
import android.widget.Button;
7
import android.widget.EditText;
8
9
public class MainActivity extends AppCompatActivity {
10
11
    private NotificationUtils mNotificationUtils;
12
13
    @Override
14
    protected void onCreate(Bundle savedInstanceState) {
15
        super.onCreate(savedInstanceState);
16
        setContentView(R.layout.activity_main);
17
18
        mNotificationUtils = new NotificationUtils(this);
19
20
        final EditText editTextTitleAndroid = (EditText) findViewById(R.id.et_android_title);
21
        final EditText editTextAuthorAndroid = (EditText) findViewById(R.id.et_android_author);
22
        Button buttonAndroid = (Button) findViewById(R.id.btn_send_android);
23
24
        buttonAndroid.setOnClickListener(new View.OnClickListener() {
25
            @Override
26
            public void onClick(View view) {
27
                String title = editTextTitleAndroid.getText().toString();
28
                String author = editTextAuthorAndroid.getText().toString();
29
30
                if(!TextUtils.isEmpty(title) && !TextUtils.isEmpty(author)) {
31
                    Notification.Builder nb = mNotificationUtils.
32
                            getAndroidChannelNotification(title, "By " + author);
33
34
                    mNotificationUtils.getManager().notify(101, nb.build());
35
                }
36
            }
37
        });
38
    }
39
}

Di titik ini, jalankan aplikasinya dan masukkan judul dan penulisnya, lalu klik tombol send untuk menerima notifikasinya secara langsung.

Android app emulator send notification shows in notification drawerAndroid app emulator send notification shows in notification drawerAndroid app emulator send notification shows in notification drawer

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.

1
@Override
2
protected void onCreate(Bundle savedInstanceState) {
3
   
4
    // ...

5
    
6
    final EditText editTextTitleIos = (EditText) findViewById(R.id.et_ios_title);
7
    final EditText editTextAuthorIos = (EditText) findViewById(R.id.et_ios_author);
8
    Button buttonIos = (Button) findViewById(R.id.btn_send_ios);
9
    buttonIos.setOnClickListener(new View.OnClickListener() {
10
        @Override
11
        public void onClick(View view) {
12
            String title = editTextTitleIos.getText().toString();
13
            String author = editTextAuthorIos.getText().toString();
14
15
            if(!TextUtils.isEmpty(title) && !TextUtils.isEmpty(author)) {
16
                Notification.Builder nb = mNotificationUtils
17
                        .getIosChannelNotification(title, "By " + author);
18
19
                mNotificationUtils.getManager().notify(102, nb.build());
20
            }
21
        }
22
    });
23
}

Jalankan aplikasinya lagi lalu masukkan judul serta penulis, kemudian klik tombol send untuk mengirimkan pemberitahuan secara langsung.

Android app emulator send button click shows notification in drawerAndroid app emulator send button click shows notification in drawerAndroid app emulator send button click shows notification in drawer

8. Pengaturan Notification Channel

Pada saat artikel ini ditulis, Anda tidak bisa secara terprogram mengubah konfigurasi pengaturan notification channel tertentu. Alih-alih, satu-satunya pilihan yang ada adalah pengguna membuka layar pengaturan notifikasi untuk aplikasi di pengaturan perangkat. Dari sana, pengguna bisa mengakses pengaturan pemberitahuan aplikasi untuk memodifikasi pengaturan seperti getar, suara, dsb.Pengguna bisa menavigasi ke pengaturan pemberitahuan aplikasi dengan salah satu dari cara di bawah ini:

  • Tekan agak lama pemberitahuan di notification drawer (gambar kiri bawah).
  • Settings > Apps & notifications > Notifications > kemudian memilih aplikasinya (gambar di sebelah kanan bawah ini).
Android Emulator app notification settingsAndroid Emulator app notification settingsAndroid Emulator app notification settings

Anda juga bisa mengirim pengguna ke pengaturan pemberitahuan channel langsung dari aplikasi Anda. Mari kita lihat bagaimana cara melakukannya untuk kanal Android. Direkomendasikan Anda melakukan ini dalam pengaturan aplikasi Anda untuk membuat pengguna mudah mengakses pilihan pemberitahuan ini.

Menyunting Tata Letak XML

Masukkan tombol lainnya yang akan mengirikan pengguna ke pengaturan pemberitahuan kanal.

1
<!--...-->
2
<Button
3
    android:id="@+id/btn_android_notif_settings"
4
    android:layout_width="match_parent"
5
    android:layout_height="wrap_content"
6
    android:text="Notification Settings"/>
7
<!--...-->

Menulis Kode Intent

Di sini kita membuat suatu intent dan memasukkannya ke action SettingsACTION_CHANNEL_NOTIFICATION_SETTINGS (API 25)—dan tambahkan sejumlah nilai ekstra: nama package aplikasi dan id channel. Terakhir, kita memulai pengaturan activity dengan intent.

1
// ...

2
@Override
3
protected void onCreate(Bundle savedInstanceState) {
4
    //...

5
    Button buttonAndroidNotifSettings = (Button) findViewById(R.id.btn_android_notif_settings);
6
    buttonAndroidNotifSettings.setOnClickListener(new View.OnClickListener() {
7
    
8
        @Override
9
        public void onClick(View view) {
10
            Intent i = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS);
11
            i.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName());
12
            i.putExtra(Settings.EXTRA_CHANNEL_ID, NotificationUtils.ANDROID_CHANNEL_ID);
13
            startActivity(i);
14
        }
15
    });
16
}
17
//...

Jalankan aplikasinya dan klik pengaturan pemberitahuan (notification settings) untuk kanal Android.

Android emulator click android channel notification settings opens device channel settingsAndroid emulator click android channel notification settings opens device channel settingsAndroid emulator click android channel notification settings opens device channel settings

Di pengaturan pemberitahuan channel, pengguna bisa menyunting pengaturan seperti 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:

1
Intent i = new Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS);
2
i.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName());
3
startActivity(i);

9. Buat Grup Pemberitahuan

Kita juga bisa mengelompokkan kanal-kanal pemberitahuan supaya 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 mencakup untuk akun pengguna personal maupun bisnis. Kode di bawah ini menunjukkan Anda cara membuat grup notification channel:

1
String groupId = "group_id_101";
2
CharSequence groupName = "Channel Name";
3
NotificationManager mNotificationManager =
4
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
5
mNotificationManager.createNotificationChannelGroup(new NotificationChannelGroup(groupId, groupName));

Kami menggunakan 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 menggunakan metode NotificationChannel.setGroup() dan memasukannya ke id grup. Jika Anda ingin membuat banyak grup pemberitahuan secara bersamaan, gunakan createNotificationChannelGroups(), memasukkan list Java instance NotificationChannelGroup.

10. Menghapus Suatu Notification Channel

Menghapus suatu notification channel cukup mudah jika tidak lagi dibutuhkan. Gunakan saja metode pengelola pemberitahuan deleteNotificationChannel() dan masukkan channel idnya.

1
NotificationManager mNotificationManager =
2
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
3
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 belajar tentang 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 belajar lebih lanjut tentang Notification Channel, merujuklah ke dokumentasi resminya. Dan sementara waktu, pelajari sejumlah kursus dan tutorial kami yang lain tentang pengembangan aplikasi Android.


Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.