Flutter FCM: OnBackgroundMessage MissingPluginException

Solusi dari error MissingPluginException di FCM OnBackgroundMessage

Yudi Setiawan
Nusanet Developers
6 min readAug 27, 2020

--

Pengenalan

Ditulisan ini saya akan mencoba membahas lebih dalam mengenai FCM di Flutter. Salah satu hal yang ingin saya bahas ialah dibagian OnBackgroundMessage. Seperti yang kita ketahui bahwa OnBackgroundMessage adalah fungsi yang dijalankan pertama kali ketika FCM masuk dengan kondisi app dalam keadaan mati total atau terminated. Didalam OnBackgroundMessage terkadang kita bukan cuma hanya ingin menampilkan notifikasi saja melainkan kita juga ada menambahkan beberapa proses business logic didalamnya seperti kita mau menampilkan notifikasi jika si pengguna dalam keadaan sudah login atau mungkin kita mau menjalankan service tertentu. Dari 2 contoh tersebut sebenarnya bisa kita implementasikan namun, pada kenyatannya kita akan mengalami kendala dan salah satu kendala yang akan kita alami ialah kita akan mendapatkan pesan error “MissingPluginException …”. Penasaran mengapa kita bisa mendapatkan pesan error tersebut dan bagaimana solusinya mari kita bahas secara mendalam pada tulisan ini.

Persiapan

Ditulisan ini saya sudah menganggap bahwa kita semua sudah selesai melakukan setup FCM-nya di Flutter dan ready to use. Bagi kamu yang belum tahu cara setup dan menggunakannya di Flutter silakan baca tulisan saya berikut ini ya.

Contoh Projek

Pada tulisan ini saya akan memberikan contoh sederhana untuk menampilkan lokal notifikasi jika si pengguna dalam keadaan sudah login. Secara logika menurut saya hal ini sangatlah mudah. Berikut adalah gambaran umum proses logikanya.

  • Pengguna melakukan login
  • Simpan status login si pengguna didalam SharedPreferences atau sejenisnya.
  • FCM dikirim dari Backend dan diterima oleh app
  • App melakukan pengecekan apakah si pengguna sudah login
  • Jika iya, maka tampilkan notifikasi
  • Jika tidak, jangan tampilkan notifikasi

Sangat sederhana bukan? Untuk pengaturan pubspec.yaml-nya saya anggap kamu semua sudah hafal ya cara-caranya. Cukup tambahkan saja plugin shared_preferences dan flutter_local_notifications ke pubspec.yaml. Untuk penggunaan plugin flutter_local_notifications saya tidak akan bahas secara detail tentang penggunaannya disini tapi, ini akan saya bahas lebih detail ditulisan yang akan datang.

Buat Fitur Login

Langkah pertama, mari kita buat fitur login-nya. Untuk fitur login-nya saya tidak akan menggunakan API cukup pakai pengkondisian secara hardcode saja ya. berikut adalah kode untuk halaman login. Buka file main.dart dan ubah menjadi seperti berikut.

Catatan: jika masih ada error pada kode diatas mohon diabaikan saja dan lanjutkan ke langkah berikutnya.

Buat Halaman Home dan Lokal Notifikasi

Selanjutnya, kita buat halaman home dan lokal notifikasi. Kita buka kembali file main.dart dan tambahkan kodenya menjadi seperti berikut.

Buat Lokal Notifikasi

Sekarang kita akan membuat lokal notifikasinya. Pertama-tama, kita perlu menyalin file ic_launcher.png yang berada didalam direktori mipmap-xxxhdpi kedalam direktori drawable. Hal tersebut bertujuan agar file tersebut menjadi icon pada saat lokal notifikasi tampil. Kemudian, kita buka kembali file main.dart dan tambahkan fungsi berikut.

Testing

Sekarang kita test apakah lokal notifikasinya sudah muncul.

Testing

Bisa kamu lihat pada video diatas bahwa ketika app-nya terminated kemudian, kita kirim FCM-nya maka lokal notifikasinya tidak tampil dan muncul pesan error kurang lebih seperti berikut.

Analisa Masalah dan Solusi

Untuk penyebabnya saya belum tahu pasti tapi, menurut saya hal ini bisa terjadi dikarenakan plugin-plugin yang kita pakai didalam fungsi OnBackgroundMessage belum ter-register. Mengapa belum ter-register? Karena, OnBackgroundMessage berjalan secara background mode dan fungsi ini dijalankan pertama kali (ketika kondisi app-nya terminated). Dan proses register plugin-plugin tersebut melalui file main.dart atau fungsi void main() . Jadi, solusinya gimana? Solusinya ialah kita perlu mendaftarkan plugin yang kita pakai didalam OnBackgroundMessage kedalam file Application.kt (Application level). Ingat, yang kita daftarkan disini ialah plugin yang benar-benar kita pakai didalam OnBackgroundMessage. Yang tidak terpakai nggak perlu didaftarkan. Sekarang buka file Application.kt ubah menjadi seperti berikut.

Untuk mengetahui dari mana nilai io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin kita bisa melihatnya dari struktur projeknya. Berhubung pada contoh diatas kita hanya menggunakan plugin shared_preferences dan flutter_local_notifications didalam OnBackgroundMessage maka, hanya plugin tersebut yang kita daftarkan. Saran saya untuk melakukan pengeditan tersebut dilakukan di Android Studio ya biar lebih gampang.

Cara mengetahui package plugin yang ingin didaftarkan

Sekarang mari kita test lagi. Seharusnya sudah bisa ya.

Lokal notifikasi sudah muncul untuk terminated mode

Kesimpulan

Jadi, kesimpulannya ialah kita telah berhasil melakukan custom notifikasi agar hanya muncul jika si pengguna dalam keadaan sudah login. Untuk source code lengkap dari contoh projek ditulisan ini bisa kamu lihat di Github ya.

--

--