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

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

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

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

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

क्लाइंट डेवलपमेंट वर्कफ़्लो क्या है?

अगर आपने शुरू करें सेक्शन में दिए गए निर्देशों का पालन किया है, तो आपको SQL Connect के लिए डेवलपमेंट के पूरे फ़्लो के बारे में जानकारी मिल गई होगी. इस गाइड में, आपको अपने स्कीमा से Android SDK जनरेट करने और क्लाइंट क्वेरी और म्यूटेशन के साथ काम करने के बारे में ज़्यादा जानकारी मिलेगी.

संक्षेप में, अपने क्लाइंट ऐप्लिकेशन में जनरेट किए गए Android SDK टूल इस्तेमाल करने के लिए, आपको ये ज़रूरी कदम उठाने होंगे:

  1. अपने Android ऐप्लिकेशन में Firebase जोड़ें.
  2. Gradle में SQL Connect को डिपेंडेंसी के तौर पर कॉन्फ़िगर करें.
  3. Kotlin Serialization Gradle प्लगिन और Gradle डिपेंडेंसी जोड़ें.

इसके बाद:

  1. अपने ऐप्लिकेशन का स्कीमा डेवलप करें.
  2. एसडीके जनरेशन सेट अप करना:

  3. अपने क्लाइंट कोड को शुरू करें और लाइब्रेरी इंपोर्ट करें.

  4. क्वेरी और म्यूटेशन के लिए कॉल लागू करें.

  5. SQL Connect एम्युलेटर को सेट अप करें और उसका इस्तेमाल करें. इसके बाद, दोबारा कोशिश करें.

Kotlin SDK जनरेट करना

अपने ऐप्लिकेशन में SQL Connect से जनरेट किए गए एसडीके टूल सेट अप करने के लिए, Firebase सीएलआई का इस्तेमाल करें. init कमांड को मौजूदा फ़ोल्डर में मौजूद सभी ऐप्लिकेशन का पता लगाना चाहिए और जनरेट किए गए एसडीके टूल अपने-आप इंस्टॉल करने चाहिए.

firebase init dataconnect:sdk

प्रोटोटाइप बनाते समय एसडीके अपडेट करना

अगर आपके पास SQL Connect VS Code एक्सटेंशन इंस्टॉल है, तो यह जनरेट किए गए एसडीके को हमेशा अप-टू-डेट रखेगा.

अगर SQL Connect VS Code एक्सटेंशन का इस्तेमाल नहीं किया जाता है, तो जनरेट किए गए SDK टूल को अप-टू-डेट रखने के लिए, Firebase CLI का इस्तेमाल किया जा सकता है.

firebase dataconnect:sdk:generate --watch

बिल्ड पाइपलाइन में एसडीके जनरेट करना

सीआई/सीडी बिल्ड प्रोसेस में SQL Connect SDK टूल जनरेट करने के लिए, Firebase CLI का इस्तेमाल किया जा सकता है.

firebase dataconnect:sdk:generate

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

SQL Connect को अपने क्लाइंट कोड में शामिल करें

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

इसके बाद, app/build.gradle.kts में plugins सेक्शन में यह जोड़ें:

// The Firebase team tests with version 1.8.22; however, other 1.8 versions,
// and all newer versions are expected work too.
kotlin("plugin.serialization") version "1.8.22" // MUST match the version of the Kotlin compiler

इसके बाद, app/build.gradle.kts में dependencies सेक्शन में यह जोड़ें:

implementation(platform("com.google.firebase:firebase-bom:35.0.1"))
implementation("com.google.firebase:firebase-dataconnect")
implementation("com.google.firebase:firebase-auth") // Optional
implementation("com.google.firebase:firebase-appcheck") // Optional
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3") // Newer versions should work too
implementation("org.jetbrains.kotlinx:kotlinx-serialization-core:1.5.1") // Newer versions should work too

SQL Connect Android SDK टूल को शुरू करना

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

ConnectorConfig ऑब्जेक्ट

एसडीके को कनेक्टर कॉन्फ़िगरेशन ऑब्जेक्ट की ज़रूरत होती है.

यह ऑब्जेक्ट, dataconnect.yaml में serviceId और location से और connector.yaml में connectorId से अपने-आप जनरेट होता है.

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

कॉन्फ़िगरेशन ऑब्जेक्ट सेट अप करने के बाद, SQL Connect कनेक्टर का इंस्टेंस पाएं. आपके कनेक्टर का कोड, SQL Connect एम्युलेटर से जनरेट होगा. अगर आपके कनेक्टर का नाम movies है और Kotlin पैकेज com.myapplication है, जैसा कि connector.yaml में बताया गया है, तो कनेक्टर ऑब्जेक्ट को कॉल करके वापस पाएं:

val connector = com.myapplication.MoviesConnector.instance

अपने Android SDK से क्वेरी और म्यूटेशन का इस्तेमाल करना

