Клиентские SDK Firebase Data Connect позволяют вызывать запросы и изменения на стороне сервера непосредственно из приложения Firebase. Пользовательский клиентский SDK создается параллельно с разработкой схем, запросов и изменений, которые вы развертываете в службе Data Connect . Затем вы интегрируете методы из этого SDK в свою клиентскую логику.
Как мы уже упоминали, важно отметить, что запросы и изменения Data Connect не отправляются клиентским кодом и не выполняются на сервере. Вместо этого при развертывании операции Data Connect сохраняются на сервере, как и облачные функции. Это означает, что вам необходимо развернуть соответствующие изменения на стороне клиента, чтобы не нарушать работу существующих пользователей (например, в старых версиях приложения).
Вот почему Data Connect предоставляет вам среду разработки и инструменты, которые позволяют создавать прототипы схем, запросов и мутаций, развернутых на сервере. Он также автоматически генерирует клиентские SDK во время создания прототипа.
Когда вы выполнили итерацию обновлений своей службы и клиентских приложений, обновления как на стороне сервера, так и на стороне клиента готовы к развертыванию.
Создайте свой Kotlin SDK
Как и в большинстве проектов Firebase, работа над клиентским кодом Firebase Data Connect происходит в локальном каталоге проекта. И расширение Data Connect VS Code, и интерфейс командной строки Firebase являются важными локальными инструментами для создания клиентского кода и управления им.
Параметры создания SDK привязаны к нескольким записям в файле dataconnect.yaml
, созданном при инициализации проекта.
Инициализировать создание SDK
В файлconnector.yaml
добавьте outputDir
, package
и (для веб-SDK) packageJsonDir
.connectorId: movies
generate:
kotlinSdk:
outputDir: ../../../src/main/java/com/myapplication
package: com.myapplication
Замените outputDir
путем к каталогу, в который будет помещен сгенерированный код; этот путь указывается относительно каталога, содержащего сам файл connector.yaml
. Замените package
оператором пакета Kotlin, который будет использоваться в сгенерированных файлах, или опустите package
, чтобы использовать пакет по умолчанию.
Обновляйте SDK во время прототипирования
Если вы создаете прототипы в интерактивном режиме с помощью расширения Data Connect VS Code и его эмулятора Data Connect , исходные файлы SDK автоматически генерируются и обновляются, пока вы изменяете файлы .gql
определяющие схемы, запросы и мутации. Это может быть полезной функцией в рабочих процессах горячей (повторной) загрузки.
.gql
, а также автоматически обновлять источники SDK.Альтернативно вы можете использовать CLI для повторного создания SDK при каждом изменении файлов .gql:
firebase dataconnect:sdk:generate --watch
Создание SDK для интеграции и производственных выпусков.
В некоторых сценариях, например при подготовке источников проекта к отправке на CI-тесты, вы можете вызвать интерфейс командной строки Firebase для пакетного обновления.
В этих случаях используйте firebase dataconnect:sdk:generate
.
Настройка клиентского кода
Включите Data Connect в свой клиентский код
Чтобы настроить клиентский код для использования Data Connect и созданного вами SDK, сначала следуйте стандартным инструкциям по настройке Firebase .
Затем добавьте следующее в раздел plugins
в 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
Затем добавьте следующее в раздел dependencies
в 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
Инициализация Android SDK Data Connect
Инициализируйте экземпляр Data Connect используя информацию, которую вы использовали для настройки Data Connect (все доступно на вкладке Data Connect в консоли Firebase ).
Объект ConnectorConfig
Для SDK требуется объект конфигурации соединителя.
Этот объект автоматически создается на основе serviceId
и location
в dataconnect.yaml
, а также connectorId
в connector.yaml
.
Получение экземпляра соединителя
Теперь, когда вы настроили объект конфигурации, получите экземпляр соединителя Data Connect . Код для вашего соединителя будет создан эмулятором Data Connect . Если имя вашего соединителя — movies
, а пакет Kotlin — com.myapplication
, как указано в connector.yaml
, то получите объект соединителя, вызвав:
val connector = com.myapplication.MoviesConnector.instance
Запуск запросов и мутаций
С помощью объекта соединителя вы можете выполнять запросы и мутации, как определено в исходном коде GraphQL. Предположим, что в вашем соединителе определены следующие операции:
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
}
}
то вы можете создать и получить фильм следующим образом:
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}")
Вы также можете получить несколько фильмов:
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)
Вы также можете собрать Flow
, который будет выдавать результат только тогда, когда новый результат запроса будет получен с помощью вызова метода execute()
запроса.
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
Создайте прототип и протестируйте свое приложение для Android.
Инструментизация клиентов для использования локального эмулятора
Вы можете использовать эмулятор Data Connect как из расширения Data Connect VS Code, так и из CLI.
Инструментирование приложения для подключения к эмулятору одинаково для обоих сценариев.
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
Для перехода к производственным ресурсам закомментируйте строки подключения к эмулятору.
Типы данных в Data Connect SDK
Сервер Data Connect представляет общие и пользовательские типы данных GraphQL. В SDK они представлены следующим образом.
Тип подключения данных | Котлин |
---|---|
Нить | Нить |
Int | Целое (32-битное целое число) |
Плавать | Двойное (64-битное число с плавающей запятой) |
логическое значение | логическое значение |
UUID | java.util.UUID |
Дата | com.google.firebase.dataconnect.LocalDate (было java.util.Date до 16.0.0-beta03) |
Временная метка | com.google.firebase.Timestamp |
Int64 | Длинный |
Любой | com.google.firebase.dataconnect.AnyValue |