Os SDKs do cliente do Firebase Data Connect permitem chamar consultas e mutações do lado do servidor diretamente de um app do Firebase. Você gera um SDK do cliente personalizado em paralelo ao projetar os esquemas, consultas e mutações que serão implantados no serviço Data Connect. Em seguida, integre os métodos desse SDK à lógica do cliente.
Como mencionamos em outro lugar, é importante observar que as consultas e mutações Data Connect não são enviadas pelo código do cliente e executadas no servidor. Em vez disso, quando implantadas, as operações Data Connect são armazenadas no servidor, como o Cloud Functions. Isso significa que você precisa implantar as mudanças correspondentes do lado do cliente para evitar problemas com usuários existentes (por exemplo, em versões mais antigas do app).
Por isso, o Data Connect oferece um ambiente de desenvolvimento e ferramentas que permitem criar protótipos de esquemas, consultas e mutações implantados no servidor. Ele também gera SDKs do lado do cliente automaticamente enquanto você cria o protótipo.
Depois de iterar as atualizações nos apps de serviço e cliente, as atualizações do lado do servidor e do cliente estão prontas para implantação.
Gerar o SDK do Kotlin
Como na maioria dos projetos do Firebase, o trabalho no código do cliente Firebase Data Connect acontece em um diretório de projeto local. A extensão do Data Connect para VS Code e a CLI Firebase são ferramentas locais importantes para gerar e gerenciar o código do cliente.
As opções de geração do SDK são vinculadas a várias entradas no arquivo dataconnect.yaml
gerado quando você inicializou o projeto.
Inicializar a geração do SDK
Noconnector.yaml
, adicione outputDir
, package
e (para o SDK da Web)
packageJsonDir
.
connectorId: movies
generate:
kotlinSdk:
outputDir: ../../../src/main/java/com/myapplication
package: com.myapplication
Substitua outputDir
pelo caminho do diretório em que o código gerado
será colocado. Esse caminho é relativo ao diretório que contém o
arquivo connector.yaml
. Substitua package
pela instrução de pacote
Kotlin a ser usada nos arquivos gerados ou omita package
para usar um pacote
padrão.
Atualizar SDKs durante a prototipagem
Se você estiver criando protótipos de forma interativa com a extensão do Data Connect para o VS Code
e o emulador Data Connect, os arquivos de origem do SDK serão gerados e atualizados automaticamente
enquanto você modifica arquivos .gql
que definem esquemas, consultas
e mutações. Esse pode ser um recurso útil em fluxos de trabalho de (re)carregamento em tempo real.
.gql
e também ter as origens
do SDK atualizadas automaticamente.
Como alternativa, use a CLI para regenerar SDKs sempre que os arquivos .gql forem alterados:
firebase dataconnect:sdk:generate --watch
Gerar SDKs para integração e lançamentos de produção
Em alguns casos, como ao preparar fontes de projeto para envio para testes de CI, é possível chamar a CLI Firebase para uma atualização em lote.
Nesses casos, use firebase dataconnect:sdk:generate
.
Configurar o código do cliente
Incorpore Data Connect ao código do cliente
Para configurar o código do cliente para usar Data Connect e o SDK gerado, siga as instruções padrão de configuração do Firebase.
Em seguida, adicione o seguinte à seção plugins
em 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
Em seguida, adicione o seguinte à seção dependencies
em
app/build.gradle.kts
:
implementation("com.google.firebase:firebase-dataconnect:16.0.0-beta03")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-core:1.5.1")
implementation("com.google.firebase:firebase-auth:23.1.0") // Optional
implementation("com.google.firebase:firebase-appcheck:18.0.0") // Optional
Inicializar o SDK do Android Data Connect
Inicialize sua instância do Data Connect usando as informações que você usou para configurar o Data Connect (todas disponíveis na guia "Data Connect" do console do Firebase).
O objeto ConnectorConfig
O SDK requer um objeto de configuração do conector.
Esse objeto é gerado automaticamente de serviceId
e location
em
dataconnect.yaml
e connectorId
em connector.yaml
.
Como acessar uma instância do conector
Agora que você configurou um objeto de configuração, acesse uma instância do conector
Data Connect. O código do conector será gerado pelo
emulador Data Connect. Se o nome do conector for movies
e o
pacote Kotlin for com.myapplication
, conforme especificado em connector.yaml
, extraia o objeto do conector chamando:
val connector = com.myapplication.MoviesConnector.instance
Executar consultas e mutações
Com o objeto conector, é possível executar consultas e mutações conforme definido no código-fonte do GraphQL. Suponha que o conector tenha estas operações definidas:
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
}
}
Você pode criar e recuperar um filme da seguinte maneira:
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}")
Você também pode recuperar vários filmes:
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)
Também é possível coletar um Flow
que só vai produzir um resultado quando um novo resultado
de consulta for recuperado usando uma chamada para o método execute()
da consulta.
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
Criar protótipos e testar seu aplicativo Android
Instrumentar clientes para usar um emulador local
É possível usar o emulador Data Connect, seja na extensão do Data Connect para o VS Code ou na CLI.
A instrumentação do app para se conectar ao emulador é a mesma para os dois cenários.
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
Para alternar para recursos de produção, comente as linhas para se conectar ao emulador.
Tipos de dados nos SDKs do Data Connect
O servidor Data Connect representa tipos de dados comuns e personalizados do GraphQL. Elas são representadas no SDK da seguinte maneira.
Tipo de conexão de dados | Kotlin |
---|---|
String | String |
Int | Int (número inteiro de 32 bits) |
Ponto flutuante | Double (ponto flutuante de 64 bits) |
Booleano | Booleano |
UUID | java.util.UUID |
Data | com.google.firebase.dataconnect.LocalDate (era java.util.Date até 16.0.0-beta03) |
Carimbo de data/hora | com.google.firebase.Timestamp |
Int64 | Longo |
Qualquer | com.google.firebase.dataconnect.AnyValue |