Menggunakan SDK iOS yang dibuat

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 dan alat developer 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

Di connector.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 VS Code Data Connect 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).

Dalam skenario lain, jika menggunakan emulator Data Connect dari CLI Firebase, Anda dapat menetapkan pemantauan pada update .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