Android Lanjutan di Kotlin 01.2: Android Firebase Cloud Messaging

Codelab ini adalah bagian dari kursus Lanjutan Android di Kotlin. Anda akan mendapatkan manfaat maksimal dari kursus ini jika Anda mengerjakan codelab secara berurutan, tetapi ini tidak wajib. Semua codelab kursus tercantum di halaman landing codelab Android Lanjutan di Kotlin.

Pengantar

Di codelab sebelumnya, Anda menambahkan notifikasi ke timer telur yang dibuat dan dipicu dalam aplikasi. Kasus penggunaan penting lainnya dari notifikasi adalah untuk mengirim notifikasi push dari jarak jauh yang dapat diterima bahkan saat aplikasi tidak berjalan.

Apa yang dimaksud dengan notifikasi push?

Notifikasi push adalah notifikasi yang "dikirim" oleh server ke perangkat seluler. Iklan tersebut dapat dikirim ke perangkat terlepas dari apakah aplikasi sedang berjalan atau tidak.

Notifikasi push adalah cara yang bagus untuk memberi tahu pengguna tentang update atau mengingatkan mereka tentang tugas atau fitur. Bayangkan menunggu produk tersedia lagi. Dengan notifikasi push, aplikasi belanja dapat memberi tahu Anda tentang pembaruan stok, sehingga Anda tidak perlu memeriksa status stok setiap hari.

Notifikasi push memanfaatkan pola publish/subscribe, yang memungkinkan aplikasi backend mengirimkan konten yang relevan kepada klien yang tertarik. Tanpa model publikasi/langganan, pengguna aplikasi Anda perlu memeriksa pembaruan aplikasi Anda secara berkala. Proses ini membosankan dan tidak dapat diandalkan bagi pengguna. Selain itu, seiring dengan bertambahnya jumlah klien, pemeriksaan berkala ini akan menimbulkan beban yang terlalu besar pada jaringan dan resource pemrosesan, baik untuk server aplikasi Anda maupun untuk perangkat pengguna.

Sama seperti semua jenis notifikasi lainnya, pastikan Anda menghormati pengguna dengan notifikasi push. Jika konten notifikasi tidak menarik atau tepat waktu bagi pengguna, mereka dapat dengan mudah menonaktifkan semua notifikasi dari aplikasi Anda.

Apa itu Firebase Cloud Messaging?

Firebase Cloud Messaging adalah bagian dari platform Firebase untuk pengembangan seluler. Biasanya, Anda perlu menyiapkan server dari awal yang dapat berkomunikasi dengan perangkat seluler untuk memicu notifikasi. Dengan Firebase Cloud Messaging, Anda dapat mengirim notifikasi ke semua pengguna aplikasi yang diinstal, atau sebagian dari mereka, tanpa menyiapkan server. Misalnya, Anda dapat mengirim pengingat kepada pengguna atau memberi mereka promosi khusus, seperti hadiah gratis.Anda dapat mengirim notifikasi dari satu perangkat ke beberapa perangkat dari jarak jauh.

Anda juga dapat menggunakan Firebase Cloud Messages untuk mentransfer data dari aplikasi backend atau dari project Firebase ke pengguna.

Dalam codelab ini, Anda akan mempelajari cara menggunakan Firebase Cloud Messaging untuk mengirim notifikasi push bagi aplikasi Android, serta mengirim data.

Jika Anda mengalami masalah (bug kode, kesalahan gramatikal, susunan kata yang tidak jelas, dll.) saat mengerjakan codelab ini, laporkan masalah tersebut melalui link Laporkan kesalahan di pojok kiri bawah codelab.

Yang harus sudah Anda ketahui

Anda harus memahami:

  • Cara membuat aplikasi Android di Kotlin. Khususnya, gunakan Android SDK.
  • Cara mendesain aplikasi menggunakan komponen arsitektur dan data binding.
  • Pemahaman dasar tentang penerima siaran.
  • Pemahaman dasar tentang AlarmManager.
  • Cara membuat dan mengirim notifikasi menggunakan NotificationManager.

Yang akan Anda pelajari

  • Cara mengirimkan pesan kepada pengguna melalui Firebase Cloud Messaging.
  • Cara mengirim data dari backend ke aplikasi menggunakan pesan data, yang merupakan bagian dari Firebase Cloud Messaging.

