ใช้ 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 จาก Firebase CLI คุณสามารถตั้งค่านาฬิกาสำหรับการอัปเดต .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