Los SDKs cliente de Firebase Data Connect te permiten llamar a tus consultas y mutaciones del servidor directamente desde una app de Firebase. Generas un SDK cliente personalizado en paralelo a medida que diseñas los esquemas, las consultas y las mutaciones que implementas en tu servicio de Data Connect. Luego, integras los métodos de este SDK en tu lógica de cliente.
Como mencionamos en otro lugar, es importante tener en cuenta que el código cliente no envía las consultas ni las mutaciones de Data Connect, y que estas se ejecutan en el servidor. En cambio, cuando se implementan, las operaciones de Data Connect se almacenan en el servidor como Cloud Functions. Esto significa que debes implementar los cambios correspondientes del cliente para evitar que se produzcan errores en los usuarios existentes (por ejemplo, en versiones anteriores de la app).
Es por eso que Data Connect te proporciona un entorno de desarrollador y herramientas que te permiten crear prototipos de tus esquemas, consultas y mutaciones implementados en el servidor. También genera SDKs del cliente automáticamente mientras creas prototipos.
Cuando hayas iterado las actualizaciones de tu servicio y tus apps cliente, las actualizaciones del servidor y del cliente estarán listas para implementarse.
Genera tu SDK de Swift
Al igual que con la mayoría de los proyectos de Firebase, el trabajo en el código cliente de Firebase Data Connect se realiza en un directorio de proyecto local. Tanto la extensión de VS Code de Data Connect como la CLI de Firebase son herramientas locales importantes para generar y administrar código de cliente.
Las opciones de generación de SDKs se vinculan a varias entradas del archivo dataconnect.yaml
que se generó cuando inicializaste tu proyecto.
Inicializa la generación de SDK
En tuconnector.yaml
, agrega outputDir
, package
y (para el SDK web)
packageJsonDir
.
connectorId: "movies"
generate:
swiftSdk:
outputDir: "../movies-generated"
package: "Movies"
outputDir
especifica dónde se debe generar el SDK generado. Si no se especifica, la carpeta del conector se usa como directorio de salida predeterminado.
package
especifica el nombre del paquete que se generará. El generador creará una carpeta con el nombre del paquete, que contendrá Package.swift
y el código generado.
observablePublisher
(opcional) especifica el publicador Observable que se usará en las referencias de consulta. Los valores posibles son observableMacro
(iOS 17 y versiones posteriores) y observableObject
(anteriores a iOS 17). El valor predeterminado, si no se especifica ninguno, es observableMacro
.
Actualiza los SDKs mientras creas prototipos
Si estás creando prototipos de forma interactiva con la extensión de VS Code de Data Connect
y su emulador de Data Connect, los archivos fuente del SDK se generan y actualizan automáticamente
mientras modificas los archivos .gql
que definen esquemas, consultas
y mutaciones. Esta puede ser una función útil en los flujos de trabajo de (re)carga en caliente.
.gql
y también hacer que las fuentes de SDK se actualicen automáticamente.
Como alternativa, puedes usar la CLI para volver a generar los SDKs cada vez que se cambien los archivos .gql:
firebase dataconnect:sdk:generate --watch
Genera SDKs para la integración y para las versiones de producción
En algunos casos, como cuando preparas fuentes de proyectos para enviarlas a pruebas de CI, puedes llamar a la CLI de Firebase para realizar una actualización por lotes.
En estos casos, usa firebase dataconnect:sdk:generate
.
Configura el código del cliente
Para configurar tu código de cliente para usar Data Connect y tu SDK generado, primero sigue las instrucciones de configuración estándar de Firebase.
Luego, abre el espacio de trabajo de tu app con Xcode.
En la barra de navegación superior, selecciona File > Add Package Dependencies > Add Local y elige la carpeta que contiene el archivo fuente Package.swift
generado.
Inicializa el SDK de Data Connect para iOS
Inicializa tu instancia de Data Connect con la información que usaste para configurar Data Connect (todo está disponible en la pestaña Data Connect de la consola de Firebase).
Cómo obtener una instancia de conector
El emulador de Data Connect generará el código de tu conector. Si el nombre del conector es movies
y el paquete es movies
, como se especifica en connector.yaml
, llama a lo siguiente para recuperar el objeto del conector:
let connector = DataConnect.moviesConnector
Ejecuta consultas y mutaciones
Con el objeto conector, puedes ejecutar consultas y mutaciones como se define en el código fuente de GraphQL. Supongamos que tu conector tiene definidas estas operaciones:
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
}
}
Luego, puedes crear una película de la siguiente manera:
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)")
Para recuperar una película, usarás una referencia de consulta. Todas las referencias de consulta son publicadores observables. Según el publicador configurado (consulta connector.yaml)
), admiten la macro @Observable
(iOS 17 y versiones posteriores) o implementan el protocolo ObservableObject
. El valor predeterminado, si no se especifica ninguno, es la macro @Observable
compatible con iOS 17 y versiones posteriores.
En una vista de SwiftUI, puedes vincular los resultados de la consulta con la variable data
publicada de la ref de la consulta y llamar al método execute()
de la consulta para actualizar
los datos. La variable data
coincidirá con la forma de los datos que se definió en la definición de tu consulta de GQL.
Todos los resultados recuperados cumplen con el protocolo Decodable
. Si incluiste la clave primaria del objeto en la recuperación de GQL, los objetos también son Identifiable
, lo que te permite usarlos en iteradores.
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()
}
}
Las consultas también admiten la ejecución única.
let resultData = try await DataConnect.moviesConnector.listMoviesByGenreQuery.execute(genre: "Sci-Fi")
Crea prototipos y prueba tu aplicación para iOS
Instrumenta clientes para usar un emulador local
Puedes usar el emulador de Data Connect, ya sea desde la extensión de VS Code de Data Connect o desde la CLI.
La instrumentación de la app para conectarse al emulador es la misma para ambas situaciones.
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
Tipos de datos en los SDK de Data Connect
El servidor Data Connect representa tipos de datos de GraphQL comunes y personalizados. Estos se representan en el SDK de la siguiente manera.
Tipo de conexión de datos | Swift |
---|---|
String | String |
Int | Int |
Número de punto flotante | Doble |
Booleano | Bool |
UUID | UUID |
Fecha | FirebaseDataConnect.LocalDate |
Marca de tiempo | FirebaseCore.Timestamp |
Int64 | Int64 |
Cualquiera | FirebaseDataConnect.AnyValue |