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

Клиентские SDK Firebase Data Connect позволяют вам вызывать ваши серверные запросы и мутации непосредственно из приложения Firebase. Вы генерируете пользовательский клиентский SDK параллельно с разработкой схем, запросов и мутаций, которые вы развертываете в своей службе Data Connect . Затем вы интегрируете методы из этого SDK в свою клиентскую логику.

Как мы уже упоминали в другом месте, важно отметить, что запросы и мутации Data Connect не отправляются клиентским кодом и не выполняются на сервере. Вместо этого при развертывании операции Data Connect сохраняются на сервере, как Cloud Functions. Это означает, что вам необходимо развернуть соответствующие изменения на стороне клиента, чтобы не нарушить работу существующих пользователей (например, в старых версиях приложения).

Вот почему Data Connect предоставляет вам среду разработки и инструменты, которые позволяют вам прототипировать ваши развернутые на сервере схемы, запросы и мутации. Он также автоматически генерирует клиентские SDK, пока вы прототипируете.

После итерационного обновления сервисных и клиентских приложений обновления как на стороне сервера, так и на стороне клиента готовы к развертыванию.

Каков рабочий процесс развития клиента?

Если вы следовали Get started , вы познакомились с общим процессом разработки для Data Connect . В этом руководстве вы найдете более подробную информацию о создании Android SDK из вашей схемы и работе с клиентскими запросами и мутациями.

Подводя итог, можно сказать, что для использования сгенерированных Android SDK в клиентских приложениях вам необходимо выполнить следующие предварительные действия:

  1. Добавьте Firebase в свое приложение Android .
  2. Настройте Data Connect как зависимость в Gradle.
  3. Добавьте плагин Kotlin Serialization Gradle и зависимость Gradle.

Затем:

  1. Разработайте схему своего приложения.
  2. Настройте генерацию SDK:

  3. Инициализируйте клиентский код и импортируйте библиотеки .

  4. Реализовать вызовы запросов и мутаций .

  5. Настройте и используйте эмулятор Data Connect и повторите попытку.

Создайте свой Kotlin SDK

Как и в большинстве проектов Firebase, работа над клиентским кодом Firebase Data Connect происходит в локальном каталоге проекта. Как расширение Data Connect VS Code, так и Firebase CLI являются важными локальными инструментами для генерации и управления клиентским кодом.

Параметры генерации SDK привязаны к нескольким записям в файле dataconnect.yaml , созданном при инициализации проекта.

Инициализировать генерацию SDK

В файле connector.yaml добавьте outputDir , package и (для веб-SDK) packageJsonDir .
connectorId: movies
generate:
  kotlinSdk:
    outputDir: ../../../src/main/java/com/myappliarcation
    package: com.myapplication

Замените outputDir на путь к каталогу, в который будет помещен сгенерированный код; этот путь является относительным к каталогу, содержащему сам файл connector.yaml . Замените package на оператор пакета Kotlin, который будет использоваться в сгенерированных файлах, или опустите package , чтобы использовать пакет по умолчанию.

Обновляйте SDK во время создания прототипа

Если вы создаете прототип интерактивно с помощью расширения Data Connect VS Code и его эмулятора Data Connect , исходные файлы SDK автоматически генерируются и обновляются, пока вы изменяете файлы .gql определяющие схемы, запросы и мутации. Это может быть полезной функцией в рабочих процессах горячей (пере)загрузки.

В других сценариях, если вы используете эмулятор Data Connect из Firebase CLI, вы можете установить отслеживание обновлений .gql , а также автоматически обновлять исходные коды SDK.

Кроме того, вы можете использовать CLI для повторной генерации SDK при каждом изменении файлов .gql:

firebase dataconnect:sdk:generate --watch

Создание SDK для интеграции и производственных выпусков

В некоторых сценариях, например при подготовке исходных кодов проекта к отправке на CI-тесты, можно вызвать Firebase CLI для пакетного обновления.

В этих случаях используйте 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.2.1") // Optional
implementation("com.google.firebase:firebase-appcheck:18.0.0") // Optional

Инициализируйте Data Connect Android SDK

Инициализируйте свой экземпляр 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

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

С объектом коннектора вы можете запускать запросы и мутации, как определено в исходном коде 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

Для переключения на производственные ресурсы закомментируйте строки подключения к эмулятору.

Типы данных в SDK Data Connect

Сервер 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