Dengan SDK klien Firebase Data Connect, Anda dapat memanggil kueri dan mutasi sisi server langsung dari aplikasi Firebase. Anda membuat SDK klien kustom secara paralel saat mendesain skema, kueri, dan mutasi yang di-deploy ke layanan Data Connect. Kemudian, Anda mengintegrasikan metode dari SDK ini ke dalam logika klien Anda.
Seperti yang telah kami sebutkan di tempat lain, penting untuk diperhatikan bahwa kueri dan mutasi tidak dikirimkan oleh kode klien dan dieksekusi di server.Data Connect Sebagai gantinya, saat di-deploy, operasi Data Connect disimpan di server seperti Cloud Functions. Artinya, Anda perlu men-deploy perubahan sisi klien yang sesuai untuk menghindari gangguan pada pengguna yang ada (misalnya, di aplikasi versi lama).
Itulah sebabnya Data Connect menyediakan lingkungan dan alat pengembangan yang memungkinkan Anda membuat prototipe skema, kueri, dan mutasi yang di-deploy server. Selain itu, SDK sisi klien akan dibuat secara otomatis saat Anda membuat prototipe.
Setelah Anda melakukan iterasi pembaruan pada aplikasi layanan dan klien, pembaruan sisi server dan klien siap di-deploy.
Apa alur kerja pengembangan klien?
Jika Anda mengikuti Mulai, Anda telah diperkenalkan dengan alur pengembangan keseluruhan untuk Data Connect. Dalam panduan ini, Anda akan menemukan informasi yang lebih mendetail tentang cara membuat SDK Android dari skema dan cara menggunakan kueri dan mutasi klien.
Singkatnya, untuk menggunakan Android SDK yang dihasilkan di aplikasi klien, Anda harus mengikuti langkah-langkah prasyarat berikut:
- Tambahkan Firebase ke aplikasi Android Anda.
- Konfigurasi Data Connect sebagai dependensi di Gradle.
- Tambahkan plugin Gradle Kotlin Serialization dan dependensi Gradle.
Kemudian:
- Kembangkan skema aplikasi Anda.
Siapkan pembuatan SDK:
- Dengan tombol Tambahkan SDK ke aplikasi di ekstensi VS Code Data Connect kami
- Dengan mengupdate
connector.yaml
Siapkan dan gunakan emulator Data Connect dan lakukan iterasi.
Membuat SDK Kotlin
Gunakan CLI Firebase untuk menyiapkan SDK yang dihasilkan Data Connect di aplikasi Anda.
Perintah init
akan mendeteksi semua aplikasi di folder saat ini dan menginstal SDK yang dihasilkan secara otomatis.
firebase init dataconnect:sdk
Memperbarui SDK saat membuat prototipe
Jika Anda telah menginstal ekstensi Data Connect VS Code, ekstensi ini akan selalu memperbarui SDK yang dihasilkan.
Jika tidak menggunakan ekstensi Data Connect VS Code, Anda dapat menggunakan Firebase CLI untuk terus memperbarui SDK yang dihasilkan.
firebase dataconnect:sdk:generate --watch
Membuat SDK di pipeline build
Anda dapat menggunakan Firebase CLI untuk membuat SDK Data Connect dalam proses build CI/CD.
firebase dataconnect:sdk:generate
Menyiapkan kode klien
Menggabungkan Data Connect ke dalam kode klien Anda
Untuk menyiapkan kode klien Anda agar menggunakan Data Connect dan SDK yang dihasilkan, ikuti terlebih dahulu petunjuk penyiapan Firebase standar.
Kemudian, tambahkan kode berikut ke bagian plugins
di app/build.gradle.kts
:
// The Firebase team tests with version 1.8.22; however, other 1.8 versions,
// and all newer versions are expected work too.
kotlin("plugin.serialization") version "1.8.22" // MUST match the version of the Kotlin compiler
Kemudian, tambahkan kode berikut ke bagian dependencies
di
app/build.gradle.kts
:
implementation(platform("com.google.firebase:firebase-bom:34.1.0"))
implementation("com.google.firebase:firebase-dataconnect")
implementation("com.google.firebase:firebase-auth") // Optional
implementation("com.google.firebase:firebase-appcheck") // Optional
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3") // Newer versions should work too
implementation("org.jetbrains.kotlinx:kotlinx-serialization-core:1.5.1") // Newer versions should work too
Melakukan inisialisasi Data Connect Android SDK
Lakukan inisialisasi instance Data Connect menggunakan informasi yang Anda gunakan untuk menyiapkan Data Connect (semua tersedia di tab Data Connect konsol Firebase).
Objek ConnectorConfig
SDK memerlukan objek konfigurasi konektor.
Objek ini dibuat secara otomatis dari serviceId
dan location
di
dataconnect.yaml
, dan connectorId
di connector.yaml
.
Mendapatkan instance konektor
Setelah menyiapkan objek konfigurasi, dapatkan instance konektor Data Connect. Kode untuk konektor Anda akan dibuat oleh emulator
Data Connect. Jika nama konektor Anda adalah movies
dan paket
Kotlin adalah com.myapplication
, seperti yang ditentukan dalam connector.yaml
, maka
ambil objek konektor dengan memanggil:
val connector = com.myapplication.MoviesConnector.instance
Menggunakan kueri dan mutasi dari Android SDK
Dengan objek konektor, Anda dapat menjalankan kueri dan mutasi seperti yang ditentukan dalam kode sumber GraphQL. Misalkan konektor Anda memiliki operasi berikut yang ditentukan:
mutation createMovie($title: String!, $releaseYear: Int!, $genre: String!, $rating: Int!) {
movie_insert(data: {
title: $title
releaseYear: $releaseYear
genre: $genre
rating: $rating
})
}
query getMovieByKey($key: Movie_Key!) {
movie(key: $key) { id title }
}
query listMoviesByGenre($genre: String!) {
movies(where: {genre: {eq: $genre}}) {
id
title
}
}
Kemudian, Anda dapat membuat dan mengambil film sebagai berikut:
val connector = MoviesConnector.instance
val addMovieResult1 = connector.createMovie.execute(
title = "Empire Strikes Back",
releaseYear = 1980,
genre = "Sci-Fi",
rating = 5
)
val movie1 = connector.getMovieByKey.execute(addMovieResult1.data.key)
println("Empire Strikes Back: ${movie1.data.movie}")
Anda juga dapat mengambil beberapa film:
val connector = MoviesConnector.instance
val addMovieResult2 = connector.createMovie.execute(
title="Attack of the Clones",
releaseYear = 2002,
genre = "Sci-Fi",
rating = 5
)
val listMoviesResult = connector.listMoviesByGenre.execute(genre = "Sci-Fi")
println(listMoviesResult.data.movies)
Anda juga dapat mengumpulkan Flow
yang hanya akan menghasilkan hasil saat hasil kueri baru diambil menggunakan panggilan ke metode execute()
kueri.
val connector = MoviesConnector.instance
connector.listMoviesByGenre.flow(genre = "Sci-Fi").collect { data ->
println(data.movies)
}
connector.createMovie.execute(
title="A New Hope",
releaseYear = 1977,
genre = "Sci-Fi",
rating = 5
)
connector.listMoviesByGenre.execute(genre = "Sci-Fi") // will cause the Flow to get notified
Menangani perubahan pada kolom enumerasi
Skema aplikasi dapat berisi enumerasi, yang dapat diakses oleh kueri GraphQL Anda.
Saat desain aplikasi berubah, Anda dapat menambahkan nilai yang didukung enum baru. Misalnya,
bayangkan bahwa di kemudian hari dalam siklus proses aplikasi, Anda memutuskan untuk menambahkan
nilai LAYAR PENUH ke enum AspectRatio
.
Dalam alur kerja Data Connect, Anda dapat menggunakan alat pengembangan lokal untuk memperbarui kueri dan SDK.
Namun, sebelum Anda merilis versi terbaru klien, klien lama yang di-deploy mungkin rusak.
Contoh penerapan yang tangguh
SDK yang dihasilkan memaksa penanganan nilai yang tidak diketahui karena kode pelanggan harus membuka objek EnumValue
, yang berupa EnumValue.Known
untuk nilai enum yang diketahui atau EnumValue.Unknown
untuk nilai yang tidak diketahui.
val result = connector.listMoviesByAspectRatio.execute(AspectRatio.WIDESCREEN)
val encounteredAspectRatios = mutableSetOf<String>()
result.data.movies
.mapNotNull { it.otherAspectRatios }
.forEach { otherAspectRatios ->
otherAspectRatios
.filterNot { it.value == AspectRatio.WIDESCREEN }
.forEach {
when (it) {
is EnumValue.Known -> encounteredAspectRatios.add(it.value.name)
is EnumValue.Unknown ->
encounteredAspectRatios.add("[unknown ratio: ${it.stringValue}]")
}
}
}
println(
"Widescreen movies also include additional aspect ratios: " +
encounteredAspectRatios.sorted().joinToString()
)
Membuat prototipe dan menguji aplikasi Android Anda
Menginstrumentasi klien untuk menggunakan emulator lokal
Anda dapat menggunakan emulator Data Connect, baik dari ekstensi VS Code Data Connect maupun dari CLI.
Pengukuran aplikasi untuk terhubung ke emulator sama untuk kedua skenario.
val connector = MoviesConnector.instance
// Connect to the emulator on "10.0.2.2:9399"
connector.dataConnect.useEmulator()
// (alternatively) if you're running your emulator on non-default port:
connector.dataConnect.useEmulator(port = 9999)
// Make calls from your app
Untuk beralih ke resource produksi, beri komentar pada baris untuk menghubungkan ke emulator.
Jenis data di SDK Data Connect
Server Data Connect menampilkan jenis data GraphQL umum dan kustom. Hal ini ditampilkan di SDK sebagai berikut.
Jenis Koneksi Data | Kotlin |
---|---|
String | String |
Int | Int (bilangan bulat 32-bit) |
Float | Double (float 64-bit) |
Boolean | Boolean |
UUID | java.util.UUID |
Tanggal | com.google.firebase.dataconnect.LocalDate (adalah java.util.Date hingga 16.0.0-beta03) |
Stempel waktu | com.google.firebase.Timestamp |
Int64 | Long |
Semua | com.google.firebase.dataconnect.AnyValue |