कनेक्टर ऑब्जेक्ट की मदद से, 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
  }
}

इसके बाद, इस तरह से मूवी बनाई और वापस पाई जा सकती है:

val connector = MoviesConnector.instance

val addMovieResult1 = connector.createMovie.execute(
  title = "Empire Strikes Back",
  releaseYear = 1980,
  genre = "Sci-Fi",
  rating = 5
)

val movie1 = connector.getMovieByKey.execute(addMovieResult1.data.key)

println("Empire Strikes Back: ${movie1.data.movie}")

एक से ज़्यादा फ़िल्में भी वापस लाई जा सकती हैं:

val connector = MoviesConnector.instance

val addMovieResult2 = connector.createMovie.execute(
  title="Attack of the Clones",
  releaseYear = 2002,
  genre = "Sci-Fi",
  rating = 5
)

val listMoviesResult = connector.listMoviesByGenre.execute(genre = "Sci-Fi")

println(listMoviesResult.data.movies)

Flow को भी इकट्ठा किया जा सकता है. यह सिर्फ़ तब नतीजा देगा, जब क्वेरी के execute() तरीके को कॉल करके, क्वेरी का नया नतीजा हासिल किया जाएगा.

पर जाएं.
val connector = MoviesConnector.instance

connector.listMoviesByGenre.flow(genre = "Sci-Fi").collect { data ->
  println(data.movies)
}

connector.createMovie.execute(
  title="A New Hope",
  releaseYear = 1977,
  genre = "Sci-Fi",
  rating = 5
)

connector.listMoviesByGenre.execute(genre = "Sci-Fi") // will cause the Flow to get notified

रीयलटाइम में होने वाले बदलावों की सदस्यता लेना

SQL Connect से रीयल-टाइम अपडेट पाएं देखें.

एन्यूमरेशन फ़ील्ड में बदलावों को मैनेज करना

किसी ऐप्लिकेशन के स्कीमा में एन्यूमरेशन शामिल हो सकते हैं. इन्हें आपकी GraphQL क्वेरी से ऐक्सेस किया जा सकता है.

ऐप्लिकेशन के डिज़ाइन में बदलाव होने पर, enum के लिए इस्तेमाल की जा सकने वाली नई वैल्यू जोड़ी जा सकती हैं. उदाहरण के लिए, मान लें कि ऐप्लिकेशन के लाइफ़साइकल के दौरान, आपको AspectRatio enum में FULLSCREEN वैल्यू जोड़नी है.

SQL Connect वर्कफ़्लो में, लोकल डेवलपमेंट टूल का इस्तेमाल करके, क्वेरी और एसडीके अपडेट किए जा सकते हैं.

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

लचीले तरीके से लागू करने का उदाहरण

जनरेट किया गया एसडीके, अनजान वैल्यू को हैंडल करने के लिए मजबूर करता है. ऐसा इसलिए, क्योंकि ग्राहक के कोड को EnumValue ऑब्जेक्ट को अनरैप करना होगा. यह ऑब्जेक्ट, enum की जानी-पहचानी वैल्यू के लिए EnumValue.Known या अनजान वैल्यू के लिए EnumValue.Unknown होता है.

val result = connector.listMoviesByAspectRatio.execute(AspectRatio.WIDESCREEN)
val encounteredAspectRatios = mutableSetOf<String>()

result.data.movies
  .mapNotNull { it.otherAspectRatios }
  .forEach { otherAspectRatios ->
    otherAspectRatios
      .filterNot { it.value == AspectRatio.WIDESCREEN }
      .forEach {
        when (it) {
          is EnumValue.Known -> encounteredAspectRatios.add(it.value.name)
          is EnumValue.Unknown ->
            encounteredAspectRatios.add("[unknown ratio: ${it.stringValue}]")
        }
      }
  }

println(
  "Widescreen movies also include additional aspect ratios: " +
    encounteredAspectRatios.sorted().joinToString()
)

क्लाइंट-साइड कैश मेमोरी को चालू करना

SQL Connect में क्लाइंट-साइड कैश मेमोरी की सुविधा उपलब्ध है. इसे इस्तेमाल करना ज़रूरी नहीं है. connector.yaml फ़ाइल में बदलाव करके, इसे चालू किया जा सकता है. इस सुविधा के चालू होने पर, जनरेट किए गए क्लाइंट एसडीके, क्वेरी के जवाबों को स्थानीय तौर पर कैश मेमोरी में सेव करेंगे. इससे आपके ऐप्लिकेशन से किए जाने वाले डेटाबेस अनुरोधों की संख्या कम हो सकती है. साथ ही, नेटवर्क की उपलब्धता में रुकावट आने पर, आपके ऐप्लिकेशन के डेटाबेस पर निर्भर हिस्से काम कर सकते हैं.

