Dasar-Dasar Cloud Firestore
Baca dan tulis data waktu nyata.
Dasar-Dasar Cloud Firestore adalah pelajaran Android Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Android Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Android Academy mencakup 4 pelajaran total.
Apa Itu Cloud Firestore?
Cloud Firestore adalah basis data NoSQL Firebase yang fleksibel dan dapat diskalakan. Data disimpan sebagai dokumen yang dikelompokkan ke dalam koleksi.
- Dokumen adalah sekumpulan kolom kunci/nilai (seperti objek JSON).
- Koleksi adalah wadah dokumen.
- Dokumen dapat berisi subkoleksi sehingga membentuk sebuah pohon.
Firestore juga menyediakan pembaruan waktu nyata dan langsung dapat digunakan secara luring.
Mendapatkan Instans Firestore
Akses basis data melalui Firebase.firestore. Dari sana, Anda dapat mengakses koleksi dengan collection("name") dan dokumen tertentu dengan document("id").
Referensi murah untuk dibuat — referensi hanya menjelaskan lokasi, bukan datanya.
import com.google.firebase.Firebase
import com.google.firebase.firestore.firestore
val db = Firebase.firestore
val usersRef = db.collection("users")
val oneUser = db.collection("users").document("abc123")Memodelkan Data
Firestore dapat dipetakan dengan baik ke kelas data Kotlin. Setiap properti menjadi kolom dalam dokumen.
Sediakan konstruktor tanpa argumen (nilai bawaan dapat menanganinya) agar Firestore dapat melakukan deserialisasi dokumen kembali menjadi objek.
data class Note(
val title: String = "",
val body: String = "",
val done: Boolean = false,
val createdAt: Long = 0L
)Menulis Dokumen
Gunakan set untuk membuat atau menimpa dokumen. Biarkan Firestore membuat ID dengan add, atau pilih ID sendiri dengan document(id).set(...).
Pemanggilan ini mengembalikan Task; dengan coroutine, Anda dapat menggunakan await().
import com.google.firebase.Firebase
import com.google.firebase.firestore.firestore
import kotlinx.coroutines.tasks.await
suspend fun addNote(note: Note): String {
val ref = Firebase.firestore
.collection("notes")
.add(note) // auto-generated ID
.await()
return ref.id
}Membaca Dokumen
get() mengambil dokumen satu kali. Konversikan dokumen tersebut ke kelas data Anda dengan toObject(Note::class.java).
Selalu periksa exists() — referensi ke dokumen yang tidak ada akan mengembalikan snapshot yang sebenarnya tidak ada.
import com.google.firebase.Firebase
import com.google.firebase.firestore.firestore
import kotlinx.coroutines.tasks.await
suspend fun loadNote(id: String): Note? {
val snapshot = Firebase.firestore
.collection("notes")
.document(id)
.get()
.await()
return if (snapshot.exists()) snapshot.toObject(Note::class.java) else null
}Memperbarui dan Menghapus
update mengubah kolom tertentu tanpa menyentuh bagian dokumen lainnya. delete menghapus seluruh dokumen.
Gunakan set(..., SetOptions.merge()) jika Anda ingin melakukan penulisan sebagian yang juga membuat dokumen saat dokumen tersebut belum ada.
import com.google.firebase.Firebase
import com.google.firebase.firestore.firestore
import kotlinx.coroutines.tasks.await
suspend fun markDone(id: String) {
Firebase.firestore.collection("notes").document(id)
.update("done", true)
.await()
}
suspend fun removeNote(id: String) {
Firebase.firestore.collection("notes").document(id)
.delete()
.await()
}Membuat Kueri Koleksi
Buat kueri dengan merangkai penyaring: whereEqualTo, whereGreaterThan, orderBy, limit, dan lainnya.
Kueri mengembalikan QuerySnapshot; lakukan iterasi pada dokumennya untuk memetakan setiap dokumen ke model Anda.
import com.google.firebase.Firebase
import com.google.firebase.firestore.firestore
import kotlinx.coroutines.tasks.await
suspend fun pendingNotes(): List<Note> {
val snap = Firebase.firestore.collection("notes")
.whereEqualTo("done", false)
.orderBy("createdAt")
.limit(20)
.get()
.await()
return snap.documents.mapNotNull { it.toObject(Note::class.java) }
}Listener Waktu Nyata
Kemampuan unggulan Firestore adalah fitur waktu nyata. addSnapshotListener segera mengirimkan data saat ini, lalu otomatis mengirimkan setiap perubahan.
Fungsi ini mengembalikan ListenerRegistration — panggil remove() setelah selesai untuk menghentikan penerimaan pembaruan.
import com.google.firebase.Firebase
import com.google.firebase.firestore.firestore
val registration = Firebase.firestore.collection("notes")
.whereEqualTo("done", false)
.addSnapshotListener { snapshot, error ->
if (error != null || snapshot == null) return@addSnapshotListener
val notes = snapshot.toObjects(Note::class.java)
println("Now have ${notes.size} pending notes")
}
// Later: registration.remove()Data Waktu Nyata sebagai Flow
Dalam Compose, cara yang lazim adalah mengekspos Firestore sebagai Flow Kotlin. callbackFlow menjembatani callback listener ke dalam flow, sedangkan awaitClose menghapus listener saat pengumpulan berhenti.
import com.google.firebase.Firebase
import com.google.firebase.firestore.firestore
import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.callbackFlow
fun notesFlow(): Flow<List<Note>> = callbackFlow {
val reg = Firebase.firestore.collection("notes")
.addSnapshotListener { snap, err ->
if (err == null && snap != null) {
trySend(snap.toObjects(Note::class.java))
}
}
awaitClose { reg.remove() }
}Menampilkan Data di Compose
Kumpulkan flow dengan collectAsStateWithLifecycle() dan tampilkan di dalam LazyColumn. Daftar akan diperbarui sendiri setiap kali Firestore berubah — tanpa penyegaran manual.
@Composable
fun NotesScreen(viewModel: NotesViewModel) {
val notes by viewModel.notes.collectAsStateWithLifecycle()
LazyColumn {
items(notes) { note ->
ListItem(
headlineContent = { Text(note.title) },
supportingContent = { Text(note.body) }
)
}
}
}Aturan Keamanan Itu Penting
Secara bawaan, Firestore terkunci. Aturan keamanan menentukan siapa yang dapat membaca atau menulis setiap jalur — aturan ini berjalan di server dan tidak dapat dilewati oleh klien.
Aturan yang umum: pengguna hanya boleh mengakses datanya sendiri, yang ditentukan berdasarkan uid autentikasinya.
// firestore.rules
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId}/{document=**} {
allow read, write: if request.auth != null
&& request.auth.uid == userId;
}
}
}Pemeriksaan Singkat
Anda ingin daftar Compose yang langsung diperbarui setiap kali data Firestore yang mendasarinya berubah, tanpa penyegaran manual. API mana yang Anda gunakan?
Ringkasan: Firestore
Sekarang Anda dapat menyimpan dan menyinkronkan data dengan Cloud Firestore:
- Data disimpan sebagai dokumen dalam koleksi; modelkan data tersebut dengan kelas data Kotlin.
- Tulis dengan
add/set, baca denganget, lalu ubah denganupdate/delete. - Buat kueri dengan
whereEqualTo,orderBy, danlimit. - Gunakan
addSnapshotListener(ataucallbackFlow) untuk UI waktu nyata. - Lindungi data dengan aturan keamanan yang menggunakan
request.auth.uidsebagai kunci.
Berikutnya: menjangkau pengguna saat aplikasi ditutup dengan Cloud Messaging.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Dasar-Dasar Cloud Firestore” gratis?
Ya — teks lengkap “Dasar-Dasar Cloud Firestore” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Android Academy, upgrade ke CoddyKit PRO. Kursus Android Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Dasar-Dasar Cloud Firestore”?
Baca dan tulis data waktu nyata. Kamu berlatih Android Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Android Academy?
Tidak diperlukan pengalaman sebelumnya. Android Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Dasar-Dasar Cloud Firestore” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Android Academy ini?
Ya. Setiap pelajaran Android Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Menyiapkan Firebase
- Autentikasi Firebase
- Dasar-Dasar Cloud Firestore
- Push dengan Cloud Messaging