Yang akan Anda lakukan

  • Menambahkan notifikasi push ke aplikasi awal.
  • Tangani Firebase Cloud Messaging saat aplikasi Anda berjalan.
  • Transfer data dengan Firebase Cloud Messaging.

Dalam codelab ini, Anda akan mengerjakan kode dari codelab Menggunakan Notifikasi di Aplikasi Android sebelumnya. Pada codelab sebelumnya, Anda membuat aplikasi timer telur yang mengirimkan notifikasi ketika timer memasak habis. Dalam codelab ini, Anda akan menambahkan Firebase Cloud Messaging untuk mengirim notifikasi push ke pengguna aplikasi Anda guna mengingatkan mereka untuk makan telur.

Untuk mendapatkan aplikasi contoh, Anda dapat:

Clone repositori dari GitHub dan beralih ke cabang starter:

$  git clone https://github.com/googlecodelabs/android-kotlin-notifications-fcm


Atau, Anda dapat mendownload repositori sebagai file Zip, mengekstraknya, dan membukanya di Android Studio.

Download Zip

Langkah 1: Buat project Firebase

Agar dapat menambahkan Firebase ke aplikasi Android, Anda perlu membuat project Firebase untuk dihubungkan ke aplikasi Android.

  1. Login ke Firebase console.
  2. Klik Tambahkan project, lalu pilih atau masukkan Nama project. Beri nama project Anda fcm-codelab.
  3. Klik Continue.
  4. Anda dapat melewati penyiapan Google Analytics dengan menonaktifkan tombol Aktifkan Google Analytics untuk project ini.
  5. Klik Buat Project untuk menyelesaikan penyiapan project Firebase.

Langkah 2: Daftarkan aplikasi ke Firebase

Setelah memiliki project Firebase, Anda dapat menambahkan aplikasi Android ke dalamnya.

  1. Di tengah halaman ringkasan project Firebase console, klik ikon Android untuk meluncurkan alur kerja penyiapan.

  1. Di kolom Nama paket Android, masukkan com.example.android.eggtimernotifications.
  2. Klik Daftarkan aplikasi.

Penting: Pastikan Anda memasukkan ID yang benar untuk aplikasi Anda karena Anda tidak dapat menambahkan atau mengubah nilai ini setelah mendaftarkan aplikasi ke project Firebase Anda.

Langkah 3: Tambahkan file konfigurasi Firebase ke project Anda

Tambahkan file konfigurasi Android Firebase ke aplikasi Anda.

  1. Klik Download google-services.json untuk mendapatkan file konfigurasi Android Firebase Anda (google-services.json). Pastikan file konfigurasi tidak ditambahi dengan karakter tambahan dan bernama google-services.json dengan tepat.
  2. Pindahkan file konfigurasi ke direktori modul (level aplikasi) aplikasi Anda.

Langkah 4: Konfigurasikan project Android Anda untuk mengaktifkan produk Firebase

Untuk mengaktifkan produk Firebase di aplikasi, Anda harus menambahkan plugin google-services ke file Gradle.

  1. Dalam file Gradle level root (level project), build.gradle, pastikan Anda memiliki repositori Maven Google.
  2. Kemudian, tambahkan aturan untuk menyertakan plugin Layanan Google.

build.gradle

buildscript {

  repositories {
    // Check that you have the following line (if not, add it):
    google()  // Google's Maven repository
  }

  dependencies {
    // ...

    // Add the following line:
    classpath 'com.google.gms:google-services:4.3.2'  // Google Services plugin
  }
}

allprojects {
  // ...

  repositories {
    // Check that you have the following line (if not, add it):
    google()  // Google's Maven repository
    // ...
  }
}
  1. Dalam file Gradle modul (level aplikasi), biasanya app/build.gradle, tambahkan baris untuk menerapkan plugin ke bagian bawah file.

app/build.gradle

apply plugin: 'com.android.application'

android {
  // ...
}

// Add the following line to the bottom of the file:
apply plugin: 'com.google.gms.google-services'  // Google Play services Gradle plugin

Dalam tugas ini, Anda akan menambahkan Firebase Cloud Messaging (FCM) ke project untuk memanfaatkan notifikasi push.

Kode layanan Android untuk FCM codelab ini diberikan dalam MyFirebaseMessagingService.kt. Di langkah-langkah berikut, Anda akan menambahkan kode ke aplikasi Android.

