Grunnleggende om Cloud Firestore
Les og skriv data i sanntid.
Grunnleggende om Cloud Firestore er en gratis leksjon i Android Academy på CoddyKit. Dette er leksjon 3 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Android Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Android Academy inneholder totalt 4 leksjoner.
Hva er Cloud Firestore?
Cloud Firestore er Firebase sin fleksible og skalerbare NoSQL-database. Den lagrer data som dokumenter gruppert i samlinger.
- Et dokument er et sett med nøkkel/verdi-felter (som et JSON-objekt).
- En samling er en beholder for dokumenter.
- Dokumenter kan inneholde undersamlinger og danne et tre.
Firestore tilbyr også sanntidsoppdateringer og fungerer frakoblet uten ekstra oppsett.
Hent Firestore-instansen
Få tilgang til databasen via Firebase.firestore. Derfra kan De hente en samling med collection("name") og et bestemt dokument med document("id").
Referanser er billige å opprette — de beskriver en plassering, ikke selve dataene.
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")Modellere data
Firestore kan enkelt mappes til Kotlin-data class-er. Hver egenskap blir et felt i dokumentet.
Gi klassen en konstruktør uten argumenter (standardverdier håndterer dette), slik at Firestore kan deserialisere dokumenter tilbake til objekter.
data class Note(
val title: String = "",
val body: String = "",
val done: Boolean = false,
val createdAt: Long = 0L
)Skrive et dokument
Bruk set til å opprette eller overskrive et dokument. La Firestore generere en ID med add, eller velg Deres egen ID med document(id).set(...).
Disse kallene returnerer Tasks. Med coroutines kan De bruke await() på dem.
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
}Lese et dokument
get() henter et dokument én gang. Konverter det til dataklassen Deres med toObject(Note::class.java).
Kontroller alltid exists() — en referanse til et manglende dokument returnerer et snapshot som ganske enkelt ikke eksisterer.
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
}Oppdatere og slette
update endrer bestemte felt uten å påvirke resten av dokumentet. delete fjerner hele dokumentet.
Bruk set(..., SetOptions.merge()) hvis De ønsker en delvis skriving som også oppretter dokumentet dersom det mangler.
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()
}Spørre i en samling
Bygg spørringer ved å lenke sammen filtre: whereEqualTo, whereGreaterThan, orderBy, limit og flere.
En spørring returnerer et QuerySnapshot. Gå gjennom dokumentene for å mappe hvert av dem til modellen Deres.
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) }
}Sanntidslyttere
Firestores store styrke er sanntid. addSnapshotListener leverer de gjeldende dataene umiddelbart og sender deretter automatisk alle endringer.
Metoden returnerer en ListenerRegistration — kall remove() når De er ferdig, for å stoppe oppdateringene.
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()Sanntidsdata som en Flow
I Compose er det idiomatisk å eksponere Firestore som en Kotlin-Flow. callbackFlow kobler lytterens callback til en flow, mens awaitClose fjerner lytteren når innsamlingen stopper.
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() }
}Vise data i Compose
Samle inn flow-en med collectAsStateWithLifecycle(), og vis den i en LazyColumn. Listen oppdateres automatisk når Firestore endres — ingen manuell oppdatering er nødvendig.
@Composable
fun NotesScreen(viewModel: NotesViewModel) {
val notes by viewModel.notes.collectAsStateWithLifecycle()
LazyColumn {
items(notes) { note ->
ListItem(
headlineContent = { Text(note.title) },
supportingContent = { Text(note.body) }
)
}
}
}Sikkerhetsregler er viktige
Firestore er låst som standard. Sikkerhetsregler avgjør hvem som kan lese eller skrive til hver sti — de kjøres på serveren og kan ikke omgås av klienten.
En vanlig regel er at en bruker bare får tilgang til egne data, identifisert med brukerens uid for autentisering.
// 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;
}
}
}Hurtigsjekk
De vil ha en Compose-liste som oppdateres umiddelbart hver gang de underliggende Firestore-dataene endres, uten manuell oppdatering. Hvilket API bruker De?
Oppsummering: Firestore
De kan nå lagre og synkronisere data med Cloud Firestore:
- Data lagres som dokumenter i samlinger og modelleres med Kotlin-data classes.
- Skriv med
add/set, les medget, og endre medupdate/delete. - Spør med
whereEqualTo,orderByoglimit. - Bruk
addSnapshotListener(eller encallbackFlow) for et sanntidsgrensesnitt. - Beskytt data med sikkerhetsregler basert på
request.auth.uid.
Neste del: nå brukere når appen er lukket med Cloud Messaging.
Lær deg Kotlin med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 36
- Leksjoner
- 152
Ofte stilte spørsmål
Er leksjonen «Grunnleggende om Cloud Firestore» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Android Academy, inkludert «Grunnleggende om Cloud Firestore», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Android Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Grunnleggende om Cloud Firestore»?
Les og skriv data i sanntid. Du øver på Android Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Android Academy?
Ingen tidligere erfaring er nødvendig. Android Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.
Hvor lang tid tar leksjonen «Grunnleggende om Cloud Firestore»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Android Academy-leksjonen?
Ja. Alle Android Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Konfigurere Firebase
- Firebase Authentication
- Grunnleggende om Cloud Firestore
- Push med Cloud Messaging