Dengan SDK klien Firebase Data Connect, Anda dapat memanggil kueri dan mutasi sisi server secara 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 akan mengintegrasikan metode dari SDK ini ke dalam logika klien.
Seperti yang telah kami sebutkan di tempat lain, penting untuk diperhatikan bahwa kueri dan mutasi Data Connect tidak dikirimkan oleh kode klien dan dijalankan di server. 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 kerusakan pada pengguna yang ada (misalnya, pada versi aplikasi lama).
Itulah sebabnya Data Connect menyediakan lingkungan developer dan alat yang memungkinkan Anda membuat prototipe skema, kueri, dan mutasi yang di-deploy server. Alat ini juga membuat SDK sisi klien secara otomatis, saat Anda membuat prototipe.
Setelah Anda melakukan iterasi update pada aplikasi layanan dan klien, update sisi server dan sisi klien siap di-deploy.
Membuat Swift SDK
Seperti sebagian besar project Firebase, pekerjaan pada kode klien Firebase Data Connect Anda dilakukan di direktori project lokal. Ekstensi VS Code Data Connect dan CLI Firebase adalah alat lokal penting untuk membuat dan mengelola kode klien.
Opsi pembuatan SDK diberi kunci ke beberapa entri dalam file dataconnect.yaml
yang dihasilkan saat Anda melakukan inisialisasi project.
Melakukan inisialisasi pembuatan SDK
Diconnector.yaml
, tambahkan outputDir
, package
, dan (untuk web SDK)
packageJsonDir
.
connectorId: "movies"
generate:
swiftSdk:
outputDir: "../movies-generated"
package: "Movies"
outputDir
menentukan tujuan output SDK yang dihasilkan. Jika tidak ditentukan, folder konektor akan digunakan sebagai direktori output default.
package
menentukan nama paket yang akan dibuat. Generator
akan membuat folder dengan nama paket, yang berisi Package.swift
dan kode yang dihasilkan.
observablePublisher
(opsional) menentukan penayang Observable yang akan digunakan dalam
referensi kueri. Kemungkinan nilainya adalah observableMacro
(iOS 17+) dan
observableObject
(pra-iOS 17). Nilai defaultnya, jika tidak ditentukan, adalah
observableMacro
.
Memperbarui SDK saat membuat prototipe
Jika Anda membuat prototipe secara interaktif dengan ekstensi Data Connect VS Code dan emulator Data Connect-nya, file sumber SDK akan otomatis dibuat dan diperbarui saat Anda mengubah file .gql
yang menentukan skema, kueri, dan mutasi. Hal ini dapat menjadi fitur yang berguna dalam alur kerja pemuatan ulang (hot reload).
.gql
dan juga mengupdate
sumber SDK secara otomatis.
Atau, Anda dapat menggunakan CLI untuk membuat ulang SDK setiap kali file .gql diubah:
firebase dataconnect:sdk:generate --watch
Membuat SDK untuk integrasi dan untuk rilis produksi
Dalam beberapa skenario, seperti menyiapkan sumber project untuk dikirimkan ke pengujian CI, Anda dapat memanggil Firebase CLI untuk update batch.
Dalam kasus ini, gunakan firebase dataconnect:sdk:generate
.
Menyiapkan kode klien
Untuk menyiapkan kode klien agar dapat menggunakan Data Connect dan SDK yang dihasilkan, pertama-tama, ikuti petunjuk penyiapan Firebase standar.
Kemudian, buka ruang kerja aplikasi Anda menggunakan Xcode.
Di menu navigasi atas, pilih File > Add Package Dependencies > Add
Local, lalu pilih folder yang berisi file sumber
Package.swift
yang dihasilkan.
Melakukan inisialisasi Data Connect iOS SDK
Lakukan inisialisasi instance Data Connect menggunakan informasi yang Anda gunakan untuk menyiapkan Data Connect (semua tersedia di tab Data Connect konsol Firebase).
Mendapatkan instance konektor
Kode untuk konektor Anda akan dibuat oleh
emulator Data Connect. Jika nama konektor Anda adalah movies
dan
paketnya adalah movies
, seperti yang ditentukan dalam connector.yaml
, ambil objek konektor dengan memanggil:
let connector = DataConnect.moviesConnector
Menjalankan Kueri dan Mutasi
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 film sebagai berikut:
let mutationResult = try await connector.createMovieMutation.execute(
title: "Empire Strikes Back",
releaseYear: 1980,
genre: "Sci-Fi",
rating: 5)
print("Movie ID: \(mutationResult.data.movie_insert.id)")
Untuk mengambil film, Anda akan menggunakan referensi kueri. Semua referensi kueri adalah
penayang Observable. Bergantung pada penayang yang dikonfigurasi (lihat connector.yaml)
),
penayang tersebut mendukung makro @Observable
(iOS 17+) atau menerapkan
protokol ObservableObject
. Defaultnya, jika tidak ada yang ditentukan, adalah
makro @Observable
yang didukung di iOS 17+.
Dalam tampilan SwiftUI, Anda dapat mengikat hasil kueri menggunakan variabel data
yang dipublikasikan dari referensi kueri dan memanggil metode execute()
kueri untuk memperbarui
data. Variabel data
akan cocok dengan bentuk data yang ditentukan
dalam definisi kueri GQL Anda.
Semua hasil yang diambil mematuhi protokol Decodable
. Jika Anda menyertakan
kunci utama objek dalam pengambilan GQL, objek tersebut juga merupakan Identifiable
,
sehingga Anda dapat menggunakannya dalam iterator.
struct ListMovieView: View {
@StateObject private var queryRef = connector.listMoviesByGenreQuery.ref(genre: "Sci-Fi")
var body: some View {
VStack {
Button {
Task {
do {
try await refresh()
} catch {
print("Failed to refresh: \(error)")
}
}
} label: {
Text("Refresh")
}
// use the query results in a view
ForEach(queryRef.data?.movies ?? [], id: \.self.id) { movie in
Text(movie.title)
}
}
}
@MainActor
func refresh() async throws {
_ = try await queryRef.execute()
}
}
Kueri juga mendukung eksekusi satu kali.
let resultData = try await DataConnect.moviesConnector.listMoviesByGenreQuery.execute(genre: "Sci-Fi")
Membuat prototipe dan menguji aplikasi iOS
Menginstrumentasikan klien untuk menggunakan emulator lokal
Anda dapat menggunakan emulator Data Connect, baik dari ekstensi VS Code Data Connect maupun dari CLI.
Instrumentasi aplikasi untuk terhubung ke emulator sama untuk kedua skenario.
let connector = DataConnect.moviesConnector
// Connect to the emulator on "127.0.0.1:9399"
connector.useEmulator()
// (alternatively) if you're running your emulator on non-default port:
connector.useEmulator(port: 9999)
// Make calls from your app
Jenis data di Data Connect SDK
Server Data Connect mewakili jenis data GraphQL umum dan kustom. Hal ini direpresentasikan dalam SDK sebagai berikut.
Jenis Data Connect | Swift |
---|---|
String | String |
Int | Int |
Float | Ganda |
Boolean | Bool |
UUID | UUID |
Tanggal | FirebaseDataConnect.LocalDate |
Stempel waktu | FirebaseCore.Timestamp |
Int64 | Int64 |
Semua | FirebaseDataConnect.AnyValue |