Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Android SDK
Code

Membuat App Tracker Berat Dengan Firestore Awan

by
Difficulty:IntermediateLength:LongLanguages:

Malay (Melayu) translation by Aisyah Arrafah (you can also view the original English article)

Menyimpan data aplikasi anda di awan sangat penting hari ini kerana pengguna cenderung memiliki beberapa peranti dan mahu aplikasi mereka disegerakkan merentas mereka. Dengan Firestore Awan, pangkalan data NoSQL masa nyata yang tersedia di platform Firebase, berbuat demikian lebih mudah dan lebih selamat daripada sebelumnya.

Dalam tutorial terdahulu, saya memperkenalkan anda kepada semua ciri yang hebat yang ditawarkan oleh Firestore Awan. Hari ini, saya akan menunjukkan kepada anda cara menggunakannya bersama produk Firebase yang lain, seperti FirebaseUI Auth dan Firebase Analytics, untuk membuat aplikasi pengesan berat yang mudah, namun sangat berskala tinggi.

Prasyarat

Untuk mengikuti tutorial langkah demi langkah ini, anda perlu:

1. Persediaan Projek

Untuk dapat menggunakan produk Firebase dalam projek Android Studio anda, anda memerlukan plugin Gradle Perkhidmatan Google, fail konfigurasi Firebase, dan beberapa kebergantungan pelaksanaan. Dengan Pembantu Firebase, anda boleh mendapatkannya dengan mudah.

Buka pembantu dengan pergi ke Tools> Firebase. Seterusnya, pilih opsyen Analitis dan klik pada Log Acara pautan Analytics.

Fierbase Assistant panel

Anda kini boleh menekan butang Sambungkan ke Firebase untuk menyambungkan projek Android Studio anda ke projek Firebase baharu.

Connect to Firebase dialog

Walau bagaimanapun, untuk benar-benar menambah plugin dan kebergantungan pelaksanaan, anda juga perlu menekan Add Analytics pada butang apl anda.

Aplikasi pengesan berat yang kita buat hari ini akan mempunyai hanya dua ciri: menyimpan berat dan memaparkannya sebagai senarai yang disusun dalam susunan kronologi terbalik. Kami akan, tentu saja, menggunakan Firestore untuk menyimpan berat. Untuk memaparkannya sebagai senarai, bagaimanapun, kami akan menggunakan komponen yang berkaitan dengan Firestore yang terdapat di perpustakaan FirebaseUI. Oleh itu, tambah kebergantungan pelaksanaan berikut kepada aplikasi build.gradle modul file:

Pengguna mesti dapat melihat hanya bobot mereka sendiri, bukannya bobot setiap orang yang menggunakan aplikasinya. Oleh itu, aplikasi kami perlu mempunyai keupayaan untuk mengenal pasti penggunanya secara unik. FirebaseUI Auth menawarkan keupayaan ini, jadi tambahkan pergantungan berikut seterusnya:

Kami juga akan memerlukan beberapa Reka Bentuk Reka Bentuk Bahan untuk memberikan aplikasinya menjadi pemandangan yang menyenangkan. Oleh itu, pastikan anda menambah perpustakaan Reka Bentuk Reka Bentuk dan perpustakaan Dialog Bahan sebagai dependensi.

Akhirnya, tekan butang Segerak Sekarang untuk mengemas kini projek.

2. Mengkonfigurasi Pengesahan Firebase

Pengesahan Firebase menyokong pelbagai penyedia identiti. Walau bagaimanapun, kesemua mereka dinyahdayakan secara lalai. Untuk membolehkan satu atau lebih daripada mereka, anda mesti melawat konsol Firebase.

Di konsol, pilih projek Firebase yang anda buat dalam langkah sebelumnya, pergi ke bahagian Pengesahannya, dan tekan butang Kaedah log masuk sediakan.

Firebase Authentication home screen

Untuk membenarkan pengguna melog masuk ke aplikasi kami menggunakan akaun Google, mendayakan Google sebagai pembekal, memberi nama menghadap awam yang bermakna kepada projek, dan tekan butang Simpan.

Google identity provider configuration

Google adalah pembekal identiti yang paling mudah yang boleh anda gunakan. Ia tidak memerlukan konfigurasi, dan projek Android Studio anda tidak memerlukan sebarang ketergantungan tambahan untuknya.

3. Mengkonfigurasi Firestore Awan

Anda mesti mendayakan Firestore di konsol Firebase sebelum anda mula menggunakannya. Untuk melakukannya, pergi ke bahagian Pangkalan Data dan tekan butang Bermula yang terdapat dalam kad Beta Cloud Firestore.

Cloud Firestore card

