अपना ऐप्लिकेशन कनेक्ट करें और प्रोटोटाइप बनाना शुरू करें


Firebase Local Emulator Suite का इस्तेमाल शुरू करने से पहले, पक्का करें कि आपने Firebase प्रोजेक्ट बना लिया हो और डेवलपमेंट एनवायरमेंट सेट अप कर लिया हो. साथ ही, अपने प्लैटफ़ॉर्म के लिए Firebase SDK टूल चुनकर इंस्टॉल कर लिए हों. इसके लिए, अपने प्लैटफ़ॉर्म के हिसाब से Firebase का इस्तेमाल शुरू करें विषय देखें: Apple, Android या वेब.

प्रोटोटाइप बनाना और परफ़ॉर्मेंस की जांच करना

Local Emulator Suite में कई प्रॉडक्ट एम्युलेटर होते हैं. इनके बारे में Firebase Local Emulator Suite के बारे में जानकारी लेख में बताया गया है. आपके पास अलग-अलग एम्युलेटर के साथ-साथ, एम्युलेटर के कॉम्बिनेशन के साथ प्रोटोटाइप बनाने और टेस्ट करने का विकल्प होता है. इसके लिए, आपको यह देखना होगा कि प्रोडक्शन में कौनसे Firebase प्रॉडक्ट इस्तेमाल किए जा रहे हैं.

Firebase डेटाबेस और फ़ंक्शन एम्युलेटर के बीच इंटरैक्शन
डेटाबेस और Cloud Functions एम्युलेटर, पूरे Local Emulator Suite का हिस्सा हैं.

इस विषय के लिए, Local Emulator Suite वर्कफ़्लो को पेश करने के लिए, मान लें कि आप किसी ऐसे ऐप्लिकेशन पर काम कर रहे हैं जो प्रॉडक्ट के सामान्य कॉम्बिनेशन का इस्तेमाल करता है: Firebase डेटाबेस और उस डेटाबेस पर होने वाली कार्रवाइयों से ट्रिगर होने वाले Cloud Functions.

अपने Firebase प्रोजेक्ट को स्थानीय तौर पर शुरू करने के बाद, Local Emulator Suite का इस्तेमाल करके डेवलपमेंट साइकल में आम तौर पर तीन चरण होंगे:

  1. एम्युलेटर और Emulator Suite UI की मदद से, सुविधाओं के प्रोटोटाइप को इंटरैक्टिव तरीके से टेस्ट करें.

  2. अगर डेटाबेस एम्युलेटर या Cloud Functions एम्युलेटर का इस्तेमाल किया जा रहा है, तो अपने ऐप्लिकेशन को एम्युलेटर से कनेक्ट करने के लिए, यह तरीका अपनाएं. आपको यह तरीका सिर्फ़ एक बार अपनाना होगा.

  3. एम्युलेटर और कस्टम स्क्रिप्ट की मदद से, अपने टेस्ट अपने-आप होने की सुविधा पाएं.

लोकल तौर पर Firebase प्रोजेक्ट शुरू करना

पक्का करें कि आपने सीएलआई इंस्टॉल किया हो या उसे नए वर्शन पर अपडेट किया हो.

curl -sL firebase.tools | bash

अगर आपने अब तक ऐसा नहीं किया है, तो मौजूदा वर्किंग डायरेक्ट्री को Firebase प्रोजेक्ट के तौर पर शुरू करें. इसके लिए, स्क्रीन पर दिए गए निर्देशों का पालन करके बताएं कि Cloud Functions और Cloud Firestore या Realtime Database में से किसी एक का इस्तेमाल किया जा रहा है:

firebase init

अब आपकी प्रोजेक्ट डायरेक्ट्री में Firebase कॉन्फ़िगरेशन फ़ाइलें, डेटाबेस के लिए Firebase Security Rules डेफ़िनिशन फ़ाइल, Cloud Functions कोड वाली functions डायरेक्ट्री, और अन्य ज़रूरी फ़ाइलें शामिल होंगी.

इंटरैक्टिव प्रोटोटाइप बनाना

Local Emulator Suite को इस तरह से डिज़ाइन किया गया है कि नई सुविधाओं का प्रोटोटाइप तुरंत बनाया जा सके. साथ ही, Suite का पहले से मौजूद यूज़र इंटरफ़ेस, प्रोटोटाइप बनाने के लिए सबसे काम के टूल में से एक है. यह कुछ हद तक, Firebase कंसोल को स्थानीय तौर पर चलाने जैसा है.

