ใช้ iOS SDK ที่สร้างขึ้น

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 ที่กําหนดสคีมา การค้นหา และการดัดแปลง ซึ่งอาจเป็นฟีเจอร์ที่มีประโยชน์ในเวิร์กโฟลว์การโหลด (ซ้ำ) อย่างรวดเร็ว

ในกรณีอื่นๆ หากคุณใช้โปรแกรมจำลอง Data Connect จาก CLI ของ Firebase คุณสามารถตั้งค่าการติดตามการอัปเดต .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 โดยใช้ข้อมูลที่คุณใช้ตั้งค่า Data Connect (มีทั้งหมดในแท็บ 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