Berbagi Pengalaman Menggunakan Firebase dalam membantu pengembangan Android Apps
Apakah benar Firebase terbukti bisa membantu?
Firebase sebagai salah satu MBaaS (Mobile Backend as a Service) mengalami perubahan besar-besaran pada May 2016, dengan versi terakhirnya dinamakan Firebase 3.0. Dibandingkan sebelumnya yang mana fungsi Firebase terbatas pada authentication service dan real-time database saja, kali ini Firebase memiliki hampir seluruh fungsi yang dibutuhkan sebagai backend service dari Mobile Application.
Diwaktu yang sama dengan peluncuran Firebase 3.0 ini, saya dan istri sedang mengembangkan aplikasi Tap Invoice. Kami pada saat itu sedang mencari mobile backend service untuk memudahkan pengembangan aplikasi. Sehingga kami tidak perlu membuat semuanya dari nol.
Aplikasi Tap Invoice pada tahap awal ini hanya di develop di atas platform Android. Sharing kali ini bercerita bagaimana Firebase digunakan di atas platform Android. Dari apa yang pelajari di awal ketika mengetahui fitur-fitur baru di Firebase, dengan menggunakan Firebase seharusnya saya tidak lagi membutuhkan server lagi untuk menangani hal-hal seperti penyimpanan data, authentication, penyimpanan file, maupun penerapan mobile analytics. Otomatis, saya jadi tidak perlu dipusingkan lagi dengan masalah scalability, reliability dan security dari server, apalagi yang Internet-facing. Berhasilkah saya?
Ide awal dari Aplikasi Tap Invoice lahir dari istri saya, setelah dia sempat menjalani peran sebagai Ibu Rempong Dua Anak + Pebisnis online. Dia membutuhkan Mobile Apps yang bisa mencatat order, membuat & membagikan invoice, serta fitur pelaporan yang cukup lengkap. Aplikasi yang sudah tersedia di market belum ada yang sesuai ekspektasi, sehingga kami putuskan untuk coba membuat sekaligus belajar siklus pembuatan produk mobile apps. Saya akan coba berbagi pengalaman kami menggunakan Firebase dalam membantu pengembangan aplikasi Tap Invoice, dari nol sampai sudah rilis di Playstore.
Authentication
Fitur dasar pertama yang kami butuhkan adalah authentication, yang dilengkapi dengan integrasi social login (Facebook, Google) maupun mekanisme username dan password biasa. Fitur ini sudah didukung oleh Firebase, dan dengan beberapa langkah konfigurasi sederhana, dan coding sesuai tutorial yang sudah disediakan, fitur authentication di Tap Invoice sudah bisa dipakai.
Untuk Facebook dan Google Social Login, bahkan sudah dilengkapi dengan native login, jadi aplikasi kita tidak perlu membuka browser lagi.
Data-data user aplikasi kita juga akan aman tersimpan di cloud Firebase. Kita tidak perlu menyediaan database server terpisah untuk penyimpanan user berikut data-nya
(Real-time) Database
Firebase pada awalnya (sebelum versi 3.0) dikenal dengan kemampuan Database yang real-time. Firebase Database sudah dilengkapi dengan kemampuan event handler, yang mana setiap perubahan yang terjadi di database bisa dengan segera dideteksi dan ditangani, sehingga sangat cocok untuk penyimpanan data yang kolaboratif.
Firebase Database juga dilengkapi dengan fitur offline dan online support. Misalnya, kita melakukan perubahan data dan di saat yang sama koneksi ke cloud Firebase tidak tersedia. Maka secara pintar, perubahan tersebut akan disimpan di lokal dulu, sampai dengan koneksi tersedia baru akan dilakukan perubahan di server. Semuanya dilakukan secara otomatis, sinkronisasi dilakukan oleh library Firebase.
Roadmap awal dari Tap Invoice lebih fokus fungsi offline terlebih dahulu, sehingga data akan disimpan locally di device (walaupun kita juga sudah menyediakan fitur online backup). Firebase Database ini hanya dimanfaatkan untuk menyimpan attribut tambahan dari pengguna/user. Object user dari module Authentication, tidak bisa ditambahkan attribut tambahan sehingga informasinya harus ditulis di Firebase Database. Struktur data di Firebase Database beraliran NoSQL, yaitu berbentuk json-tree.
Di masa mendatang, fitur real-time dari Firebase Database ini akan sangat bermanfaat ketika nantinya Tap Invoice dilengkapi dengan fitur kolaborasi (multiple administrator)
Storage
Salah satu fitur di Tap Invoice yang kami sediakan bagi pengguna adalah data backup. Backup bisa dilakukan baik offline maupun online. Ketika pengguna kehilangan/kerusakan handset mereka, data mereka bisa di restore dari server jika pernah dibackup secara online.
Untuk mengimplementasikan fitur ini, kami menggunakan fitur Firebase Storage. Firebase Storage memungkinkan mobile apps yang kita buat untuk menyimpan maupun unduh file di cloud storage nya Google. SDK yang disediakan bahkan sudah dilengkapi fitur auto-resume download/upload ketika koneksi terputus.
Firebase Storage (dan juga Firebase Database) juga dilengkapi rules engine untuk menentukan hak akses dari file-file yang disimpan di server. Kita bisa modifikasi sesuai dengan kebutuhan aplikasi masing-masing
Analytics
Firebase juga sudah dilengkapi dengan fitur Mobile Analytics, jadi kita tidak perlu memakai modul mobile analytics lainnya yang terpisah untuk menganalisa pola pengguna aplikasi kita.
Mobile Analytics ini sangat sangat penting! Dengan Mobile Analytics, Anda bisa dengan mudah mengetahui berapa jumlah user yang sudah install aplikasi, jumlah active user, berapa kali aplikasi telah dijalanan, dan rata-rata durasi penggunaan aplikasi per sesi.
Lebih jauh, Firebase Analytics by default mencatat dan mengagregasi event-event sebagai berikut:
- Aplikasi di buka pertama kali
- Sesi aplikasi dijalankan
- Aplikasi di-uninstall
- OS di upgrade
- Aplikasi di-upgrade
Kita juga bisa mendefinisikan event sendiri, dan Firebase akan bantu menghitungnya
Masih banyak fitur lain di Firebase Analytics ini, seperti Funnel dan Cohort Analysis. Mungkin nanti saya akan bahas terpisah di tulisan lain.
Test Lab
Sebenarnya saya belum menggunakan fitur Firebase Test Lab ini, karena hanya tersedia mulai di plan Blaze. Tapi saya menggunakan Playstore pre-launch report, yang merupakan fitur preview dari Firebase Test Lab.
Fitur ini sangat membantu pengujian Android app dengan menggunakan variasi device, ukuran layar dan versi OS, baik dalam pengujian kompatibilitas layar maupun dalam pencarian bug. Akan lebih powerful jika script pengujian di custom menggunakan Espresso atau Robotium. Tanpa custom scripting pun, sudah tersedia automatic robot testing, walaupun hasilnya belum maksimal
Fitur Lainnya
Ada beberapa fitur lain yang saat ini belum saya gunakan, antara lain:
- Hosting. Semacam CDN (Content Delivery Network)
- Remote Config. Memungkinkan kita mendefinisikan sebuah config, dan merubah nilai dari config tersebut secara remote tanpa melakukan perubahan di aplikasi
- Crash Reporting. Saat ini, saya masih mengandalkan fitur bawaan dari Playstore dulu.
- Firebase Cloud Messaging (FCM). Mengirimkan/push message ke pengguna aplikasi kita
Dynamic Links. Pengembangan lebih lanjut dari deep-linking. Fitur dynamic links ini mensolusikan issue yang ada di deep-linking: kompatibilitas Android & iOS, serta deep-link yang akses ketika aplikasi belum di-install
Pricing
Skema pricing Firebase pada saat tulisan ini dibuat, terbagi tiga plan: Spark (Free, for starters), Flame (fix $25 / month), dan Blaze (pas as you go). Untuk lebih detailnya bisa dilihat di sini.
Untuk sekarang, kebutuhan Tap Invoice masih bisa dicover oleh plan Spark. Namun dalam waktu dekat jika sudah launching besar-besaran, saya rencananya akan menggunakan plan Flame karena lebih predicatable dan tidak ada excess usage.
Kesimpulan
Yak, jadi kesimpulannya apa? Apakah Firebase memang membantu? Jawabannya, tergantung aplikasi apa yang kita buat. Untuk aplikasi yang kami buat ini, Firebase memang terbukti bisa sangat membantu — sangat. Kami sukses rilis Tap Invoice sesuai target awal, tanpa harus dipusingkan dengan pengadaan dan pengoperasian server, untuk menangani authentication, user management, database, file storage dan analytics.
Saya juga merekomendasikan penggunaan Firebase ini untuk bootstrapping Mobile Apps yang butuh full functionality. Walaupun secara cost kemungkinan Firebase lebih mahal, namun kita tidak perlu dipusingkan oleh hal-hal server-side, termasuk masalah scalability, reliability dan security
Dokumentasi penggunaan Firebase juga lumayan baik, khususnya untuk platform Android (belum sempat coba platform lain juga). Integrasi SDK juga sangat mudah, tinggal menambahkan entry di build.gradle
Memang Firebase masih jauh dari sempurna, kadang masih ada beberapa glitch yang ditemukan, terutama terkait masalah koneksi. Semoga semakin membaik di masa mendatang
Beberapa catatan yang juga perlu saya share:
- Firebase membutuhkan Google Play Services versi > 9.0. Tidak ada jaminan bahwa seluruh user Android menggunakan Play Services versi ini, jadi pastikan Anda melakukan pengecekan untuk menjaga kompatibilitas.
- Firebase Auth memiliki opsi: “One account per email address”. Pada awalnya, saya disable fitur ini. Dan saya mengalami issue, email pengguna dari Facebook Login dan Google+ Login gagal didapatkan. Detail bisa dilihat di link stackoverflow ini