Emulator Suite UI का इस्तेमाल करके, डेटाबेस के डिज़ाइन को बार-बार बदला जा सकता है. साथ ही, Cloud Functions वाले अलग-अलग डेटाफ़्लो को आज़माया जा सकता है. इसके अलावा, सुरक्षा के नियमों में किए गए बदलावों का आकलन किया जा सकता है, बैक-एंड सेवाओं की परफ़ॉर्मेंस की पुष्टि करने के लिए लॉग की जांच की जा सकती है, और भी बहुत कुछ किया जा सकता है. इसके बाद, अगर आपको फिर से शुरुआत करनी है, तो बस अपना डेटाबेस मिटाएँ और डिज़ाइन के नए आइडिया के साथ शुरुआत करें.

Local Emulator Suite को इनके साथ शुरू करने पर, ये सभी सुविधाएं उपलब्ध होती हैं:

firebase emulators:start

अपने काल्पनिक ऐप्लिकेशन का प्रोटोटाइप बनाने के लिए, आइए एक बुनियादी Cloud फ़ंक्शन सेट अप करें और उसकी जांच करें. इससे डेटाबेस में टेक्स्ट एंट्री में बदलाव किया जा सकेगा. साथ ही, इसे ट्रिगर करने के लिए, Emulator Suite UI में डेटाबेस बनाया जा सकेगा और उसमें डेटा भरा जा सकेगा.

  1. डेटाबेस में डेटा सेव होने पर ट्रिगर होने वाला Cloud फ़ंक्शन बनाएं. इसके लिए, अपनी प्रोजेक्ट डायरेक्ट्री में मौजूद functions/index.js फ़ाइल में बदलाव करें. मौजूदा फ़ाइल के कॉन्टेंट को इस स्निपेट से बदलें. यह फ़ंक्शन, messages कलेक्शन में मौजूद दस्तावेज़ों में होने वाले बदलावों पर नज़र रखता है. साथ ही, दस्तावेज़ के original फ़ील्ड के कॉन्टेंट को अपरकेस में बदलता है और नतीजे को उस दस्तावेज़ के uppercase फ़ील्ड में सेव करता है.
  2.   const functions = require('firebase-functions/v1');
    
      exports.makeUppercase = functions.firestore.document('/messages/{documentId}')
          .onCreate((snap, context) => {
            const original = snap.data().original;
            console.log('Uppercasing', context.params.documentId, original);
            const uppercase = original.toUpperCase();
            return snap.ref.set({uppercase}, {merge: true});
          });
      
  3. firebase emulators:start की मदद से, Local Emulator Suite को लॉन्च करें. Cloud Functions और डेटाबेस एमुलेटर चालू हो जाते हैं. साथ ही, ये अपने-आप कॉन्फ़िगर हो जाते हैं, ताकि एक-दूसरे के साथ काम कर सकें.
  4. अपने ब्राउज़र में http://localhost:4000 पर जाकर, यूज़र इंटरफ़ेस देखें. यूज़र इंटरफ़ेस (यूआई) के लिए, पोर्ट 4000 डिफ़ॉल्ट पोर्ट है. हालांकि, Firebase सीएलआई से आउटपुट किए गए टर्मिनल मैसेज देखें. उपलब्ध एम्युलेटर की स्थिति देखें. हमारे मामले में, Cloud Functions और Cloud Firestore एम्युलेटर चल रहे होंगे.
    मेरी इमेज से
  5. यूज़र इंटरफ़ेस (यूआई) में, Firestore > डेटा टैब पर, कलेक्शन शुरू करें पर क्लिक करें. इसके बाद, messages कलेक्शन में नया दस्तावेज़ बनाने के लिए, प्रॉम्प्ट का पालन करें. इसमें फ़ील्ड का नाम original और वैल्यू test होनी चाहिए. इससे हमारा क्लाउड फ़ंक्शन ट्रिगर होता है. ध्यान दें कि कुछ ही देर में एक नया uppercase फ़ील्ड दिखेगा. इसमें "TEST" स्ट्रिंग भरी होगी.
    मेरी इमेज से मेरी इमेज से
  6. Firestore > अनुरोध टैब पर, अपने एम्युलेट किए गए डेटाबेस को किए गए अनुरोधों की जांच करें. इसमें उन अनुरोधों को पूरा करने के लिए किए गए सभी Firebase Security Rules आकलन शामिल हैं.
  7. लॉग टैब पर जाकर पुष्टि करें कि डेटाबेस को अपडेट करते समय, आपके फ़ंक्शन में कोई गड़बड़ी न हुई हो.