Anda kini akan diminta untuk memilih mod keselamatan untuk pangkalan data. Pastikan anda memilih pilihan Mula dalam mod terkunci dan tekan butang Dayakan.

Security mode selection screen

Dalam mod terkunci, secara lalai, tiada siapa yang akan dapat mengakses atau mengubah suai kandungan pangkalan data. Oleh itu, anda kini mesti membuat peraturan keselamatan yang membolehkan pengguna membaca dan menulis hanya dokumen yang dimiliki oleh mereka. Mula dengan membuka tab Peraturan.

Sebelum kami membuat peraturan keselamatan untuk pangkalan data kami, kami mesti memuktamadkan bagaimana kami akan menyimpan data di dalamnya. Oleh itu, katakan kami akan mempunyai koleksi peringkat tertinggi bernama pengguna yang mengandungi dokumen yang mewakili pengguna kami. Dokumen tersebut boleh mempunyai ID unik yang sama dengan ID yang memberi perkhidmatan Pengesahan Firebase kepada pengguna.

Kerana pengguna akan menambah beberapa entri berat ke dokumen mereka, menggunakan sub-koleksi untuk menyimpan entri tersebut adalah ideal. Mari kita memanggil berat sub-koleksi.

Firestore database structure

Berdasarkan skema di atas, kami kini boleh membuat peraturan bagi pengguna jalan / {user_id} / berat / {berat}. Peraturan ini adalah bahawa pengguna dibenarkan membaca dan menulis ke jalan hanya jika pembolehubah {user_id} sama dengan ID Pengesahan Firebase pengguna.

Oleh itu, kemas kini kandungan editor peraturan.

Akhirnya, tekan butang Terbitkan untuk mengaktifkan peraturan.

4. Mengesahkan Pengguna

Aplikasi kami mesti digunakan hanya jika pengguna log masuk menggunakan akaun Google. Oleh itu, sebaik sahaja ia dibuka, ia mesti memeriksa jika pengguna mempunyai ID Pengesahan Firebase yang sah. Jika pengguna mempunyai ID, ia harus meneruskan dan menjadikan antara muka pengguna. Jika tidak, ia mesti memaparkan skrin log masuk.

Untuk memeriksa sama ada pengguna mempunyai ID, kami hanya dapat memeriksa bahawa harta semasaUser daripada kelas FirebaseAuth tidak bersalah. Jika ia adalah batal, kami boleh membuat niat log masuk dengan memanggil kaedah createSignInIntentBuilder () dari kelas AuthUI.

Kod berikut menunjukkan cara untuk melakukannya untuk Google sebagai penyedia identiti:

Perhatikan bahawa kami memanggil kaedah bernama showUI () jika ID sah sudah ada. Kaedah ini belum lagi wujud, jadi buat dan biarkan badannya kosong sekarang.

Untuk menangkap hasil niat log masuk, kita mesti mengatasi kaedah aktifActivityResult() pada aktiviti. Di dalam kaedah, jika nilai hujah resultCode adalah RESULT_OK dan harta semasaUser tidak lagi batal, ini bermakna pengguna berjaya berjaya masuk. Dalam kes ini, kita mesti memanggil kaedah showUI() untuk memberikan antara muka pengguna.

Jika pengguna gagal log masuk, kami boleh memaparkan roti bakar dan menutup aplikasi dengan memanggil kaedah penamat().

Oleh itu, tambah kod berikut untuk aktiviti:

Pada ketika ini, jika anda menjalankan aplikasi buat kali pertama, anda sepatutnya dapat melihat skrin log masuk yang kelihatan seperti ini:

Account selection dialog

Pada langkah seterusnya—terima kasih kepada Google Smart Lock, yang diaktifkan secara lalai—anda akan dilog masuk secara automatik.

5. Menentukan Layouts

Aplikasi kami memerlukan dua susun atur: satu untuk aktiviti utama dan satu untuk entri berat yang akan ditunjukkan sebagai item senarai terbalik secara kronologi.

Susun teratur aktiviti utama mesti mempunyai widget RecyclerView, yang akan bertindak sebagai senarai, dan widget FloatingActionButton, yang pengguna dapat menekan untuk membuat entri berat baru. Setelah meletakkan kedua-duanya di dalam widget RelativeLayout, susun atur aktiviti XML file anda akan kelihatan seperti ini:

Kami telah mengaitkan pengendali acara klik pada nama addWeight() dengan widget FloatingActionButton. Pengendali masih belum wujud, jadi buat stub untuknya di dalam aktiviti tersebut.

