Cloud Firestoren perusteet
Lukekaa ja kirjoittakaa reaaliaikaisia tietoja.
Cloud Firestoren perusteet on ilmainen Android Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Android Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Android Academy-kurssilla on yhteensä 4 oppituntia.
Mikä on Cloud Firestore?
Cloud Firestore on Firebasen joustava ja skaalautuva NoSQL-tietokanta. Se tallentaa tiedot dokumentteina, jotka on ryhmitelty kokoelmiksi.
- Dokumentti on joukko avain-arvo-kenttiä (JSON-olion tapaan).
- Kokoelma on dokumenttien säilö.
- Dokumentit voivat sisältää alikokoelmia, jolloin muodostuu puu.
Firestore tarjoaa myös reaaliaikaiset päivitykset ja toimii offline-tilassa ilman lisämäärityksiä.
Firestore-instanssin hakeminen
Käytä tietokantaa Firebase.firestore-olion kautta. Sen jälkeen voit siirtyä kokoelmaan collection("name")-kutsulla ja tiettyyn dokumenttiin document("id")-kutsulla.
Viitteiden luominen on kevyttä — ne kuvaavat sijaintia, eivät itse tietoja.
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")Tietojen mallintaminen
Firestore sopii hyvin yhteen Kotlinin data class -luokkien kanssa. Jokaisesta ominaisuudesta tulee dokumentin kenttä.
Määritä luokalle argumentiton konstruktori (oletusarvot hoitavat tämän), jotta Firestore voi muuntaa dokumentit takaisin olioiksi.
data class Note(
val title: String = "",
val body: String = "",
val done: Boolean = false,
val createdAt: Long = 0L
)Dokumentin kirjoittaminen
Luo dokumentti tai korvaa olemassa oleva dokumentti set-metodilla. Anna Firestoren luoda tunnus add-metodilla tai valitse oma tunnus kutsulla document(id).set(...).
Nämä kutsut palauttavat Task-oliot; korutiineissa voit kutsua niille await()-metodia.
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
}Dokumentin lukeminen
get() hakee dokumentin kerran. Muunna se omaksi tietoluokaksesi kutsulla toObject(Note::class.java).
Tarkista aina exists() — puuttuvaan dokumenttiin viittaava viite palauttaa tilannevedoksen, jota ei yksinkertaisesti ole olemassa.
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
}Päivittäminen ja poistaminen
update muuttaa tiettyjä kenttiä koskematta dokumentin muihin kenttiin. delete poistaa koko dokumentin.
Käytä set(..., SetOptions.merge())-kutsua, jos haluat osittaisen kirjoituksen, joka myös luo dokumentin, jos sitä ei vielä ole.
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()
}Kokoelman kyselyt
Muodosta kyselyitä ketjuttamalla suodattimia: whereEqualTo, whereGreaterThan, orderBy, limit ja muita.
Kysely palauttaa QuerySnapshot-olion. Käy sen dokumentit läpi ja muunna kukin dokumentti malliksesi.
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) }
}Reaaliaikaiset kuuntelijat
Firestoren tehokkain ominaisuus on reaaliaikaisuus. addSnapshotListener toimittaa nykyiset tiedot heti ja välittää sitten jokaisen muutoksen automaattisesti.
Se palauttaa ListenerRegistration-olion — lopeta päivitysten vastaanottaminen kutsumalla remove()-metodia, kun et enää tarvitse kuuntelijaa.
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()Reaaliaikaiset tiedot Flow-virtana
Composessa on idiोmaattista tarjota Firestoren tiedot Kotlinin Flow-virtana. callbackFlow yhdistää kuuntelijan takaisinkutsun flow-virtaan, ja awaitClose poistaa kuuntelijan, kun keräys lopetetaan.
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() }
}Tietojen näyttäminen Composessa
Kerää flow-virta collectAsStateWithLifecycle()-kutsulla ja näytä tiedot LazyColumn-komponentissa. Lista päivittyy automaattisesti aina, kun Firestore muuttuu — erillistä manuaalista päivitystä ei tarvita.
@Composable
fun NotesScreen(viewModel: NotesViewModel) {
val notes by viewModel.notes.collectAsStateWithLifecycle()
LazyColumn {
items(notes) { note ->
ListItem(
headlineContent = { Text(note.title) },
supportingContent = { Text(note.body) }
)
}
}
}Tietoturvasäännöt ovat tärkeitä
Firestore on oletuksena lukittu. Tietoturvasäännöt määrittävät, kuka voi lukea tai kirjoittaa kuhunkin polkuun — ne suoritetaan palvelimella, eikä asiakas voi ohittaa niitä.
Yleinen sääntö on, että käyttäjä saa käyttää vain omia tietojaan, jotka on yksilöity todennuksen uid-arvolla.
// 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;
}
}
}Pikatarkistus
Haluat Compose-listan päivittyvän heti aina, kun taustalla olevat Firestore-tiedot muuttuvat, ilman manuaalista päivitystä. Mitä API:a käytät?
Kertaus: Firestore
Osaat nyt tallentaa ja synkronoida tietoja Cloud Firestorella:
- Tiedot tallennetaan dokumentteina kokoelmiin; mallinna ne Kotlinin data class -luokilla.
- Kirjoita tiedot
add- jaset-metodeilla, lueget-metodilla ja muuta tai poista niitäupdate- jadelete-metodeilla. - Tee kyselyitä
whereEqualTo-,orderBy- jalimit-metodeilla. - Käytä
addSnapshotListener-metodia (taicallbackFlow-ratkaisua) reaaliaikaista käyttöliittymää varten. - Suojaa tiedot tietoturvasäännöillä, jotka perustuvat arvoon
request.auth.uid.
Seuraavaksi: käyttäjien tavoittaminen, kun sovellus on suljettu, palvelulla Cloud Messaging.
Opi Kotlin tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 36
- Oppitunnit
- 152
Usein kysytyt kysymykset
Onko oppitunti ”Cloud Firestoren perusteet” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Android Academy-oppimispolun 3 oppituntia, myös oppitunnin “Cloud Firestoren perusteet”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Android Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Cloud Firestoren perusteet”?
Lukekaa ja kirjoittakaa reaaliaikaisia tietoja. Harjoittelet Android Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Android Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Android Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.
Kuinka kauan ”Cloud Firestoren perusteet”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Android Academy-oppitunnilla?
Kyllä. Jokainen Android Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Firebasen käyttöönotto
- Firebase Authentication
- Cloud Firestoren perusteet
- Push-viestit Cloud Messagingilla