आप अपने Cloud फ़ंक्शन कोड और इंटरैक्टिव डेटाबेस में किए गए बदलावों के बीच आसानी से स्विच कर सकते हैं. ऐसा तब तक किया जा सकता है, जब तक आपको अपनी पसंद का डेटा फ़्लो न मिल जाए. इसके लिए, आपको ऐप्लिकेशन में मौजूद डेटाबेस ऐक्सेस कोड में बदलाव करने, टेस्ट सुइट को फिर से कंपाइल करने, और फिर से चलाने की ज़रूरत नहीं पड़ती.

अपने ऐप्लिकेशन को एम्युलेटर से कनेक्ट करना

इंटरैक्टिव प्रोटोटाइप बनाने में अच्छी प्रोग्रेस करने और डिज़ाइन तय करने के बाद, सही SDK टूल का इस्तेमाल करके अपने ऐप्लिकेशन में डेटाबेस ऐक्सेस कोड जोड़ा जा सकता है. डेटाबेस टैब का इस्तेमाल जारी रखें. साथ ही, फ़ंक्शन के लिए, Emulator Suite UI में लॉग टैब का इस्तेमाल करें, ताकि यह पुष्टि की जा सके कि आपका ऐप्लिकेशन सही तरीके से काम कर रहा है.

याद रखें कि Local Emulator Suite एक लोकल डेवलपमेंट टूल है. आपके प्रोडक्शन डेटाबेस में डेटा लिखने पर, वे फ़ंक्शन ट्रिगर नहीं होंगे जिनका प्रोटोटाइप स्थानीय तौर पर बनाया जा रहा है.

अपने ऐप्लिकेशन को डेटाबेस में डेटा लिखने की अनुमति देने के लिए, आपको अपनी टेस्ट क्लास या इन-ऐप्लिकेशन कॉन्फ़िगरेशन को Cloud Firestore एम्युलेटर पर ले जाना होगा.

Kotlin
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
val firestore = Firebase.firestore
firestore.useEmulator("10.0.2.2", 8080)

firestore.firestoreSettings = firestoreSettings {
    isPersistenceEnabled = false
}
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
FirebaseFirestore firestore = FirebaseFirestore.getInstance();
firestore.useEmulator("10.0.2.2", 8080);

FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder()
        .setPersistenceEnabled(false)
        .build();
firestore.setFirestoreSettings(settings);
Swift
let settings = Firestore.firestore().settings
settings.host = "127.0.0.1:8080"
settings.cacheSettings = MemoryCacheSettings()
settings.isSSLEnabled = false
Firestore.firestore().settings = settings
Unity
FirebaseFirestore db = FirebaseFirestore.DefaultInstance;
// Connects to the Firestore Emulator running on port 8080
db.Settings.Host = "127.0.0.1:8080";
db.Settings.SslEnabled = false;

Web

import { getFirestore, connectFirestoreEmulator } from "firebase/firestore";

// firebaseApps previously initialized using initializeApp()
const db = getFirestore();
connectFirestoreEmulator(db, '127.0.0.1', 8080);

Web

// Firebase previously initialized using firebase.initializeApp().
var db = firebase.firestore();
if (location.hostname === "localhost") {
  db.useEmulator("127.0.0.1", 8080);
}

कस्टम स्क्रिप्ट की मदद से, टेस्ट अपने-आप होने की सुविधा सेट अप करना

अब वर्कफ़्लो के आखिरी चरण के बारे में जानते हैं. ऐप्लिकेशन में अपनी सुविधा का प्रोटोटाइप बनाने के बाद, अगर वह आपके सभी प्लैटफ़ॉर्म पर सही से काम कर रही है, तो उसे लागू करने और टेस्ट करने के लिए आगे बढ़ें. यूनिट टेस्टिंग और सीआई वर्कफ़्लो के लिए, एम्युलेटर चालू किए जा सकते हैं, स्क्रिप्ट वाले टेस्ट चलाए जा सकते हैं, और एम्युलेटर बंद किए जा सकते हैं. इसके लिए, exec कमांड का इस्तेमाल करके, एक ही कॉल में ये काम किए जा सकते हैं:

firebase emulators:exec "./testdir/test.sh"

अलग-अलग एम्युलेटर के बारे में ज़्यादा जानकारी पाना

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

आगे क्या करना है?

ऊपर लिंक किए गए खास एम्युलेटर से जुड़े विषयों को ज़रूर पढ़ें. इसके बाद: