SDK ของไคลเอ็นต์ Firebase Data Connect ช่วยให้คุณเรียกใช้การค้นหาและการดัดแปลงฝั่งเซิร์ฟเวอร์ได้โดยตรงจากแอป Firebase คุณสามารถสร้าง SDK ของไคลเอ็นต์ที่กําหนดเองควบคู่ไปกับการออกแบบสคีมา การค้นหา และการดัดแปลงที่จะติดตั้งใช้งานในบริการ Data Connect จากนั้นผสานรวมเมธอดจาก SDK นี้เข้ากับตรรกะไคลเอ็นต์
ดังที่ได้กล่าวไว้ก่อนหน้านี้ โปรดทราบว่าData Connect โค้ดไคลเอ็นต์ไม่ได้ส่งการค้นหาและการดัดแปลง และไม่ได้ดำเนินการบนเซิร์ฟเวอร์ แต่เมื่อทำให้ใช้งานได้แล้ว ระบบจะเก็บการดำเนินการ Data Connect ไว้ในเซิร์ฟเวอร์ เช่น Cloud Functions ซึ่งหมายความว่าคุณต้องทําการเปลี่ยนแปลงฝั่งไคลเอ็นต์ที่เกี่ยวข้องเพื่อไม่ให้ผู้ใช้เดิมได้รับผลกระทบ (เช่น ในแอปเวอร์ชันเก่า)
ด้วยเหตุนี้ Data Connect จึงมีสภาพแวดล้อมของนักพัฒนาซอฟต์แวร์และเครื่องมือที่ช่วยให้คุณสร้างต้นแบบสคีมา การค้นหา และการดัดแปลงที่ติดตั้งใช้งานบนเซิร์ฟเวอร์ได้ นอกจากนี้ ยังสร้าง SDK ฝั่งไคลเอ็นต์โดยอัตโนมัติขณะที่คุณสร้างต้นแบบด้วย
เมื่อคุณอัปเดตบริการและแอปไคลเอ็นต์ซ้ำแล้ว การอัปเดตทั้งฝั่งเซิร์ฟเวอร์และฝั่งไคลเอ็นต์ก็พร้อมที่จะทำให้ใช้งานได้แล้ว
สร้าง Swift SDK
เช่นเดียวกับโปรเจ็กต์ Firebase ส่วนใหญ่ การทำงานกับโค้ดFirebase Data Connectไคลเอ็นต์จะทําในไดเรกทอรีโปรเจ็กต์ในเครื่อง ทั้งส่วนขยาย Data Connect ใน VS Code และ Firebase CLI เป็นเครื่องมือที่สำคัญในเครื่องสำหรับสร้างและจัดการโค้ดไคลเอ็นต์
ตัวเลือกการสร้าง SDK จะเชื่อมโยงกับรายการต่างๆ ในdataconnect.yaml
ไฟล์ที่สร้างเมื่อคุณเริ่มต้นโปรเจ็กต์
เริ่มต้นการสร้าง SDK
ในconnector.yaml
ให้เพิ่ม outputDir
, package
และ (สำหรับ SDK ของเว็บ)
packageJsonDir
connectorId: "movies"
generate:
swiftSdk:
outputDir: "../movies-generated"
package: "Movies"
outputDir
ระบุว่า SDK ที่สร้างควรแสดงผลที่ใด หากไม่ได้ระบุ ระบบจะใช้โฟลเดอร์เครื่องมือเชื่อมต่อเป็นไดเรกทอรีเอาต์พุตเริ่มต้น
package
ระบุชื่อแพ็กเกจที่จะสร้างขึ้น ตัวสร้างจะสร้างโฟลเดอร์ที่มีชื่อของแพ็กเกจ ซึ่งมี Package.swift
และโค้ดที่สร้างขึ้น
observablePublisher
(ไม่บังคับ) ระบุผู้เผยแพร่โฆษณา Observable ที่จะใช้ในข้อมูลอ้างอิงการค้นหา ค่าที่เป็นไปได้คือ observableMacro
(iOS 17 ขึ้นไป) และ observableObject
(ก่อน iOS 17) ค่าเริ่มต้น (หากไม่ได้ระบุ) คือ observableMacro
อัปเดต SDK ขณะสร้างต้นแบบ
หากคุณกำลังสร้างต้นแบบแบบอินเทอร์แอกทีฟด้วยส่วนขยาย Data Connect VS Code และโปรแกรมจำลอง Data Connect ระบบจะสร้างและอัปเดตไฟล์ต้นฉบับ SDK โดยอัตโนมัติขณะที่คุณแก้ไขไฟล์ .gql
ที่กำหนดสคีมา การค้นหา และการกลายพันธุ์ ซึ่งอาจเป็นฟีเจอร์ที่มีประโยชน์ในเวิร์กโฟลว์การโหลด (ซ้ำ) อย่างรวดเร็ว
.gql
และมีการอัปเดตแหล่งที่มาของ SDK โดยอัตโนมัติได้ด้วย
หรือจะใช้ CLI เพื่อสร้าง SDK อีกครั้งทุกครั้งที่มีการเปลี่ยนแปลงไฟล์ .gql ก็ได้ โดยทำดังนี้
firebase dataconnect:sdk:generate --watch
สร้าง SDK สำหรับการผสานรวมและสำหรับรุ่นที่ใช้งานจริง
ในบางกรณี เช่น การเตรียมแหล่งที่มาของโปรเจ็กต์เพื่อส่งเข้ารับการทดสอบ CI คุณสามารถเรียกใช้ Firebase CLI เพื่ออัปเดตแบบเป็นกลุ่มได้
ในกรณีเหล่านี้ ให้ใช้ firebase dataconnect:sdk:generate
ตั้งค่ารหัสไคลเอ็นต์
หากต้องการตั้งค่าโค้ดไคลเอ็นต์ให้ใช้ Data Connect และ SDK ที่สร้างขึ้น ให้ทําตามวิธีการตั้งค่า Firebase มาตรฐานก่อน
จากนั้นเปิดพื้นที่ทํางานของแอปโดยใช้ Xcode
ในแถบนําทางด้านบน ให้เลือกไฟล์ > เพิ่ม Package Dependency > เพิ่มจากในเครื่อง แล้วเลือกโฟลเดอร์ที่มีไฟล์Package.swift
ต้นฉบับที่สร้างขึ้น
เริ่มต้น Data Connect iOS SDK
เริ่มต้นอินสแตนซ์ 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)")
หากต้องการเรียกข้อมูลภาพยนตร์ คุณจะใช้ข้อมูลอ้างอิงการค้นหา การอ้างอิงคำค้นหาทั้งหมด
คือผู้เผยแพร่ที่สังเกตได้ โดยขึ้นอยู่กับผู้เผยแพร่โฆษณาที่กําหนดค่าไว้ (ดู connector.yaml)
) ผู้ใช้อาจรองรับมาโคร @Observable
(iOS 17 ขึ้นไป) หรือใช้โปรโตคอล ObservableObject
ค่าเริ่มต้น (หากไม่ได้ระบุ) คือมาโคร @Observable
ที่รองรับใน iOS 17 ขึ้นไป
ในมุมมอง 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")
สร้างต้นแบบและทดสอบแอปพลิเคชัน iOS
ไคลเอ็นต์ที่จะใช้โปรแกรมจำลองภายในเครื่อง
คุณสามารถใช้โปรแกรมจำลอง Data Connect ได้จากส่วนขยาย Data Connect ใน VS Code หรือจาก CLI
เครื่องมือวัดผลแอปเพื่อเชื่อมต่อกับโปรแกรมจําลองจะเหมือนกันทั้ง 2 สถานการณ์
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 ดังนี้
ประเภทการเชื่อมต่อข้อมูล | Swift |
---|---|
สตริง | สตริง |
Int | Int |
ทศนิยม | เตียงคู่ |
บูลีน | Bool |
UUID | UUID |
วันที่ | FirebaseDataConnect.LocalDate |
การประทับเวลา | FirebaseCore.Timestamp |
Int64 | Int64 |
เวลาใดก็ได้ | FirebaseDataConnect.AnyValue |