Android Lanjutan di Kotlin 01.2: Android Firebase Cloud Messaging

Codelab ini adalah bagian dari kursus Android Lanjutan di Kotlin. Anda akan mendapatkan manfaat maksimal dari kursus ini jika menyelesaikan codelab secara berurutan, tetapi ini tidak bersifat 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 mengirim notifikasi push dari jarak jauh yang dapat diterima meskipun aplikasi Anda tidak berjalan.

Apa itu notifikasi push?

Notifikasi push adalah notifikasi yang "di-push" server ke perangkat seluler. Pesan dapat dikirim ke perangkat terlepas dari apakah aplikasi Anda sedang berjalan atau tidak.

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

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

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 yang dimaksud dengan Firebase Cloud Messaging?

Firebase Cloud Messaging adalah bagian dari platform Firebase untuk pengembangan seluler. Biasanya, Anda harus 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 terinstal, atau sebagian pengguna, tanpa menyiapkan server. Misalnya, Anda dapat mengirim pengingat kepada pengguna atau memberi mereka promosi khusus, seperti hadiah gratis.Anda dapat mengirim notifikasi dari jarak jauh ke satu perangkat atau beberapa perangkat.

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 untuk aplikasi Android Anda, 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, bekerja dengan Android SDK.
  • Cara mendesain aplikasi Anda 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 mengirim pesan push kepada pengguna melalui Firebase Cloud Messaging.
  • Cara mengirim data dari backend ke aplikasi Anda menggunakan pesan data, yang merupakan bagian dari Firebase Cloud Messaging.

Yang akan Anda lakukan

  • Tambahkan notifikasi push ke aplikasi starter.
  • Menangani Firebase Cloud Messaging saat aplikasi Anda berjalan.
  • Transfer data dengan Firebase Cloud Messaging.

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

Untuk mendapatkan aplikasi contoh, Anda dapat:

Clone repositori dari GitHub dan alihkan 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 terhubung 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 Lanjutkan.
  4. Anda dapat melewati penyiapan Google Analytics dengan menonaktifkan tombol Enable Google Analytics for this project .
  5. Klik Create Project untuk menyelesaikan penyiapan project Firebase.

Langkah 2: Daftarkan aplikasi Anda 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 Android package name, masukkan com.example.android.eggtimernotifications.
  2. Klik Daftarkan aplikasi.

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

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 ditambahkan dengan karakter tambahan dan diberi nama google-services.json persis.
  2. Pindahkan file konfigurasi ke direktori modul (level aplikasi) aplikasi Anda.

Langkah 4: Konfigurasi project Android Anda untuk mengaktifkan produk Firebase

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

  1. Di file Gradle level root (level project) (build.gradle), periksa apakah 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 paling 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 dalam codelab ini diberikan di MyFirebaseMessagingService.kt. Pada langkah-langkah berikut, Anda akan menambahkan kode ke aplikasi Android Anda.

Anda akan menggunakan Notifications composer untuk menguji penerapan Anda. Notifications composer adalah alat yang membantu Anda menyusun dan mengirim pesan dari situs Firebase console.

  1. Buka MyFirebaseMessagingService.kt
  2. Periksa file dan khususnya fungsi berikut:
  • onNewToken()—Dipanggil secara otomatis jika layanan Anda terdaftar dalam manifes Android. Fungsi ini dipanggil saat Anda pertama kali menjalankan aplikasi dan setiap kali Firebase mengeluarkan token baru untuk aplikasi Anda. Token adalah kunci akses ke project backend Firebase Anda. Token ini dibuat untuk perangkat klien tertentu Anda. Dengan token ini, Firebase mengetahui klien mana yang harus dikirimi pesan oleh backend. Firebase juga mengetahui apakah klien ini valid dan memiliki akses ke project Firebase ini.
  • onMessageReceived— Dipanggil saat aplikasi Anda berjalan dan Firebase mengirim pesan ke aplikasi Anda. Fungsi ini menerima objek RemoteMessage yang dapat membawa payload pesan notifikasi atau data. Anda akan mempelajari lebih lanjut perbedaan antara payload notifikasi dan pesan data nanti dalam 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 membuat token baru atau memperbarui token, fungsi onNewToken() akan dipanggil, dengan token baru yang diteruskan sebagai argumen. Jika ingin menargetkan satu perangkat atau membuat grup perangkat yang ingin Anda kirimi pesan siaran, Anda harus mengakses token ini dengan menyediakan FirebaseMessagingService dan mengganti onNewToken().

  1. Buka AndroidManifest.xml dan hapus komentar pada kode berikut untuk mengaktifkan MyFirebaseMessagingService untuk aplikasi pengatur waktu telur. Metadata layanan dalam 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 pada 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 notifikasi push FCM atau timer telur secara terpisah.

  1. Buka ui/EggTimerFragment.kt . Di onCreateView(), tambahkan kode pembuatan channel 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 komentar 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 menampilkan token Anda yang mirip dengan yang di bawah. 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 di pesan logcat, aplikasi Anda mungkin sudah menerima token sebelumnya. Dalam hal ini, meng-uninstal aplikasi akan membantu Anda menerima token baru.

