使用產生的 Android SDK

Firebase Data Connect 用戶端 SDK 可讓您直接從 Firebase 應用程式呼叫伺服器端查詢和變異。您可以同時產生自訂用戶端 SDK,同時設計要部署至 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 中新增 outputDirpackage 和 (適用於網頁 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 檔案時自動產生及更新。在熱 (重新載入) 的工作流程中,這項功能非常實用。

在其他情況下,如果您是透過 Firebase CLI 使用 Data Connect 模擬器,可以設定 .gql 更新的監控,並自動更新 SDK 來源。

或者,您也可以在 .gql 檔案變更時,使用 CLI 重新產生 SDK:

firebase dataconnect:sdk:generate --watch

產生 SDK 以便整合及發布正式版本

在某些情況下,例如為 CI 測試準備專案來源 可以呼叫 Firebase CLI 來進行批次更新

在這種情況下,請使用 firebase dataconnect:sdk:generate

設定用戶端程式碼

Data Connect 納入用戶端程式碼

如要將用戶端程式碼設為使用 Data Connect 和產生的 SDK, 首先遵循 標準 Firebase 設定操作說明

接著,在 app/build.gradle.ktsplugins 部分中新增以下內容:

// 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.ktsdependencies 部分中新增以下內容:

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 時所用的資訊 (所有資訊皆可在 Firebase 控制台的「Data Connect」分頁中找到),初始化 Data Connect 執行個體。

ConnectorConfig 物件

SDK 需要連接器設定物件。

這個物件會從 dataconnect.yaml 中的 serviceIdlocation,以及 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 應用程式

檢測用戶端使用本機模擬器

您可以使用 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 中會如下所示。

資料連結類型 Kotlin
字串 字串
整數值 Int (32 位元)
浮點值 雙精度浮點值 (64 位元浮點值)
布林值 布林值
UUID java.util.UUID
日期 java.util.Date
時間戳記 com.google.firebase.Timestamp
Int64
不限 com.google.firebase.dataconnect.AnyValue