Untuk mengekalkan tata letak entri berat mudah, kami akan mempunyai dua widget TextView di dalamnya: satu untuk memaparkan berat dan yang lain untuk memaparkan masa di mana entri itu dibuat. Menggunakan widget LinearLayout sebagai bekas bagi mereka akan cukup.

Oleh itu, buat fail XML susun atur baru bernama weight_entry.xml dan tambahkan kod berikut kepadanya:

6. Mewujudkan Model

Dalam langkah sebelumnya, anda melihat bahawa setiap entri berat mempunyai berat dan masa yang berkaitan dengannya. Untuk membiarkan Firestore mengetahui tentang ini, kita mesti membuat model untuk memasukan berat badan.

Model firestore biasanya kelas data mudah dengan pembolehubah anggota yang diperlukan.

Kini juga masa yang baik untuk membuat pemegang pandangan untuk setiap kemasukan berat badan. Pemegang pandangan, seperti yang anda mungkin dapat meneka, akan digunakan oleh widget RecyclerView untuk menjadikan item senarai. Jadi buat kelas baru bernama WeightEntryVH, yang memanjangkan kelas RecyclerView.ViewHolder, dan buat pembolehubah ahli untuk kedua-dua widget TextView. Jangan lupa untuk memulakannya menggunakan kaedah findViewById(). Kod berikut menunjukkan kepada anda bagaimana untuk melakukan secara ringkas:

7. Mewujudkan Dokumen Pengguna yang Unik

Apabila pengguna cuba membuat entri berat buat kali pertama, aplikasi kami mesti membuat dokumen berasingan untuk pengguna di dalam koleksi pengguna di Firestore. Seperti yang kami memutuskan sebelum ini, ID dokumen itu akan menjadi ID Kebenaran Firebase pengguna, yang boleh diperolehi menggunakan harta uid objek semasaUser.

Untuk mendapatkan rujukan kepada koleksi pengguna, kami mesti menggunakan kaedah pengumpulan() kelas FirebaseFirestore. Kita kemudian boleh menghubungi dokumennya() dan lulus uid sebagai hujah untuk membuat dokumen pengguna.

Kita perlu mengakses dokumen khusus pengguna semasa membaca dan membuat entri berat. Untuk mengelakkan pengekodan logik di atas dua kali, saya cadangkan anda membuat kaedah yang berasingan untuknya.

Ambil perhatian bahawa dokumen itu akan dibuat hanya sekali bagi setiap pengguna. Dalam erti kata lain, pelbagai panggilan ke kaedah di atas akan sentiasa mengembalikan dokumen yang sama, selagi pengguna menggunakan akaun Google yang sama.

8. Menambah Entri Berat

Apabila pengguna menekan butang tindakan terapung aplikasi kami, mereka mesti dapat membuat entri berat baru. Untuk membenarkan mereka menaipkan berat mereka, marilah kita buat dialog yang mengandungi widget EditText. Dengan perpustakaan Dialog Bahan, berbuat demikian sangat intuitif.

Di dalam kaedah addWeight(), yang berfungsi sebagai pengendali acara pada butang, membuat contoh MaterialDialog.Builder dan memanggil kaedah tajuk() dan kandungannya() untuk memberikan dialog anda tajuk dan mesej yang bermakna. Begitu juga, hubungi kaedah inputType() dan lulus TYPE_CLASS_NUMBER sebagai hujah kepadanya untuk memastikan bahawa pengguna hanya boleh menaip nombor dalam dialog.

Seterusnya, panggil kaedah input() untuk menentukan petunjuk dan sertakan pengendali acara dengan dialog. Pengendali akan menerima berat yang pengguna ditaip sebagai hujah.

Akhirnya, pastikan anda memanggil kaedah pameran() untuk memaparkan dialog.

Di dalam pengendali acara, kita kini mesti menambah kod untuk benar-benar membuat dan mengisi dokumen masuk berat baru. Oleh kerana dokumen itu mestilah kepunyaan koleksi dokumen pengguna yang unik, untuk mengakses koleksi, anda mesti memanggil kaedah pengumpulan() dokumen yang dikembalikan oleh kaedah getUserDocument().

Sebaik sahaja anda mempunyai koleksi, anda boleh memanggil kaedah add() dan lulus contoh baru kelas WeightEntry kepadanya untuk menyimpan entri.

Dalam kod di atas, anda dapat melihat bahawa kami menggunakan harta masa kelas Tarikh untuk mengaitkan masa cap dengan kemasukan.

Jika anda menjalankan aplikasi sekarang, anda harus dapat menambah entri berat baru kepada Firestore. Anda tidak akan melihatnya dalam aplikasi lagi, tetapi ia akan kelihatan di konsol Firebase.

Add weight dialog

9. Memaparkan Penyertaan Berat

