借助 Firebase Data Connect 客户端 SDK,您可以调用服务器端查询和 直接使用 Firebase 应用进行变更。从 Cloud Shell 中 在设计要部署到数据库的架构、查询和更改时, Data Connect 服务。然后,将此 SDK 中的方法集成到您的客户端逻辑中。
正如我们在其他地方提到的,需要注意的是,Data Connect 查询和变更不是由客户端代码提交, 服务器。而是在部署后将 Data Connect 操作存储在 如 Cloud Functions也就是说,您需要部署 客户端更改以避免破坏现有用户(例如,在旧版应用中) 版本)。
因此,Data Connect为您提供了开发者环境 一种工具,用于对服务器部署的架构、查询和变更进行原型设计。 在您进行原型设计时,它还会自动生成客户端 SDK。
在对服务和客户端应用进行迭代更新后,服务器和 即可部署客户端更新
生成 Kotlin SDK
与大多数 Firebase 项目一样,Firebase Data Connect 客户端代码的工作在本地项目目录中进行。 Data Connect VS Code 扩展程序和 Firebase CLI 是重要的本地文件 用于生成和管理客户端代码的工具。
SDK 生成选项的键值对应于您在初始化项目时生成的 dataconnect.yaml
文件中的多个条目。
初始化 SDK 生成
在connector.yaml
中,添加 outputDir
、package
和(适用于 Web 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 源代码。
或者,您也可以在 .gql 文件发生更改时使用 CLI 重新生成 SDK:
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
然后,将以下代码添加到 app/build.gradle.kts
中的 dependencies
部分:
implementation("com.google.firebase:firebase-dataconnect:16.0.0-beta01")
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.0.0") // Optional
implementation("com.google.firebase:firebase-appcheck:18.0.0") // Optional
初始化 Data Connect Android SDK
使用您设置 Data Connect 时所用的信息初始化 Data Connect 实例(所有信息均可在 Firebase 控制台的“Data Connect”标签页中找到)。
ConnectorConfig 对象
SDK 需要连接器配置对象。
此对象由 dataconnect.yaml
中的 serviceId
和 location
,以及 connector.yaml
中的 connectorId
自动生成。
获取连接器实例
现在,您已经设置了配置对象,接下来,请获取 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 应用进行原型设计和测试
对客户端进行插桩 (instrument) 处理以使用本地模拟器
您可以使用 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 中的表示方式如下。
Data Connect 类型 | Kotlin |
---|---|
字符串 | 字符串 |
整数 | Int(32 位) |
浮点数 | 双精度(64 位浮点数) |
布尔值 | 布尔值 |
UUID | java.util.UUID 中 |
日期 | java.util.Date |
时间戳 | com.google.firebase.Timestamp |
Int64 | 长 |
不限 | com.google.firebase.dataconnect.AnyValue |