Gli SDK client Firebase Data Connect ti consentono di chiamare le query e le mutazioni lato server direttamente da un'app Firebase. Generi un SDK client personalizzato in parallelo alla progettazione degli schemi, delle query e delle mutazioni che implementi nel tuo servizio Data Connect. Poi, integra i metodi di questo SDK nella logica del client.
Come abbiamo già detto, è importante notare che le Data Connect query e le mutazioni non vengono inviate dal codice client ed eseguite sul server. Al contrario, una volta eseguito il deployment, le operazioni Data Connect vengono archiviate sul server come Cloud Functions. Ciò significa che devi implementare le modifiche lato client corrispondenti per evitare di interrompere l'esperienza degli utenti esistenti (ad esempio, nelle versioni precedenti dell'app).
Per questo motivo, Data Connect ti fornisce un ambiente di sviluppo e strumenti che ti consentono di prototipare schemi, query e mutazioni implementati sul server. Inoltre, genera automaticamente gli SDK lato client durante la prototipazione.
Una volta completati gli aggiornamenti iterativi del servizio e delle app client, gli aggiornamenti lato server e lato client sono pronti per il deployment.
Qual è il flusso di lavoro di sviluppo del client?
Se hai seguito la guida Inizia, hai appreso il flusso di sviluppo complessivo per Data Connect. In questa guida troverai informazioni più dettagliate sulla generazione di SDK Android dallo schema e sull'utilizzo di query e mutazioni client.
Per riassumere, per utilizzare gli SDK Android generati nelle tue app client, segui questi passaggi preliminari:
- Aggiungi Firebase alla tua app Android.
- Configura Data Connect come dipendenza in Gradle.
- Aggiungi il plug-in Gradle per la serializzazione Kotlin e la dipendenza Gradle.
Quindi:
- Sviluppa lo schema dell'app.
Configura la generazione dell'SDK:
- Con il pulsante Aggiungi SDK all'app nella nostra estensione Data Connect VS Code
- Aggiornando il tuo
connector.yaml
Genera l'SDK Kotlin
Come per la maggior parte dei progetti Firebase, il lavoro sul codice client Firebase Data Connect si svolge in una directory di progetto locale. Sia l'estensione VS Code Data Connect sia la CLI Firebase sono strumenti locali importanti 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
Nel tuoconnector.yaml
, aggiungi outputDir
, package
e (per l'SDK web)
packageJsonDir
.
connectorId: movies
generate:
kotlinSdk:
outputDir: ../../../src/main/java/com/myapplication
package: com.myapplication
Sostituisci outputDir
con il percorso della directory in cui verrà inserito il codice generato; questo percorso è relativo alla directory che contiene il file connector.yaml
. Sostituisci package
con l'istruzione del pacchetto Kotlin da utilizzare nei file generati oppure ometti package
per utilizzare un pacchetto predefinito.
Aggiornare gli SDK durante la prototipazione
Se prototipi in modo interattivo con l'estensione VS Code Data Connect e il relativo emulatore Data Connect, i file di origine dell'SDK vengono generati e aggiornati automaticamente mentre modifichi i file .gql
che definiscono schemi, query e mutazioni. Può essere una funzionalità utile nei flussi di lavoro di ricaricamento a caldo.
.gql
e anche aggiornare automaticamente le origini SDK.
In alternativa, puoi utilizzare la CLI per rigenerare gli SDK ogni volta che vengono modificati i file .gql:
firebase dataconnect:sdk:generate --watch
Generare SDK per l'integrazione e per le release di produzione
In alcuni scenari, ad esempio la preparazione delle origini del progetto da inviare per i test CI, puoi chiamare la CLI Firebase per un aggiornamento batch.
In questi casi, utilizza firebase dataconnect:sdk:generate
.
Configurare il codice cliente
Incorporare Data Connect nel codice cliente
Per configurare il codice client in modo che utilizzi Data Connect e l'SDK generato, segui prima le istruzioni di configurazione standard di Firebase.
Poi, aggiungi quanto segue alla sezione plugins
in 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
Poi, aggiungi quanto segue alla sezione dependencies
in
app/build.gradle.kts
:
implementation(platform("com.google.firebase:firebase-bom:33.16.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
Inizializza l'SDK Android Data Connect
Inizializza l'istanza Data Connect utilizzando le informazioni che hai utilizzato per configurare Data Connect (tutte disponibili nella scheda Data Connect della console Firebase).
L'oggetto ConnectorConfig
L'SDK richiede un oggetto di configurazione del connettore.
Questo oggetto viene generato automaticamente da serviceId
e location
in
dataconnect.yaml
e connectorId
in connector.yaml
.
Recupero di un'istanza del connettore
Ora che hai configurato un oggetto di configurazione, ottieni un'istanza del connettore Data Connect. Il codice per il connettore verrà generato dall'emulatore
Data Connect. Se il nome del connettore è movies
e il
pacchetto Kotlin è com.myapplication
, come specificato in connector.yaml
, recupera
l'oggetto connettore chiamando:
val connector = com.myapplication.MoviesConnector.instance
Utilizzare query e mutazioni dall'SDK Android
Con l'oggetto connettore, puoi eseguire query e mutazioni come definito nel 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
}
}
poi potresti creare e recuperare un filmato nel seguente modo:
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}")
Puoi anche recuperare più 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)
Puoi anche raccogliere un Flow
che produrrà un risultato solo quando viene recuperato un nuovo risultato della query utilizzando una chiamata al metodo execute()
della query.
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
Prototipare e testare l'applicazione per Android
Strumentare i client per utilizzare un emulatore locale
Puoi utilizzare l'emulatore Data Connect, sia dall'estensione VS Code Data Connect sia dalla CLI.
L'instrumentazione dell'app per la connessione all'emulatore è la stessa per entrambi gli scenari.
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
Per passare alle risorse di produzione, commenta le righe per la connessione all'emulatore.
Tipi di dati negli SDK Data Connect
Il server Data Connect rappresenta i tipi di dati GraphQL comuni e personalizzati. Questi sono rappresentati nell'SDK come segue.
Tipo di connessione Data Connect | Kotlin |
---|---|
Stringa | Stringa |
Int | Int (intero a 32 bit) |
In virgola mobile | Double (virgola mobile a 64 bit) |
Booleano | Booleano |
UUID | java.util.UUID |
Data | com.google.firebase.dataconnect.LocalDate (era java.util.Date fino alla versione 16.0.0-beta03) |
Timestamp | com.google.firebase.Timestamp |
Int64 | Lungo |
Qualsiasi | com.google.firebase.dataconnect.AnyValue |