जनरेट किए गए iOS SDK टूल इस्तेमाल करना

Firebase Data Connect क्लाइंट SDK टूल की मदद से, सीधे Firebase ऐप्लिकेशन से अपनी सर्वर-साइड क्वेरी और बदलावों को कॉल किया जा सकता है. साथ ही, अपनी Data Connect सेवा में डिप्लॉय किए जाने वाले स्कीमा, क्वेरी, और बदलावों को डिज़ाइन करते समय, एक कस्टम क्लाइंट SDK टूल भी जनरेट किया जा सकता है. इसके बाद, इस SDK टूल के तरीकों को अपने क्लाइंट लॉजिक में इंटिग्रेट किया जाता है.

जैसा कि हमने कहीं और बताया है, यह ध्यान रखना ज़रूरी है कि Data Connect क्वेरी और म्यूटेशन, क्लाइंट कोड से सबमिट नहीं किए जाते और उन्हें सर्वर पर चलाया जाता है. इसके बजाय, डिप्लॉय होने पर, Data Connect ऑपरेशन को Cloud Functions जैसे सर्वर पर सेव किया जाता है. इसका मतलब है कि आपको मौजूदा उपयोगकर्ताओं को ऐप्लिकेशन के पुराने वर्शन पर काम करने से रोकने के लिए, क्लाइंट-साइड में बदलाव करने होंगे.

इसी वजह से, Data Connect आपको एक डेवलपर एनवायरमेंट और ऐसा टूल मुहैया कराता है जिसकी मदद से, सर्वर से डिप्लॉय किए गए स्कीमा, क्वेरी, और म्यूटेशन को प्रोटोटाइप किया जा सकता है. प्रोटोटाइप बनाते समय, यह क्लाइंट-साइड SDK भी अपने-आप जनरेट करता है.

अपनी सेवा और क्लाइंट ऐप्लिकेशन में अपडेट करने के बाद, सर्वर- और क्लाइंट-साइड, दोनों अपडेट डिप्लॉय करने के लिए तैयार हो जाते हैं.

अपना Swift SDK टूल जनरेट करना

ज़्यादातर Firebase प्रोजेक्ट की तरह ही, आपके Firebase Data Connect क्लाइंट कोड पर काम करने की प्रोसेस लोकल प्रोजेक्ट डायरेक्ट्री में होती है. क्लाइंट कोड जनरेट करने और मैनेज करने के लिए, Data Connect VS Code एक्सटेंशन और Firebase CLI, दोनों ही स्थानीय टूल अहम हैं.

एसडीके जनरेशन के विकल्प, 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 एमुलेटर की मदद से इंटरैक्टिव तरीके से प्रोटोटाइप बनाया जा रहा है, तो स्कीमा, क्वेरी, और म्यूटेशन तय करने वाली .gql फ़ाइलों में बदलाव करने पर, SDK टूल की सोर्स फ़ाइलें अपने-आप जनरेट और अपडेट हो जाती हैं. यह हॉट (फिर से) लोड होने वाले वर्कफ़्लो में एक मददगार सुविधा हो सकती है.

अन्य मामलों में, अगर Firebase सीएलआई से Data Connect एमुलेटर का इस्तेमाल किया जा रहा है, तो .gql अपडेट पर वॉच सेट की जा सकती है. साथ ही, SDK टूल के सोर्स अपने-आप अपडेट हो सकते हैं.

इसके अलावा, .gql फ़ाइलों में बदलाव होने पर, SDK टूल फिर से जनरेट करने के लिए, CLI का इस्तेमाल किया जा सकता है:

firebase dataconnect:sdk:generate --watch

इंटिग्रेशन और प्रोडक्शन रिलीज़ के लिए SDK टूल जनरेट करें

कुछ मामलों में, जैसे कि सीआई टेस्ट के लिए सबमिट करने के लिए प्रोजेक्ट सोर्स तैयार करना, एक साथ कई अपडेट करने के लिए Firebase सीएलआई को कॉल किया जा सकता है.

ऐसे मामलों में, firebase dataconnect:sdk:generate का इस्तेमाल करें.

क्लाइंट कोड सेट अप करना

Data Connect और जनरेट किए गए SDK टूल का इस्तेमाल करने के लिए, अपना क्लाइंट कोड सेट अप करने के लिए, पहले Firebase सेट अप करने के स्टैंडर्ड निर्देशों का पालन करें.

इसके बाद, Xcode का इस्तेमाल करके अपने ऐप्लिकेशन का फ़ाइल फ़ोल्डर खोलें.

सबसे ऊपर मौजूद नेविगेशन बार में, फ़ाइल > पैकेज की डिपेंडेंसी जोड़ें > स्थानीय जोड़ें को चुनें. इसके बाद, जनरेट की गई Package.swift सोर्स फ़ाइल वाला फ़ोल्डर चुनें.

Data Connect iOS SDK टूल को शुरू करना

Data Connect को सेट अप करने के लिए इस्तेमाल की गई जानकारी का इस्तेमाल करके, अपने Data Connect इंस्टेंस को शुरू करें. यह जानकारी, Firebase कंसोल के Data Connect टैब में उपलब्ध है.

कनेक्टर इंस्टेंस पाना

आपके कनेक्टर का कोड, Data Connect एमुलेटर जनरेट करेगा. अगर आपके कनेक्टर का नाम movies है और connector.yaml में बताए गए तरीके के मुताबिक पैकेज movies है, तो कॉल करके कनेक्टर ऑब्जेक्ट वापस पाएं:

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 प्रोटोकॉल को लागू करते हैं. अगर कोई मैक्रो नहीं चुना गया है, तो डिफ़ॉल्ट रूप से 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")

अपने iOS ऐप्लिकेशन का प्रोटोटाइप बनाना और उसे टेस्ट करना

लोकल एमुलेटर का इस्तेमाल करने के लिए क्लाइंट को इंस्ट्रूमेंट करना

Data Connect एमुलेटर का इस्तेमाल, Data Connect VS Code एक्सटेंशन या सीएलआई, दोनों से किया जा सकता है.

दोनों स्थितियों में, ऐप्लिकेशन को एम्युलेटर से कनेक्ट करने के लिए, इंस्ट्रूमेंट करने का तरीका एक जैसा है.

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 डेटा टाइप दिखाता है. इन्हें एसडीके टूल में इस तरह दिखाया जाता है.

Data Connect का टाइप Swift
स्ट्रिंग स्ट्रिंग
Int Int
फ़्लोट डबल-साइज़ बेड
बूलियन बूल
यूयूआईडी यूयूआईडी
तारीख FirebaseDataConnect.LocalDate
टाइमस्टैंप FirebaseCore.Timestamp
Int64 Int64
कोई भी FirebaseDataConnect.AnyValue