Ia kini masa untuk mengisi widget RecyclerView susun atur kami. Oleh itu, mulakan dengan membuat rujukan untuk menggunakan kaedah findViewById() dan memberikan contoh baharu bagi kelas LinearLayoutManager kepadanya. Ini mesti dilakukan di dalam kaedah showUI() yang kami buat sebelum ini.

Widget RecyclerView mesti memaparkan semua dokumen yang terdapat dalam koleksi berat dokumen pengguna. Tambahan pula, dokumen-dokumen terkini hendaklah muncul terlebih dahulu. Untuk memenuhi keperluan ini, sekarang kita mesti membuat pertanyaan dengan memanggil kaedah koleksi() dan orderBy().

Demi kecekapan, anda boleh mengehadkan bilangan nilai yang dikembalikan oleh pertanyaan dengan memanggil had () kaedah.

Kod berikut mencipta pertanyaan yang mengembalikan entri berat 90 terakhir yang dibuat oleh pengguna:

Menggunakan pertanyaan, kita kini mesti membuat objek FirestoreRecyclerOptions, yang akan kita gunakan kemudian untuk mengkonfigurasi penyesuai widget RecyclerView kami. Apabila anda lulus contoh pertanyaan kepada kaedah setQuery() pembinanya, pastikan anda menentukan bahawa keputusan yang dikembalikan adalah dalam bentuk objek WeightEntry. Kod berikut menunjukkan cara untuk melakukannya:

Anda mungkin menyedari bahawa kami membuat aktiviti semasa kami pemunya kitaran objek FirestoreRecyclerOptions. Melakukan perkara ini adalah penting kerana kami mahukan penyesuai kami bertindak balas dengan sewajarnya kepada peristiwa kitaran hayat biasa, seperti pengguna membuka atau menutup aplikasi.

Pada ketika ini kita boleh membuat objek FirestoreRecyclerAdapter, yang menggunakan objek FirestoreRecyclerOptions untuk mengkonfigurasi dirinya sendiri. Kerana kelas FirestoreRecyclerAdapter adalah abstrak, Android Studio secara automatik akan mengatasi kaedahnya untuk menghasilkan kod yang kelihatan seperti ini:

Seperti yang anda lihat, kelas FirestoreRecyclerAdapter sangat serupa dengan kelas RecyclerView.Adapter. Malah, ia berasal dari itu. Ini bermakna anda boleh menggunakannya dengan cara yang sama anda akan menggunakan kelas RecyclerView.Adapter.

Di dalam kaedah onCreateViewHolder(), semua yang perlu anda lakukan ialah mengembung fail susun atur weight_entry.xml dan mengembalikan objek pemegang pandangan WeightEntryVH berdasarkannya.

Dan di dalam kaedah onBindViewHolder(), anda mesti menggunakan hujah model untuk mengemas kini kandungan widget TextView yang ada di dalam pemegang paparan.

Semasa mengemas kini widget weightView adalah mudah, mengemaskini widget timeView sedikit rumit kerana kami tidak mahu menunjukkan cap waktu, yang berada dalam milisaat, kepada pengguna secara langsung.

Cara paling mudah untuk menukar cap waktu menjadi tarikh dan masa yang boleh dibaca ialah menggunakan formatDateTime() kaedah kelas DateUtils. Selain cap waktu, kaedah ini boleh menerima beberapa bendera yang berbeza, yang akan digunakan untuk memformat tarikh dan masa. Anda bebas menggunakan bendera yang sepadan dengan pilihan anda.

Akhirnya, jangan lupa untuk menunjukkan widget RecyclerView kepada penyesuai yang baru kami buat.

Aplikasi sudah siap. Anda kini harus dapat menambah entri baru dan melihatnya muncul dalam senarai dengan serta-merta. Jika anda menjalankan aplikasi pada peranti lain yang mempunyai akaun Google yang sama, anda akan melihat entri berat badan yang sama muncul di dalamnya juga.

Weight entries shown as a list

Kesimpulan

Dalam tutorial ini, anda melihat berapa pantas dan mudah untuk mencipta aplikasi pengesan berat badan yang berfungsi sepenuhnya untuk Android menggunakan Cloud Firestore sebagai pangkalan data. Jangan ragu untuk menambahkan lagi fungsinya! Saya juga mencadangkan anda mencuba menerbitkannya di Google Play. Dengan pelan Firebase Spark, yang kini menawarkan storan data 1 GB secara percuma, anda tidak akan mempunyai masalah untuk melayani sekurang-kurangnya beberapa ribu pengguna.

Dan semasa anda di sini, lihat beberapa jawatan kami yang lain mengenai perkembangan aplikasi Android!

Advertisement
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.