Firebase Data Connect 客户端 SDK,您可以直接从 Firebase 应用调用服务器端查询和 变更。在设计要部署到 服务的架构、查询和变更时,您可以并行生成自定义客户端 SDK。Data Connect然后,您可以将此 SDK 中的方法集成到 客户端逻辑中。
正如我们在其他地方提到的,请务必注意,Data Connect 查询和变更不是由客户端代码提交并在 服务器上执行的。相反,部署后,Data Connect 操作会像 Cloud Functions 一样存储在 服务器上。这意味着,您需要部署相应的 客户端更改,以避免影响现有用户(例如,使用旧版应用 的用户)。
因此,Data Connect 为您提供了一个开发者环境和 工具,让您可以对服务器部署的架构、查询和变更进行原型设计。 它还会在您进行原型设计时自动生成客户端 SDK。
当您迭代更新服务和客户端应用后,服务器端和 客户端更新都可以部署了。
什么是客户端开发工作流?
如果您已完成“开始使用”部分,则应该已经 了解 Data Connect 的整体开发流程。在本 指南中,您将找到有关从 架构生成 Swift SDK 以及使用客户端查询和变更的更详细信息。
总而言之,如需在客户端应用中使用生成的 Swift SDK,您需要执行以下 前提步骤:
- 将 Firebase 添加到您的 iOS 应用。
如需使用生成的 SDK,请在 Xcode 中将其配置为依赖项。
在 Xcode 顶部导航栏中,依次选择 File > Add Package Dependencies > Add Local,然后选择包含生成的
Package.swift的文件夹。
然后:
- 开发应用架构。
设置 SDK 生成:
- 使用 Data Connect VS Code 扩展程序中的将 SDK 添加到应用 按钮
- 通过 更新您的
connector.yaml
设置和使用 Data Connect 模拟器 并 进行迭代。
生成 Swift SDK
使用 Firebase CLI 在应用中设置 Data Connect 生成的 SDK。
init 命令应检测当前文件夹中的所有应用并自动安装
生成的 SDK。
firebase init dataconnect:sdk
在原型设计期间更新 SDK
如果您安装了 Data Connect VS Code 扩展程序,它将始终使生成的 SDK 保持最新状态。
如果您不使用 Data Connect VS Code 扩展程序,则可以使用 Firebase CLI 使生成的 SDK 保持最新状态。
firebase dataconnect:sdk:generate --watch在 build 流水线中生成 SDK
您可以使用 Firebase CLI 在 CI/CD build 流程中生成 Data Connect SDK。
firebase dataconnect:sdk:generate初始化 Data Connect iOS SDK
使用您用于设置 Data Connect 的信息初始化您的 Data Connect 实例(所有信息都可以在 Firebase 控制台的 Data Connect 标签页中找到)。
获取连接器实例
连接器的代码将由
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 协议。如果不指定任何发布者,则默认使用 iOS 17+ 上支持的
@Observable 宏。
在 SwiftUI 视图中,您可以使用查询引用的已发布 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
Data Connect SDK 中的数据类型
Data Connect 服务器表示常见和自定义 GraphQL 数据 类型。这些类型在 SDK 中表示如下。
| Data Connect 类型 | Swift |
|---|---|
| 字符串 | String |
| 整数 | Int |
| 浮点数 | Double |
| 布尔值 | Bool |
| UUID | UUID |
| 日期 | FirebaseDataConnect.LocalDate |
| 时间戳 | FirebaseCore.Timestamp |
| Int64 | Int64 |
| 不限 | FirebaseDataConnect.AnyValue |