अपने ऐप को क्लाउड फायरस्टोर एमुलेटर से कनेक्ट करें

अपने ऐप को क्लाउड फायरस्टोर एमुलेटर से कनेक्ट करने से पहले, सुनिश्चित करें कि आप समग्र फायरबेस लोकल एमुलेटर सूट वर्कफ़्लो को समझते हैं , और आप लोकल एमुलेटर सूट को इंस्टॉल और कॉन्फ़िगर करते हैं और इसके सीएलआई कमांड की समीक्षा करते हैं।

एक फायरबेस प्रोजेक्ट चुनें

फायरबेस लोकल एमुलेटर सुइट एकल फायरबेस प्रोजेक्ट के लिए उत्पादों का अनुकरण करता है।

उपयोग करने के लिए प्रोजेक्ट का चयन करने के लिए, एमुलेटर शुरू करने से पहले, सीएलआई में अपनी कार्यशील निर्देशिका में firebase use । या, आप प्रत्येक एमुलेटर कमांड को --project फ़्लैग पास कर सकते हैं।

स्थानीय एमुलेटर सुइट वास्तविक फायरबेस परियोजनाओं और डेमो परियोजनाओं के अनुकरण का समर्थन करता है।

परियोजना प्रकार विशेषताएँ एम्यूलेटर के साथ प्रयोग करें
असली

एक वास्तविक फ़ायरबेस प्रोजेक्ट वह है जिसे आपने बनाया और कॉन्फ़िगर किया है (संभवतः फ़ायरबेस कंसोल के माध्यम से)।

वास्तविक परियोजनाओं में लाइव संसाधन होते हैं, जैसे डेटाबेस इंस्टेंसेस, स्टोरेज बकेट, फ़ंक्शन, या आपके द्वारा उस फायरबेस प्रोजेक्ट के लिए सेट किया गया कोई अन्य संसाधन।

वास्तविक फायरबेस परियोजनाओं के साथ काम करते समय, आप किसी या सभी समर्थित उत्पादों के लिए एमुलेटर चला सकते हैं।

किसी भी उत्पाद के लिए जिसका आप अनुकरण नहीं कर रहे हैं, आपके ऐप्स और कोड लाइव संसाधन (डेटाबेस इंस्टेंस, स्टोरेज बकेट, फ़ंक्शन इत्यादि) के साथ इंटरैक्ट करेंगे।

डेमो

डेमो फ़ायरबेस प्रोजेक्ट में कोई वास्तविक फ़ायरबेस कॉन्फ़िगरेशन नहीं है और कोई लाइव संसाधन नहीं है। इन परियोजनाओं को आमतौर पर कोडलैब या अन्य ट्यूटोरियल के माध्यम से एक्सेस किया जाता है।

डेमो प्रोजेक्ट के लिए प्रोजेक्ट आईडी में demo- उपसर्ग होता है।

डेमो फायरबेस प्रोजेक्ट्स के साथ काम करते समय, आपके ऐप्स और कोड केवल एमुलेटर के साथ इंटरैक्ट करते हैं। यदि आपका ऐप किसी ऐसे संसाधन के साथ इंटरैक्ट करने का प्रयास करता है जिसके लिए एमुलेटर नहीं चल रहा है, तो वह कोड विफल हो जाएगा।

हम अनुशंसा करते हैं कि आप जहां भी संभव हो डेमो प्रोजेक्ट का उपयोग करें। लाभों में शामिल हैं:

  • आसान सेटअप, क्योंकि आप कभी भी फायरबेस प्रोजेक्ट बनाए बिना एमुलेटर चला सकते हैं
  • मजबूत सुरक्षा, क्योंकि यदि आपका कोड गलती से गैर-अनुकरणित (उत्पादन) संसाधनों का आह्वान करता है, तो डेटा परिवर्तन, उपयोग और बिलिंग की कोई संभावना नहीं है
  • बेहतर ऑफ़लाइन समर्थन, क्योंकि आपके एसडीके कॉन्फ़िगरेशन को डाउनलोड करने के लिए इंटरनेट तक पहुंचने की कोई आवश्यकता नहीं है।