Anda akan menggunakan Notifications Composer untuk menguji implementasi. Notifications Composer adalah alat yang membantu Anda menulis dan mengirim pesan dari situs Firebase console.

  1. Buka MyFirebaseMessagingService.kt
  2. Periksa file dan khususnya fungsi berikut:
  • onNewToken()—Dipanggil otomatis jika layanan Anda terdaftar dalam manifes Android. Fungsi ini dipanggil saat pertama kali menjalankan aplikasi dan setiap kali Firebase mengeluarkan token baru untuk aplikasi Anda. Token adalah kunci akses ke project backend Firebase. Layanan ini dibuat untuk perangkat klien tertentu Anda. Dengan token ini, Firebase mengetahui klien mana yang harus dikirimi pesan oleh backend. Firebase juga tahu apakah klien ini valid dan memiliki akses ke project Firebase ini.
  • onMessageReceived— Dipanggil saat aplikasi Anda berjalan dan Firebase mengirimkan pesan ke aplikasi Anda. Fungsi ini menerima objek RemoteMessage yang dapat membawa payload pesan atau notifikasi. Anda akan mempelajari lebih lanjut tentang perbedaan antara payload pesan dan payload pesan nanti di codelab ini.

Langkah 1: Mengirim notifikasi FCM ke satu perangkat

Konsol Notifications memungkinkan Anda menguji pengiriman notifikasi. Untuk mengirim pesan ke perangkat tertentu menggunakan konsol, Anda perlu mengetahui token pendaftaran perangkat tersebut.

Saat backend Firebase menghasilkan token baru atau yang diperbarui, fungsi onNewToken() akan dipanggil, dengan token baru yang diteruskan sebagai argumen. Jika Anda ingin menargetkan satu perangkat atau membuat grup perangkat tempat Anda ingin mengirim pesan siaran, Anda harus mengakses token ini dengan memperluas FirebaseMessagingService dan mengganti onNewToken().

  1. Buka AndroidManifest.xml dan hapus tanda komentar kode berikut untuk mengaktifkan MyFirebaseMessagingService untuk aplikasi timer telur. Meta-data layanan di manifes Android mendaftarkan MyFirebaseMessagingService sebagai layanan dan menambahkan filter intent sehingga layanan ini akan menerima pesan yang dikirim dari FCM. Bagian terakhir metadata mendeklarasikan breakfast_notification_channel_id sebagai default_notification_channel_id untuk Firebase. Anda akan menggunakan ID ini di langkah berikutnya.
