Firebase Data Connect 用戶端 SDK 可讓您直接從 Firebase 應用程式呼叫伺服器端查詢和變動。設計要部署至 Data Connect 服務的結構定義、查詢和變動時,您可以平行產生自訂用戶端 SDK。然後將這個 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 擴充功能的「Add SDK to app」(將 SDK 新增至應用程式) 按鈕
- 更新
connector.yaml
設定及使用 Data Connect 模擬器,並進行疊代。
產生 Swift SDK
使用 Firebase CLI 在應用程式中設定產生的 SDK。Data Connectinit
指令應會偵測目前資料夾中的所有應用程式,並自動安裝產生的 SDK。
firebase init dataconnect:sdk
在原型設計期間更新 SDK
如果您已安裝 Data Connect VS Code 擴充功能,系統一律會將產生的 SDK 維持在最新狀態。
如果您未使用 Data Connect VS Code 擴充功能,可以透過 Firebase CLI 讓產生的 SDK 維持最新狀態。
firebase dataconnect:sdk:generate --watch
在建構管道中產生 SDK
您可以在 CI/CD 建構程序中使用 Firebase CLI,產生 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 會強制執行詳盡的切換陳述式。
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 中的表示方式如下。
資料連結類型 | Swift |
---|---|
字串 | 字串 |
整數值 | 整數值 |
浮點值 | 雙人床 |
布林值 | 布林值 |
UUID | UUID |
日期 | FirebaseDataConnect.LocalDate |
時間戳記 | FirebaseCore.Timestamp |
Int64 | Int64 |
不限 | FirebaseDataConnect.AnyValue |