एमुलेटर से बात करने के लिए अपने ऐप को उपकरण दें

स्टार्टअप पर, क्लाउड फायरस्टोर एमुलेटर आपके firebase.json फ़ाइल में प्रत्येक firestore कॉन्फ़िगरेशन के लिए एक डिफ़ॉल्ट डेटाबेस और एक नामित डेटाबेस बनाता है। नामित डेटाबेस को क्लाउड फायरस्टोर सुरक्षा नियम स्पष्ट रूप से निर्दिष्ट करने के लिए अपनी firebase.json फ़ाइल का उपयोग करें।

नामांकित डेटाबेस भी किसी विशिष्ट डेटाबेस को संदर्भित करने वाले एमुलेटर को किसी भी एसडीके या आरईएसटी एपीआई कॉल के जवाब में अंतर्निहित रूप से बनाए जाते हैं। ऐसे अंतर्निहित रूप से बनाए गए डेटाबेस खुले नियमों के साथ काम करते हैं।

वर्तमान में, एम्यूलेटर सुइट यूआई डिफ़ॉल्ट डेटाबेस के साथ इंटरैक्टिव कार्य का समर्थन करता है।

Android, Apple प्लेटफ़ॉर्म और वेब SDK

क्लाउड फायरस्टोर के साथ इंटरैक्ट करने के लिए अपना इन-ऐप कॉन्फ़िगरेशन या परीक्षण कक्षाएं निम्नानुसार सेट करें। ध्यान दें कि निम्नलिखित नमूनों में, ऐप कोड डिफ़ॉल्ट प्रोजेक्ट डेटाबेस से कनेक्ट हो रहा है। डिफ़ॉल्ट डेटाबेस से परे अतिरिक्त क्लाउड फायरस्टोर डेटाबेस से जुड़े उदाहरणों के लिए, एकाधिक डेटाबेस के लिए मार्गदर्शिका देखें।

Kotlin+KTX
// 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);
तीव्र
let settings = Firestore.firestore().settings
settings.host = "127.0.0.1:8080"
settings.isPersistenceEnabled = false
settings.isSSLEnabled = false
Firestore.firestore().settings = settings

Web modular API

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

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

Web namespaced API

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

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

व्यवस्थापक SDKs

FIRESTORE_EMULATOR_HOST पर्यावरण चर सेट होने पर फायरबेस एडमिन SDK स्वचालित रूप से क्लाउड फायरस्टोर एमुलेटर से कनेक्ट हो जाता है:

export FIRESTORE_EMULATOR_HOST="127.0.0.1:8080"

यदि आपका कोड क्लाउड फ़ंक्शंस एमुलेटर के अंदर चल रहा है तो initializeApp कॉल करते समय आपकी प्रोजेक्ट आईडी और अन्य कॉन्फ़िगरेशन स्वचालित रूप से सेट हो जाते हैं।

यदि आप चाहते हैं कि आपका एडमिन एसडीके कोड किसी अन्य वातावरण में चल रहे साझा एमुलेटर से कनेक्ट हो, तो आपको वही प्रोजेक्ट आईडी निर्दिष्ट करना होगा जो आपने फायरबेस सीएलआई का उपयोग करके सेट किया था । आप ऐप को सीधे initializeApp के लिए एक प्रोजेक्ट आईडी पास कर सकते हैं या GCLOUD_PROJECT पर्यावरण चर सेट कर सकते हैं।

Node.js एडमिन SDK
admin.initializeApp({ projectId: "your-project-id" });
पर्यावरणपरिवर्ती तारक
export GCLOUD_PROJECT="your-project-id"

परीक्षणों के बीच अपना डेटाबेस साफ़ करें