Sekarang Anda dapat melakukan pengujian dengan mengirim notifikasi. Untuk mengirim notifikasi, Anda akan menggunakan Notifications composer.

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

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

  1. Salin token aplikasi Anda dari logcat.

  1. Tempelkan token ini ke kolom Add an FCM registration token di jendela pop-up, lalu klik tombol Add di samping token.
  2. Dalam daftar kotak centang yang muncul, pilih token. Tombol Uji akan diaktifkan.

  1. Di perangkat Anda, letakkan aplikasi Timer Telur di latar belakang.
  2. Di jendela pop-up, klik Uji.
  1. Setelah Anda mengklik Uji, perangkat klien yang ditargetkan yang menjalankan aplikasi Anda di latar belakang akan menerima notifikasi di area notifikasi sistem. (Anda akan melihat lebih banyak cara menangani pesan FCM saat aplikasi Anda berada di latar depan nanti.)

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 sebuah aplikasi memeriksa pesan baru setiap 10 detik. Hal ini tidak hanya akan menguras baterai ponsel Anda, tetapi juga akan menggunakan resource jaringan yang tidak perlu, dan akan menimbulkan beban yang tidak perlu pada server aplikasi Anda. Sebagai gantinya, perangkat klien dapat berlangganan dan menerima notifikasi saat ada pesan baru yang dikirimkan melalui aplikasi Anda.

Topik memungkinkan Anda mengirim pesan ke beberapa perangkat yang telah memilih untuk ikut serta dalam topik tertentu. Untuk klien, topik adalah sumber data spesifik yang diminati klien. Untuk server, topik adalah grup perangkat yang telah memilih untuk menerima update pada 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 agar makan telur saat sarapan.

Untuk berlangganan 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 yang dilanggan. Jika klien gagal berlangganan, callback akan menerima pesan error.

Di aplikasi, Anda akan otomatis mengikutsertakan pengguna ke topik sarapan. Namun, di sebagian besar aplikasi produksi, sebaiknya berikan kontrol kepada pengguna atas topik yang akan diikuti.

  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 ke 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 aplikasi lagi. Anda akan melihat pesan toast yang bertuliskan "Subscribed to topic".

Sekarang Anda dapat menguji pengiriman pesan ke topik:

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

  1. Pilih Sekarang untuk Penjadwalan.

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

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

Saat 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, gunakan pesan data, bukan pesan notifikasi.

Untuk menangani pesan data, Anda perlu menangani payload data dalam fungsi onMessageReceived() dari MyFirebaseMessagingService. Payload disimpan dalam 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 Notification composer, buat pesan baru, lalu tetapkan Target ke topik "sarapan".
  2. Kali ini, saat Anda mencapai Langkah 4, Opsi tambahan, tetapkan properti kunci dan nilai 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

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

  • Jika aplikasi berjalan di latar belakang, dan jika pesan memiliki payload notifikasi, notifikasi akan otomatis ditampilkan di baki notifikasi. Jika pesan juga memiliki payload data, payload data akan ditangani oleh aplikasi saat pengguna mengetuk notifikasi.
  • Jika aplikasi berjalan di latar depan, dan jika notifikasi pesan memiliki payload notifikasi, notifikasi tidak akan muncul secara otomatis. Aplikasi perlu 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 telur. Anda tidak berencana mengirim 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 yang menginstal aplikasi timer telur, 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 akan memutuskan apa yang harus dilakukan dengan pesan tersebut. Jika aplikasi berada di latar depan saat menerima pesan FCM, fungsi onMessageReceived() akan dipicu secara otomatis dengan pesan FCM. Di sinilah aplikasi Anda dapat menangani payload data dan notifikasi secara diam-diam 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 kembali fungsi onMessageReceived() di MyFirebaseMessagingService.
  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 komposer Notifikasi, 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 utama kode yang Anda download.

Kursus Udacity:

Dokumentasi Firebase:

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