<!-- AndroidManifest.xml -->
<!-- TODO: Step 3.0 uncomment to start the service  -->

        <service
                android:name=".MyFirebaseMessagingService"
                android:exported="false">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT"/>
            </intent-filter>
        </service>
        <!-- [START fcm_default_icon] -->
        <!--
 Set custom default icon. This is used when no icon is set for incoming notification messages.
             See README(https://goo.gl/l4GJaQ) for more.
        -->
        <meta-data
                android:name="com.google.firebase.messaging.default_notification_icon"
                android:resource="@drawable/common_google_signin_btn_icon_dark"/>
        <!--
 Set color used with incoming notification messages. This is used when no color is set for the incoming
             notification message. See README(https://goo.gl/6BKBk7) for more.
        -->
        <meta-data
                android:name="com.google.firebase.messaging.default_notification_color"
                android:resource="@color/colorAccent"/> <!-- [END fcm_default_icon] -->
        <!-- [START fcm_default_channel] -->
        <meta-data
            android:name="com.google.firebase.messaging.default_notification_channel_id"
            android:value="@string/breakfast_notification_channel_id" />
        <!-- [END fcm_default_channel] -->

Sebaiknya buat saluran notifikasi baru untuk FCM karena pengguna Anda mungkin ingin mengaktifkan/menonaktifkan timer telur atau notifikasi push FCM secara terpisah.

  1. Buka ui/EggTimerFragment.kt . Di onCreateView(), tambahkan kode pembuatan saluran berikut.
// EggTimerFragment.kt

   // TODO: Step 3.1 create a new channel for FCM
    createChannel(
        getString(R.string.breakfast_notification_channel_id),
        getString(R.string.breakfast_notification_channel_name)
    )
  1. Buka MyFirebaseMessagingService.kt dan hapus tanda komentar pada fungsi onNewToken(). Fungsi ini akan dipanggil saat token baru dibuat.
// MyFirebaseMessagingService.kt

   // TODO: Step 3.2 log registration token
    // [START on_new_token]
    /**
     * Called if InstanceID token is updated. This may occur if the security of
     * the previous token had been compromised. Note that this is called when the     
     * InstanceID token is initially generated so this is where you would retrieve     
     * the token.
     */
    override fun onNewToken(token: String?) {
        Log.d(TAG, "Refreshed token: $token")

        // If you want to send messages to this application instance or
        // manage this apps subscriptions on the server side, send the
        // Instance ID token to your app server.
        sendRegistrationToServer(token)
    }
    // [END on_new_token]
  1. Jalankan aplikasi timer telur.
  2. Amati logcat (View > Tool Windows > Logcat). Anda akan melihat baris log yang menunjukkan token yang mirip dengan yang di bawah ini. Ini adalah token yang Anda perlukan untuk mengirim pesan ke perangkat ini. Fungsi ini hanya dipanggil saat token baru dibuat.
2019-07-23 13:09:15.243 2312-2459/com.example.android.eggtimernotifications D/MyFirebaseMsgService: Refreshed token: f2esflBoQbI:APA91bFMzNNFaIskjr6KIV4zKjnPA4hxekmrtbrtba2aDbh593WQnm11ed54Mv6MZ9Yeerver7pzgwfKx7R9BHFffLBItLEgPvrtF0TtX9ToCrXZ5y7Hd-m

Catatan: Jika Anda tidak melihat token dalam pesan logcat, aplikasi Anda mungkin sudah menerima token sebelumnya. Dalam hal ini, meng-uninstal aplikasi akan membantu Anda menerima token baru.

Sekarang Anda bisa mengujinya dengan mengirimkan notifikasi. Agar dapat mengirim notifikasi, gunakan Notifications Composer.

  1. Buka Firebase Console, lalu pilih project Anda.
  2. Selanjutnya, pilih Cloud Messaging dari navigasi di sebelah kiri.
  3. Klik Kirim pesan pertama.

  1. Masukkan Time for Breakfast! sebagai judul notifikasi dan Don't forget to eat eggs! sebagai teks notifikasi, lalu pilih Kirim pesan uji coba. Dialog pop-up Test on device akan muncul, yang meminta Anda untuk memberikan token pendaftaran FCM.

  1. Salin token aplikasi Anda dari logcat.

  1. Tempel token ini ke kolom Tambahkan token pendaftaran FCM dalam jendela pop-up, lalu klik tombol Tambahkan di samping token.
  2. Dalam daftar kotak centang yang muncul, pilih token. Tombol Test akan diaktifkan.

  1. Di perangkat, tempatkan aplikasi Egg Timer di latar belakang.
  2. Di pop-up, klik Uji.
  1. Setelah mengklik Test, perangkat klien yang ditarget yang menjalankan aplikasi Anda di latar belakang akan menerima notifikasi di baki notifikasi sistem. (Anda akan melihat selengkapnya mengenai cara menangani pesan FCM ketika aplikasi Anda ada di latar depan.)

Tugas: Mengirim Notifikasi FCM ke Topik

Pesan topik FCM didasarkan pada model publikasi/langganan.

Aplikasi pesan dapat menjadi contoh yang baik untuk model Publish/Subscribe. Bayangkan saat aplikasi memeriksa pesan baru setiap 10 detik. Ini tidak hanya akan menguras baterai ponsel Anda, tetapi juga akan menggunakan sumber daya jaringan yang tidak perlu, dan akan menciptakan beban yang tidak perlu pada server aplikasi Anda. Sebagai gantinya, perangkat klien bisa berlangganan dan diberi tahu saat ada pesan baru yang dikirim melalui aplikasi Anda.

Topik memungkinkan Anda mengirim pesan ke beberapa perangkat yang telah memilih topik tertentu tersebut. Untuk klien, topik adalah sumber data tertentu yang diminati klien. Untuk server, topik adalah grup perangkat yang telah memilih untuk menerima pembaruan tentang sumber data tertentu. Topik dapat digunakan untuk menyajikan kategori notifikasi, seperti berita, perkiraan cuaca, dan hasil pertandingan olahraga. Untuk bagian codelab ini, Anda akan membuat topik "sarapan" untuk mengingatkan pengguna aplikasi yang berminat untuk makan telur dengan sarapan.

Untuk berlangganan ke topik, aplikasi klien memanggil fungsi subscribeToTopic() Firebase Cloud Messaging dengan nama topik breakfast. Panggilan ini dapat memiliki dua hasil. Jika pemanggil berhasil, callback OnCompleteListener akan dipanggil dengan pesan langganan. Jika klien gagal berlangganan, callback akan menerima pesan error.

Di aplikasi, Anda akan otomatis membuat pengguna berlangganan topik sarapan. Namun, di sebagian besar aplikasi produksi, lebih baik memberikan kontrol kepada pengguna terhadap topik langganan tertentu.

  1. Buka EggTimerFragment.kt dan temukan fungsi subscribeTopic() yang kosong.
  2. Dapatkan instance FirebaseMessaging dan panggil fungsi subscibeToTopic() dengan nama topik.
  3. Tambahkan addOnCompleteListener untuk mendapatkan notifikasi kembali dari FCM tentang apakah langganan Anda berhasil atau gagal.
// EggTimerFragment.kt

   // TODO: Step 3.3 subscribe to breakfast topic
    private fun subscribeTopic() {
        // [START subscribe_topics]
        FirebaseMessaging.getInstance().subscribeToTopic(TOPIC)
            .addOnCompleteListener { task ->
                var msg = getString(R.string.message_subscribed)
                if (!task.isSuccessful) {
                    msg = getString(R.string.message_subscribe_failed)
                }
                Toast.makeText(context, msg, Toast.LENGTH_SHORT).show()
            }
        // [END subscribe_topics]
    }
  1. Panggil fungsi subscribeTopic() untuk berlangganan topik saat aplikasi dimulai. Scroll ke atas hingga onCreateView(), lalu tambahkan panggilan ke subscribeTopic().
// EggTimerFragment.kt

   // TODO: Step 3.4 call subscribe topics on start
    subscribeTopic()

    return binding.root
  1. Untuk berlangganan topik sarapan, jalankan kembali aplikasi. Anda akan melihat pesan toast yang mengatakan "Berlangganan ke topik".

Sekarang Anda dapat menguji pengiriman pesan ke topik:

  1. Buka Notifications Composer, lalu pilih Compose Notification.
  2. Tetapkan Judul notifikasi dan Teks notifikasi notifikasi seperti sebelumnya.
  3. Kali ini, klik Topik di Target dan masukkan breakfast sebagai topik pesan, bukan kirim ke satu perangkat.

  1. Pilih Sekarang untuk Penjadwalan.

  1. Pastikan aplikasi Anda berjalan di latar belakang pada perangkat pengujian.
  1. Klik Tinjau, lalu klik Publikasikan. Jika dapat menjalankan aplikasi di lebih dari satu perangkat, Anda dapat menguji dan melihat bahwa notifikasi diterima di semua perangkat yang berlangganan topik ini.

Aplikasi memiliki saluran berikut untuk notifikasi sekarang, Egg dan Breakfast. Di perangkat klien, klik lama ikon aplikasi, pilih Info,lalu klik Notifications. Anda akan melihat saluran notifikasi Telur dan Sarapan, seperti yang ditunjukkan pada screenshot berikut. Jika Anda membatalkan pilihan saluran Sarapan, aplikasi tidak akan menerima notifikasi yang dikirim melalui saluran ini.

Ketika menggunakan notifikasi, selalu ingat bahwa pengguna dapat menonaktifkan saluran notifikasi kapan saja.

Langkah 1: Pesan data

Pesan FCM juga dapat berisi payload data yang memproses pesan di aplikasi klien, dan menggunakan pesan data, bukan pesan notifikasi.

Untuk menangani pesan data, Anda perlu menangani payload data di fungsi onMessageReceived() dari MyFirebaseMessagingService. Payload disimpan di properti data objek remoteMessage. Objek remoteMessage dan properti data dapat berupa null.

  1. Buka MyFirebaseMessagingService.
  2. Periksa apakah properti data objek remoteMessage memiliki beberapa nilai dan cetak data ke log.
// MyFirebaseMessagingService.kt

    // [START receive_message]
    override fun onMessageReceived(remoteMessage: RemoteMessage?) {
        // Not getting messages here? See why this may be: https://goo.gl/39bRNJ
        Log.d(TAG, "From: ${remoteMessage?.from}")
        
       // TODO: Step 3.5 check messages for data
        // Check if the message contains a data payload.
        remoteMessage?.data?.let {
            Log.d(TAG, "Message data payload: " + remoteMessage.data)
        }

    }
    // [END receive_message]

Untuk menguji kode, Anda dapat menggunakan Notifications Composer lagi.

  1. Buka Notifications Composer, buat pesan baru, dengan menetapkan Target ke topik "breakfast".
  2. Kali ini, ketika Anda mencapai Langkah 4, Opsi tambahan, tetapkan properti nilai dan kunci Data kustom sebagai berikut:
  1. Kunci: eggs
  2. Nilai: 3

  1. Pastikan aplikasi Anda berjalan di latar depan. Jika aplikasi Anda berada di latar belakang, pesan FCM akan memicu notifikasi otomatis dan fungsi onMessageReceived() hanya akan menerima objek remoteMessage saat pengguna mengklik notifikasi.
  2. Kirim pesan dari Notifications composer, dan amati log pesan data yang muncul di logcat.

Langkah 2: Menangani pesan di latar depan dan latar belakang

Ketika perangkat klien yang menjalankan aplikasi Anda menerima pesan yang menyertakan notifikasi dan payload data, perilaku aplikasi bergantung pada apakah aplikasi Anda berada di latar belakang atau latar depan pada perangkat tersebut:

  • Jika aplikasi menjalankan latar belakang, jika pesan memiliki payload notifikasi, notifikasi akan otomatis ditampilkan di baki notifikasi. Jika pesan juga memiliki payload data, payload data akan ditangani oleh aplikasi ketika pengguna mengetuk notifikasi.
  • Jika aplikasi berjalan di latar depan, jika notifikasi pesan memiliki payload notifikasi, notifikasi tidak akan muncul secara otomatis. Aplikasi harus memutuskan cara menangani notifikasi dalam fungsi onMessageReceived(). Jika pesan juga memiliki payload data, kedua payload akan ditangani oleh aplikasi.

Untuk tujuan codelab ini, Anda ingin mengingatkan pengguna aplikasi untuk sarapan. Anda tidak berencana untuk mengirimkan data apa pun, tetapi Anda juga ingin memastikan notifikasi pengingat selalu muncul, terlepas dari apakah aplikasi berada di latar depan atau latar belakang.

Saat Anda mengirim pesan FCM ke perangkat tempat aplikasi timer telur diinstal, pesan notifikasi akan ditampilkan secara otomatis jika aplikasi tidak berjalan atau berada di latar belakang. Namun, jika aplikasi berjalan di latar depan, notifikasi tidak akan ditampilkan secara otomatis; sebagai gantinya, kode aplikasi menentukan tindakan yang harus dilakukan pada pesan. Jika aplikasi berada di latar depan saat menerima pesan FCM, fungsi onMessageReceived() akan otomatis dipicu dengan pesan FCM. Di sinilah aplikasi Anda dapat secara diam-diam menangani notifikasi dan payload data atau memicu notifikasi.

Untuk aplikasi Anda, Anda ingin memastikan pengguna mendapatkan pengingat saat aplikasi berada di latar depan, jadi mari kita terapkan beberapa kode untuk memicu notifikasi:

  1. Buka fungsi onMessageReceived() di MyFirebaseMessagingService lagi.
  2. Segera setelah kode yang baru saja Anda tambahkan untuk memeriksa pesan data, tambahkan kode berikut yang mengirimkan notifikasi menggunakan framework notifikasi.
// MyFirebaseMessagingService.kt

    // TODO: Step 3.6 check messages for notification and call sendNotification
    // Check if the message contains a notification payload.
    remoteMessage.notification?.let {
        Log.d(TAG, "Message Notification Body: ${it.body}")
        sendNotification(it.body as String)
    }
  1. Jika Anda menjalankan aplikasi lagi dan mengirim notifikasi menggunakan Notifications Composer, Anda akan melihat notifikasi seperti yang biasa Anda lihat di bagian pertama codelab, terlepas dari apakah aplikasi berada di latar depan atau latar belakang.

Kode solusi ada di cabang master kode yang Anda download.

Kursus Udacity:

Dokumentasi Firebase:

Untuk link ke codelab lain dalam kursus ini, lihat halaman landing codelab Android Lanjutan di Kotlin.