प्रोडक्शन फायरस्टोर डेटाबेस को फ्लश करने के लिए कोई प्लेटफ़ॉर्म SDK विधि प्रदान नहीं करता है, लेकिन फायरस्टोर एमुलेटर आपको इस उद्देश्य के लिए विशेष रूप से एक REST एंडपॉइंट देता है, जिसे टेस्ट फ्रेमवर्क सेटअप/टियरडाउन स्टेप से, टेस्ट क्लास से, या शेल से कॉल किया जा सकता है (उदाहरण के लिए) , curl के साथ) परीक्षण शुरू होने से पहले। आप इस दृष्टिकोण का उपयोग केवल एमुलेटर प्रक्रिया को बंद करने के विकल्प के रूप में कर सकते हैं।

एक उपयुक्त विधि में, एक HTTP DELETE ऑपरेशन करें, उदाहरण के लिए firestore-emulator-example , अपने फायरबेस प्रोजेक्टआईडी को निम्नलिखित समापन बिंदु पर आपूर्ति करें:

"http://localhost:8080/emulator/v1/projects/firestore-emulator-example/databases/(default)/documents"

स्वाभाविक रूप से, आपके कोड को REST पुष्टिकरण का इंतजार करना चाहिए कि फ्लश समाप्त हो गया है या विफल हो गया है।

आप इस ऑपरेशन को शेल से कर सकते हैं:

// Shell alternative…
$ curl -v -X DELETE "http://localhost:8080/emulator/v1/projects/firestore-emulator-example/databases/(default)/documents"

इस तरह के एक कदम को लागू करने के बाद, आप अपने परीक्षणों को अनुक्रमित कर सकते हैं और अपने कार्यों को इस विश्वास के साथ ट्रिगर कर सकते हैं कि पुराने डेटा को रन के बीच शुद्ध कर दिया जाएगा और आप एक ताजा बेसलाइन परीक्षण कॉन्फ़िगरेशन का उपयोग कर रहे हैं।

डेटा आयात और निर्यात करें

फायरबेस एमुलेटर के लिए डेटाबेस और क्लाउड स्टोरेज आपको चल रहे एमुलेटर इंस्टेंस से डेटा निर्यात करने की अनुमति देता है। अपने यूनिट परीक्षणों या निरंतर एकीकरण वर्कफ़्लोज़ में उपयोग करने के लिए डेटा का एक आधारभूत सेट परिभाषित करें, फिर इसे टीम के बीच साझा करने के लिए निर्यात करें।

firebase emulators:export ./dir

परीक्षणों में, एमुलेटर स्टार्टअप पर, बेसलाइन डेटा आयात करें।

firebase emulators:start --import=./dir

आप शटडाउन पर डेटा निर्यात करने के लिए एमुलेटर को निर्देश दे सकते हैं, या तो एक निर्यात पथ निर्दिष्ट कर सकते हैं या बस --import ध्वज को दिए गए पथ का उपयोग कर सकते हैं।

firebase emulators:start --import=./dir --export-on-exit

ये डेटा आयात और निर्यात विकल्प firebase emulators:exec कमांड के साथ भी काम करते हैं। अधिक जानकारी के लिए, एमुलेटर कमांड संदर्भ देखें।

सुरक्षा नियम गतिविधि को विज़ुअलाइज़ करें

जैसे ही आप प्रोटोटाइप और टेस्ट लूप के माध्यम से काम करते हैं, आप स्थानीय एमुलेटर सूट द्वारा प्रदान किए गए विज़ुअलाइज़ेशन टूल और रिपोर्ट का उपयोग कर सकते हैं।

अनुरोध मॉनिटर का उपयोग करें

क्लाउड फायरस्टोर एमुलेटर आपको एमुलेटर सुइट यूआई में क्लाइंट अनुरोधों को देखने की सुविधा देता है, जिसमें फायरबेस सुरक्षा नियमों के लिए मूल्यांकन ट्रेसिंग भी शामिल है।

प्रत्येक अनुरोध के लिए विस्तृत मूल्यांकन अनुक्रम देखने के लिए फायरस्टोर > अनुरोध टैब खोलें।

फायरस्टोर एमुलेटर मॉनिटर से सुरक्षा नियम मूल्यांकन दिखाने का अनुरोध करता है

नियम मूल्यांकन रिपोर्ट विज़ुअलाइज़ करें

