Используйте сгенерированные Android SDK

Клиентские 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 определяющие схемы, запросы и мутации. Это может быть полезной функцией в рабочих процессах горячей (повторной) загрузки.

В других сценариях, если вы используете эмулятор Data Connect из интерфейса командной строки Firebase , вы можете настроить наблюдение за обновлениями .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