क्लाइंट-साइड कैश मेमोरी को चालू करने के लिए, अपने कनेक्टर कॉन्फ़िगरेशन में क्लाइंट कैश मेमोरी कॉन्फ़िगरेशन जोड़ें:

generate:
  kotlinSdk:
    outputDir: "../android"
    package: "com.google.firebase.dataconnect.generated"
    clientCache:
      maxAge: 5s
      storage: persistent

इस कॉन्फ़िगरेशन में दो पैरामीटर होते हैं. दोनों ही पैरामीटर ज़रूरी नहीं हैं:

  • maxAge: क्लाइंट एसडीके के नई वैल्यू फ़ेच करने से पहले, कैश मेमोरी में सेव किए गए रिस्पॉन्स की ज़्यादा से ज़्यादा उम्र. उदाहरण: "0", "30s", "1h30m".

    maxAge की डिफ़ॉल्ट वैल्यू 0 है. इसका मतलब है कि जवाबों को कैश मेमोरी में सेव किया जाता है, लेकिन क्लाइंट एसडीके हमेशा नई वैल्यू फ़ेच करेगा. कैश मेमोरी में सेव की गई वैल्यू का इस्तेमाल सिर्फ़ तब किया जाएगा, जब CACHE_ONLY को execute() पर सेट किया गया हो.

  • storage: क्लाइंट एसडीके को persistent स्टोरेज या memory में जवाबों को कैश मेमोरी में सेव करने के लिए कॉन्फ़िगर किया जा सकता है. persistent स्टोरेज में कैश मेमोरी में सेव किए गए नतीजे, ऐप्लिकेशन को रीस्टार्ट करने पर भी बने रहेंगे. Android SDK टूल में, डिफ़ॉल्ट वैल्यू persistent होती है.

कनेक्टर के कैश मेमोरी कॉन्फ़िगरेशन को अपडेट करने के बाद, अपने क्लाइंट एसडीके फिर से जनरेट करें और अपना ऐप्लिकेशन फिर से बनाएं. ऐसा करने के बाद, execute() आपके कॉन्फ़िगर किए गए नियम के मुताबिक, जवाबों को कैश मेमोरी में सेव करेगा और कैश मेमोरी में सेव की गई वैल्यू का इस्तेमाल करेगा. आम तौर पर, यह प्रोसेस अपने-आप पूरी हो जाती है. इसके लिए, आपको कुछ नहीं करना पड़ता. हालांकि, इन बातों का ध्यान रखें:

  • execute() का डिफ़ॉल्ट व्यवहार ऊपर बताया गया है: अगर किसी क्वेरी के लिए नतीजा कैश मेमोरी में सेव किया जाता है और कैश मेमोरी में सेव की गई वैल्यू maxAge से पुरानी नहीं है, तो कैश मेमोरी में सेव की गई वैल्यू का इस्तेमाल करें. इस डिफ़ॉल्ट ऐक्शन और सेटिंग को PREFER_CACHE नीति कहा जाता है.

    execute() के अलग-अलग इन्वोकेशन के लिए, यह भी तय किया जा सकता है कि सिर्फ़ कैश मेमोरी में सेव की गई वैल्यू (CACHE_ONLY) दिखाई जाएं या सर्वर से बिना किसी शर्त के नई वैल्यू (SERVER_ONLY) फ़ेच की जाएं.

    val queryResult = queryRef.execute(QueryRef.FetchPolicy.CACHE_ONLY)
    
    val queryResult = queryRef.execute(QueryRef.FetchPolicy.SERVER_ONLY)
    

    अपने Android ऐप्लिकेशन का प्रोटोटाइप बनाना और उसकी जांच करना

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

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

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

    val connector = MoviesConnector.instance
    
    // Connect to the emulator on "10.0.2.2:9399"
    connector.dataConnect.useEmulator()
    
    // (alternatively) if you're running your emulator on non-default port:
    connector.dataConnect.useEmulator(port = 9999)
    
    // Make calls from your app
    
    

    प्रोडक्शन रिसॉर्स पर स्विच करने के लिए, एम्युलेटर से कनेक्ट करने वाली लाइनों को टिप्पणी के तौर पर मार्क करें.

    SQL Connect एसडीके टूल में एसक्यूएल टाइप

    SQL Connect सर्वर, सामान्य और कस्टम GraphQL डेटा टाइप दिखाता है. इन्हें एसडीके में इस तरह दिखाया जाता है.

    SQL Connect टाइप Kotlin
    स्ट्रिंग स्ट्रिंग
    Int इंट (32-बिट इंटिजर)
    फ़्लोट डबल (64-बिट फ़्लोट)
    बूलियन बूलियन
    यूयूआईडी java.util.UUID
    तारीख com.google.firebase.dataconnect.LocalDate (16.0.0-beta03 तक java.util.Date था)
    टाइमस्टैम्प com.google.firebase.Timestamp
    Int64 ज़्यादा समय के लिए
    कोई भी com.google.firebase.dataconnect.AnyValue