जैसे ही आप अपने प्रोटोटाइप में सुरक्षा नियम जोड़ते हैं, आप उन्हें स्थानीय एमुलेटर सूट डिबग टूल से डीबग कर सकते हैं।

परीक्षणों का एक सूट चलाने के बाद, आप परीक्षण कवरेज रिपोर्ट तक पहुंच सकते हैं जो दिखाती है कि आपके प्रत्येक सुरक्षा नियम का मूल्यांकन कैसे किया गया था।

रिपोर्ट प्राप्त करने के लिए, एम्यूलेटर के चलने के दौरान उस पर एक उजागर समापन बिंदु को क्वेरी करें। ब्राउज़र-अनुकूल संस्करण के लिए, निम्न URL का उपयोग करें:

http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage.html

यह आपके नियमों को अभिव्यक्तियों और उप-अभिव्यक्तियों में तोड़ देता है जिन्हें आप अधिक जानकारी के लिए माउसओवर कर सकते हैं, जिसमें मूल्यांकन की संख्या और लौटाए गए मान भी शामिल हैं। इस डेटा के कच्चे JSON संस्करण के लिए, अपनी क्वेरी में निम्नलिखित URL शामिल करें:

http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage

यहां, रिपोर्ट का HTML संस्करण उन मूल्यांकनों पर प्रकाश डालता है जो अपरिभाषित और शून्य-मूल्य त्रुटियां उत्पन्न करते हैं:

क्लाउड फायरस्टोर एमुलेटर उत्पादन से किस प्रकार भिन्न है

क्लाउड फायरस्टोर एमुलेटर कुछ उल्लेखनीय सीमाओं के साथ उत्पादन सेवा के व्यवहार को ईमानदारी से दोहराने का प्रयास करता है।

क्लाउड फायरस्टोर के लिए एकाधिक डेटाबेस समर्थन

वर्तमान में, एम्यूलेटर सुइट यूआई डिफ़ॉल्ट डेटाबेस के लिए इंटरैक्टिव निर्माण, संपादन, विलोपन, अनुरोध निगरानी और सुरक्षा विज़ुअलाइज़ेशन का समर्थन करता है, लेकिन अतिरिक्त नामित डेटाबेस का नहीं।

हालाँकि, एमुलेटर स्वयं आपकी firebase.json फ़ाइल में कॉन्फ़िगरेशन के आधार पर और एसडीके या आरईएसटी एपीआई कॉल के जवाब में एक नामित डेटाबेस बनाता है।

लेनदेन

एम्यूलेटर वर्तमान में उत्पादन में देखे गए सभी लेनदेन व्यवहार को लागू नहीं करता है। जब आप उन सुविधाओं का परीक्षण कर रहे हैं जिनमें एक दस्तावेज़ में एकाधिक समवर्ती लेखन शामिल है, तो एमुलेटर लेखन अनुरोधों को पूरा करने में धीमा हो सकता है। कुछ मामलों में, ताले को रिलीज़ होने में 30 सेकंड तक का समय लग सकता है। यदि आवश्यक हो, तो तदनुसार परीक्षण टाइमआउट समायोजित करने पर विचार करें।

इंडेक्स

एमुलेटर कंपाउंड इंडेक्स को ट्रैक नहीं करता है और इसके बजाय किसी भी वैध क्वेरी को निष्पादित करेगा। यह निर्धारित करने के लिए कि आपको किन इंडेक्स की आवश्यकता होगी, अपने ऐप का वास्तविक क्लाउड फायरस्टोर इंस्टेंस के विरुद्ध परीक्षण करना सुनिश्चित करें।

सीमाएं

एमुलेटर उत्पादन में लागू सभी सीमाओं को लागू नहीं करता है। उदाहरण के लिए, एमुलेटर उन लेनदेन की अनुमति दे सकता है जिन्हें उत्पादन सेवा द्वारा बहुत बड़ा मानकर अस्वीकार कर दिया जाएगा। सुनिश्चित करें कि आप दस्तावेज़ीकृत सीमाओं से परिचित हैं और आप सक्रिय रूप से उनसे बचने के लिए अपना ऐप डिज़ाइन करते हैं।

आगे क्या?