Клиентские SDK Firebase Data Connect позволяют вызывать серверные запросы и мутации непосредственно из приложения Firebase. Вы генерируете собственный клиентский SDK параллельно с разработкой схем, запросов и мутаций, которые вы разворачиваете в сервисе Data Connect . Затем вы интегрируете методы из этого SDK в клиентскую логику.
Как мы уже упоминали ранее, важно отметить, что запросы и мутации Data Connect не отправляются клиентским кодом и не выполняются на сервере. Вместо этого при развёртывании операции Data Connect хранятся на сервере, как облачные функции. Это означает, что вам необходимо развернуть соответствующие изменения на стороне клиента, чтобы избежать нарушения работы существующих пользователей (например, в старых версиях приложения).
Именно поэтому Data Connect предоставляет вам среду разработки и инструменты, позволяющие создавать прототипы схем, запросов и мутаций, развёртываемых на сервере. Кроме того, Data Connect автоматически генерирует клиентские SDK во время создания прототипа.
После итеративного обновления сервисных и клиентских приложений обновления как на стороне сервера, так и на стороне клиента готовы к развертыванию.
Каков рабочий процесс разработки клиента?
Если вы следовали руководству «Начало работы» , то ознакомились с общим процессом разработки Data Connect . В этом руководстве вы найдете более подробную информацию о создании Swift SDK на основе вашей схемы и работе с клиентскими запросами и мутациями.
Подводя итог, чтобы использовать сгенерированные Swift SDK в клиентских приложениях, вам необходимо выполнить следующие предварительные действия:
- Добавьте Firebase в ваше приложение iOS .
Чтобы использовать сгенерированный SDK, настройте его как зависимость в Xcode.
В верхней панели навигации Xcode выберите Файл > Добавить зависимости пакета > Добавить локальный и выберите папку, содержащую сгенерированный
Package.swift
.
Затем:
- Разработайте схему своего приложения.
Настройте генерацию SDK:
- С кнопкой «Добавить SDK в приложение» в нашем расширении Data Connect VS Code
- Обновив ваш
connector.yaml
Настройте и используйте эмулятор Data Connect и повторите попытку.
Создайте свой Swift SDK
Используйте Firebase CLI для настройки SDK, сгенерированных Data Connect , в ваших приложениях. Команда init
должна обнаружить все приложения в текущей папке и автоматически установить сгенерированные SDK.
firebase init dataconnect:sdk
Обновляйте SDK во время создания прототипа
Если у вас установлено расширение Data Connect VS Code, оно всегда будет поддерживать сгенерированные SDK в актуальном состоянии.
Если вы не используете расширение Data Connect VS Code, вы можете использовать Firebase CLI для поддержания сгенерированных SDK в актуальном состоянии.
firebase dataconnect:sdk:generate --watch
Генерация SDK в конвейерах сборки
Вы можете использовать Firebase CLI для генерации Data Connect SDK в процессах сборки CI/CD.
firebase dataconnect:sdk:generate
Инициализируйте Data Connect iOS SDK
Инициализируйте свой экземпляр Data Connect используя информацию, которую вы использовали для настройки Data Connect (все доступно на вкладке Data Connect консоли Firebase ).
Получение экземпляра коннектора
Код для вашего коннектора будет сгенерирован эмулятором Data Connect . Если имя вашего коннектора — movies
, а пакет — movies
, как указано в connector.yaml
, извлеките объект коннектора, вызвав:
let connector = DataConnect.moviesConnector
Реализация запросов и мутаций
С помощью объекта-коннектора вы можете выполнять запросы и мутации, как определено в исходном коде 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
}
}
Затем вы можете создать фильм следующим образом:
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)")
Для получения фильма используется ссылка запроса. Все ссылки запроса являются издателями Observable. В зависимости от настроенного издателя (см. connector.yaml)
, они либо поддерживают макрос @Observable
(iOS 17+), либо реализуют протокол ObservableObject
. Если не указано иное, по умолчанию используется макрос @Observable
поддерживаемый в iOS 17+.
В представлении SwiftUI вы можете привязать результаты запроса, используя переменную published data
ссылки запроса, и вызвать метод execute()
запроса для обновления данных. Переменная data
будет соответствовать форме данных, указанной в определении запроса GQL.
Все полученные результаты соответствуют протоколу Decodable
. Если вы включили первичный ключ объекта в выборку GQL, объекты также будут Identifiable
, что позволит использовать их в итераторах.
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()
}
}
Запросы также поддерживают однократное выполнение.
let resultData = try await DataConnect.moviesConnector.listMoviesByGenreQuery.execute(genre: "Sci-Fi")
Обработка изменений в полях перечисления
Схема приложения может содержать перечисления , к которым можно получить доступ с помощью запросов GraphQL .
По мере изменения дизайна приложения вы можете добавлять новые поддерживаемые значения перечисления. Например, представьте, что на поздней стадии жизненного цикла приложения вы решили добавить значение FULLSCREEN в перечисление AspectRatio
.
В рабочем процессе Data Connect вы можете использовать локальные инструменты разработки для обновления своих запросов и SDK.
Однако до того, как вы выпустите обновленную версию своих клиентов, старые развернутые клиенты могут выйти из строя.
Пример устойчивой реализации
Сгенерированный SDK принудительно обрабатывает неизвестные значения, поскольку сгенерированные перечисления содержат значение _UNKNOWN
, а Swift применяет исчерпывающие операторы switch.
do {
let result = try await DataConnect.moviesConnector.listMovies.execute()
if let data = result.data {
for movie in data.movies {
switch movie.aspectratio {
case .ACADEMY: print("academy")
case .WIDESCREEN: print("widescreen")
case .ANAMORPHIC: print("anamorphic")
case ._UNKNOWN(let unknownAspect): print(unknownAspect)
}
}
}
} catch {
// handle error
}
Создайте прототип и протестируйте свое приложение iOS
Клиенты инструмента используют локальный эмулятор
Вы можете использовать эмулятор Data Connect как из расширения Data Connect VS Code, так и из CLI.
Настройка приложения для подключения к эмулятору одинакова для обоих сценариев.
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
Типы данных в SDK Data Connect
Сервер Data Connect поддерживает стандартные и пользовательские типы данных GraphQL. В SDK они представлены следующим образом.
Тип подключения данных | Быстрый |
---|---|
Нить | Нить |
Инт | Инт |
Плавать | Двойной |
Булевое значение | Бул |
UUID | UUID |
Дата | FirebaseDataConnect.LocalDate |
Метка времени | FirebaseCore.Timestamp |
Int64 | Int64 |
Любой | FirebaseDataConnect.AnyValue |