Gli SDK client Firebase Data Connect ti consentono di chiamare le query lato server e le mutazioni direttamente da un'app Firebase. Puoi generare un SDK client personalizzato in parallelo mentre progetti gli schemi, le query e le mutazioni di cui esegui il deployment Servizio Data Connect. Quindi, puoi integrare i metodi di questo SDK la logica del client.
Come indicato altrove, è importante notare che Data Connect query e mutazioni non vengono inviate dal codice del client ed eseguite sul o server web. Al momento del deployment, invece, le operazioni Data Connect vengono archiviate come Cloud Functions. Ciò significa che devi implementare le modifiche lato client corrispondenti per evitare di interrompere gli utenti esistenti (ad esempio, nelle versioni precedenti dell'app).
Per questo motivo, Data Connect fornisce un ambiente di sviluppo e strumenti che ti consentono di creare un prototipo di schemi, query e mutazioni di cui è stato eseguito il deployment sul server. Inoltre, genera automaticamente gli SDK lato client durante la creazione del prototipo.
Dopo aver eseguito l'iterazione degli aggiornamenti delle app di servizio e client, gli aggiornamenti sia lato server sia lato client sono pronti per il deployment.
Genera il tuo SDK Swift
Come per la maggior parte dei progetti Firebase, il codice clientFirebase Data Connect viene modificato in una directory del progetto locale. Sia l'estensione Data Connect per VS Code sia la CLI Firebase sono importanti strumenti locali per generare e gestire il codice client.
Le opzioni di generazione dell'SDK sono associate a diverse voci nel file dataconnect.yaml
generato durante l'inizializzazione del progetto.
Inizializza la generazione dell'SDK
Inconnector.yaml
, aggiungi outputDir
, package
e (per l'SDK web)
packageJsonDir
.
connectorId: "movies"
generate:
swiftSdk:
outputDir: "../movies-generated"
package: "Movies"
outputDir
specifica dove deve essere generato l'SDK. Se non specificato, la cartella del connettore viene utilizzata come directory di output predefinita.
package
specifica il nome del pacchetto che verrà generato. Il generatore
crea una cartella con il nome del pacchetto, contenente Package.swift
e il codice generato.
observablePublisher
(facoltativo) specifica il publisher Observable da utilizzare nei riferimenti query. I valori possibili sono observableMacro
(iOS 17 e versioni successive) e
observableObject
(versioni precedenti a iOS 17). Se non viene specificato alcun valore, il valore predefinito è observableMacro
.
Aggiornare gli SDK durante la prototipazione
Se stai eseguendo la prototipazione in modo interattivo con l'estensione Data Connect VS Code
e il relativo emulatore Data Connect, i file di origine dell'SDK vengono automaticamente
generati e aggiornati mentre modifichi .gql
file che definiscono schemi, query
e mutazioni. Questa può essere una funzionalità utile nei flussi di lavoro di (ri)caricamento a caldo.
.gql
e anche aggiornare automaticamente le sorgenti SDK.
In alternativa, puoi utilizzare la CLI per rigenerare gli SDK ogni volta che i file .gql vengono modificati:
firebase dataconnect:sdk:generate --watch
Genera SDK per le release di integrazione e di produzione
In alcuni scenari, ad esempio per preparare le origini del progetto da inviare per i test CI, puoi chiamare la CLI Firebase per un aggiornamento collettivo.
In questi casi, utilizza firebase dataconnect:sdk:generate
.
Configurare il codice client
Per configurare il codice client in modo da utilizzare Data Connect e l'SDK generato, devi prima segui le istruzioni di configurazione standard di Firebase.
Quindi, apri l'area di lavoro delle app utilizzando Xcode.
Nella barra di navigazione in alto, seleziona File > Aggiungi dipendenze del pacchetto > Aggiungi
Locale e scegli la cartella contenente il file di originePackage.swift
generato.
Inizializza l'SDK Data Connect per iOS
Inizializza l'istanza Data Connect utilizzando le informazioni che hai utilizzato per configurare Data Connect (tutte disponibili nella scheda Data Connect della console Firebase).
Ottenere un'istanza del connettore
Il codice per il connettore verrà generato dall'emulatore Data Connect. Se il nome del connettore è movies
e il pacchetto è movies
, come specificato in connector.yaml
, recupera l'oggetto connettore chiamando:
let connector = DataConnect.moviesConnector
Esecuzione di query e mutazioni
Con l'oggetto connettore, puoi eseguire query e mutazioni come definito nell' Codice sorgente GraphQL. Supponiamo che il connettore abbia definito queste operazioni:
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
}
}
A questo punto puoi creare un filmato nel seguente modo:
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)")
Per recuperare un film, utilizzerai un riferimento di query. Tutti i riferimenti di query sono
Publisher osservabili. A seconda del publisher configurato (vedi connector.yaml)
,
supportano la macro @Observable
(iOS 17 e versioni successive) o implementano la macro
protocollo ObservableObject
. L'impostazione predefinita, se non viene specificata alcuna, è
Macro @Observable
supportata su iOS 17 e versioni successive.
In una vista SwiftUI, puoi associare i risultati della query utilizzando gli attributi data
pubblicati
del riferimento della query e chiama il metodo execute()
della query per aggiornare
i dati. La variabile data
corrisponderà alla forma dei dati definiti nella definizione della query GQL.
Tutti i risultati recuperati sono conformi al protocollo Decodable
. Se hai incluso
chiave primaria dell'oggetto nel recupero GQL, anche gli oggetti sono Identifiable
,
permettendoti di usarli in iteratori.
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()
}
}
Le query supportano anche l'esecuzione una tantum.
let resultData = try await DataConnect.moviesConnector.listMoviesByGenreQuery.execute(genre: "Sci-Fi")
Crea il prototipo e testa l'applicazione per iOS
Strumentare i client per l'utilizzo di un emulatore locale
Puoi usare l'emulatore Data Connect, sia dall'emulatore dall'estensione Data Connect VS Code o dall'interfaccia a riga di comando.
L'instrumentazione dell'app per la connessione all'emulatore è la stessa per entrambi gli scenari.
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
Tipi di dati negli SDK Data Connect
Il server Data Connect rappresenta dati GraphQL comuni e personalizzati di testo. Queste sono rappresentate nell'SDK come segue.
Tipo di Data Connect | Swift |
---|---|
Stringa | Stringa |
Int | Int |
In virgola mobile | Doppio |
Booleano | Bool |
UUID | UUID |
Data | FirebaseDataConnect.LocalDate |
Timestamp | FirebaseCore.Timestamp |
Int64 | Int64 |
Qualsiasi | FirebaseDataConnect.AnyValue |