अपने ऐप्लिकेशन को Cloud Firestore एम्युलेटर से कनेक्ट करने से पहले, पक्का करें कि आपको पूरे Firebase Local Emulator Suite वर्कफ़्लोके बारे में पता हो . साथ ही, आपने इंस्टॉल और कॉन्फ़िगर किया हो Local Emulator Suite. इसके अलावा, आपने इसके सीएलआई कमांडकी समीक्षा की हो.
कोई Firebase प्रोजेक्ट चुनना
Firebase Local Emulator Suite एक Firebase प्रोजेक्ट के लिए प्रॉडक्ट की नकल करता है.
इस्तेमाल करने के लिए प्रोजेक्ट चुनने के लिए, एम्युलेटर शुरू करने से पहले, अपनी वर्किंग डायरेक्ट्री में सीएलआई में firebase use चलाएं. इसके अलावा, हर एम्युलेटर
कमांड में --project फ़्लैग पास किया जा सकता है.
Local Emulator Suite असली Firebase प्रोजेक्ट और डेमो प्रोजेक्ट की नकल करने की सुविधा देता है.
| प्रोजेक्ट का टाइप | सुविधाएं | एम्युलेटर के साथ इस्तेमाल करना |
|---|---|---|
| असली |
असली Firebase प्रोजेक्ट वह होता है जिसे आपने बनाया और कॉन्फ़िगर किया है. आम तौर पर, इसे Firebase कंसोल के ज़रिए बनाया और कॉन्फ़िगर किया जाता है. असली प्रोजेक्ट में लाइव रिसॉर्स होते हैं. जैसे, डेटाबेस इंस्टेंस, स्टोरेज बकेट, फ़ंक्शन या कोई अन्य रिसॉर्स जिसे आपने उस Firebase प्रोजेक्ट के लिए सेट अप किया है. |
असली Firebase प्रोजेक्ट के साथ काम करते समय, आपके पास सपोर्ट किए जाने वाले किसी भी या सभी प्रॉडक्ट के लिए एम्युलेटर चलाने का विकल्प होता है. जिन प्रॉडक्ट के लिए एम्युलेटर नहीं चलाया जा रहा है उनके लिए, आपके ऐप्लिकेशन और कोड, लाइव रिसॉर्स (डेटाबेस इंस्टेंस, स्टोरेज बकेट, फ़ंक्शन वगैरह) के साथ इंटरैक्ट करेंगे. |
| डेमो |
डेमो Firebase प्रोजेक्ट में, असली Firebase कॉन्फ़िगरेशन और लाइव रिसॉर्स नहीं होते. आम तौर पर, इन प्रोजेक्ट को कोडलैब या अन्य ट्यूटोरियल के ज़रिए ऐक्सेस किया जाता है. डेमो प्रोजेक्ट के प्रोजेक्ट आईडी में, |
डेमो Firebase प्रोजेक्ट के साथ काम करते समय, आपके ऐप्लिकेशन और कोड एम्युलेटर सिर्फ़ के साथ इंटरैक्ट करते हैं. अगर आपका ऐप्लिकेशन किसी ऐसे रिसॉर्स के साथ इंटरैक्ट करने की कोशिश करता है जिसके लिए एम्युलेटर नहीं चल रहा है, तो वह कोड काम नहीं करेगा. |
हमारा सुझाव है कि जहां भी मुमकिन हो, डेमो प्रोजेक्ट का इस्तेमाल करें. इसके फ़ायदे यहां दिए गए हैं:
- सेटअप करना आसान है, क्योंकि Firebase प्रोजेक्ट बनाए बिना भी एम्युलेटर चलाए जा सकते हैं
- सुरक्षा बेहतर होती है, क्योंकि अगर आपका कोड गलती से ऐसे रिसॉर्स को कॉल करता है जिनकी नकल नहीं की गई है (प्रोडक्शन), तो डेटा में बदलाव, इस्तेमाल, और बिलिंग की कोई संभावना नहीं होती
- ऑफ़लाइन सहायता बेहतर होती है, क्योंकि एसडीके कॉन्फ़िगरेशन डाउनलोड करने के लिए इंटरनेट ऐक्सेस करने की ज़रूरत नहीं होती.
एम्युलेटर के साथ इंटरैक्ट करने के लिए, अपने ऐप्लिकेशन को इंस्ट्रूमेंट करना
शुरू होने पर, Cloud Firestore एम्युलेटर, डिफ़ॉल्ट डेटाबेस और नाम वाला
डेटाबेस बनाता है. यह डेटाबेस, आपकी
firebase.json फ़ाइल में मौजूद हर firestore कॉन्फ़िगरेशन के लिए बनाया जाता है.
नाम वाले डेटाबेस, एसडीके या REST API के उन कॉल के जवाब में भी बनाए जाते हैं जो किसी खास डेटाबेस का रेफ़रंस देते हैं. ये डेटाबेस, एम्युलेटर के लिए बनाए जाते हैं. इस तरह के डेटाबेस, ओपन नियमों के साथ काम करते हैं.
Emulator Suite यूज़र इंटरफ़ेस (यूआई) में, डिफ़ॉल्ट और नाम वाले डेटाबेस के साथ इंटरैक्ट करने के लिए, ब्राउज़र के पता बार में यूआरएल अपडेट करें. इससे डिफ़ॉल्ट या नाम वाला डेटाबेस चुना जा सकेगा.Emulator Suite UI
- उदाहरण के लिए, डिफ़ॉल्ट इंस्टेंस में डेटा ब्राउज़ करने के लिए, यूआरएल को
localhost:4000/firestore/default/dataपर अपडेट करें ecommerceनाम के इंस्टेंस में ब्राउज़ करने के लिए, यूआरएल कोlocalhost:4000/firestore/ecommerce/dataपर अपडेट करें.
एम्युलेटर को किसी खास वर्शन में शुरू करना
एम्युलेटर, आपकी firebase.json फ़ाइल के firestore.edition
सेक्शन में बताए गए वर्शन में शुरू होगा. आपके पास, firebase.json के emulators.firestore.edition सेक्शन में भी वर्शन बताने का विकल्प होता है. वर्शन के लिए मान्य वैल्यू, standard और enterprise हैं. अगर दोनों
कॉन्फ़िगरेशन में edition की वैल्यू बताई जाती है, तो emulators.firestore.edition को प्राथमिकता दी जाती है.
{
...
"firestore": {
"rules": "firestore.rules",
"indexes": "firestore.indexes.json",
"edition": "enterprise"
},
"emulators": {
"firestore": {
"port": 8080,
"edition": "enterprise" // Takes precedence over `firestore.edition`
}
},
...
}
Android, Apple प्लैटफ़ॉर्म, और वेब एसडीके
Cloud Firestore के साथ इंटरैक्ट करने के लिए, अपने इन-ऐप्लिकेशन कॉन्फ़िगरेशन या टेस्ट क्लास को इस तरह सेट अप करें.Cloud Firestore ध्यान दें कि यहां दिए गए सैंपल में, ऐप्लिकेशन कोड, डिफ़ॉल्ट प्रोजेक्ट डेटाबेस से कनेक्ट हो रहा है. डिफ़ॉल्ट डेटाबेस के अलावा, Cloud Firestore के अन्य डेटाबेस से जुड़े उदाहरणों के लिए, एक से ज़्यादा डेटाबेस के लिए बनी गाइड देखें.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
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); }
Firestore इवेंट से ट्रिगर होने वाले Cloud Functions की जांच करने के लिए , एम्युलेटर का इस्तेमाल करने के लिए किसी अन्य सेटअप की ज़रूरत नहीं होती. Firestore और Cloud Functions, दोनों के एम्युलेटर चलने पर, वे अपने-आप एक साथ काम करते हैं.
Admin SDKs
Firebase Admin SDKs एनवायरमेंट वैरिएबल सेट होने पर, Cloud Firestore
एम्युलेटर से अपने-आप कनेक्ट हो जाते हैं:FIRESTORE_EMULATOR_HOST
export FIRESTORE_EMULATOR_HOST="127.0.0.1:8080"
अगर आपका कोड, Cloud Functions एम्युलेटर के अंदर चल रहा है, तो आपका प्रोजेक्ट आईडी
और अन्य कॉन्फ़िगरेशन, initializeApp को कॉल करने पर अपने-आप सेट हो जाते हैं.
अगर आपको Admin SDK कोड, किसी दूसरे एनवायरमेंट में चल रहे शेयर किए गए एम्युलेटर से कनेक्ट करना है, तो आपको वही प्रोजेक्ट आईडी बताना होगा जिसे आपने Firebase सीएलआई का इस्तेमाल करके सेट किया था.
initializeApp को सीधे प्रोजेक्ट आईडी पास किया जा सकता है या GCLOUD_PROJECT एनवायरमेंट वैरिएबल सेट किया जा सकता है.
Node.js एडमिन एसडीके
admin.initializeApp({ projectId: "your-project-id" });
एनवायरमेंट वैरिएबल
export GCLOUD_PROJECT="your-project-id"
Cloud Firestore REST API
Cloud Firestore एम्युलेटर, आपके डेटाबेस के साथ इंटरैक्ट करने के लिए, REST एंडपॉइंट उपलब्ध कराता है. REST API के सभी कॉल, http://localhost:8080/v1 एंडपॉइंट पर किए जाने चाहिए.
REST कॉल के लिए पूरा पाथ, इस पैटर्न के मुताबिक होता है:
http://localhost:8080/v1/projects/{project_id}/databases/{database_id}/documents/{document_path}
उदाहरण के लिए, my-project-id प्रोजेक्ट के लिए, users कलेक्शन में मौजूद सभी दस्तावेज़ों की सूची बनाने के लिए, curl का इस्तेमाल किया जा सकता है:
curl -X GET "http://localhost:8080/v1/projects/my-project-id/databases/(default)/documents/users"
जांच के बीच, अपना डेटाबेस साफ़ करना
प्रोडक्शन Firestore, डेटाबेस को फ़्लश करने के लिए, प्लैटफ़ॉर्म एसडीके का कोई तरीका उपलब्ध नहीं कराता.हालांकि, Firestore एम्युलेटर, खास तौर पर इस काम के लिए, REST एंडपॉइंट उपलब्ध कराता है. इसे टेस्ट फ़्रेमवर्क सेटअप/tearDown स्टेप, टेस्ट क्लास या शेल (जैसे, curl के साथ) से, टेस्ट शुरू होने से पहले कॉल किया जा सकता है. इस तरीके का इस्तेमाल, एम्युलेटर प्रोसेस को बंद करने के बजाय किया जा सकता है.
किसी सही तरीके से, एचटीटीपी DELETE ऑपरेशन करें. इसके लिए, अपना Firebase प्रोजेक्ट आईडी दें. उदाहरण के लिए, 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"
इस तरह का कोई स्टेप लागू करने के बाद, अपने टेस्ट को क्रम से चलाया जा सकता है और अपने फ़ंक्शन को ट्रिगर किया जा सकता है. इससे आपको यह भरोसा मिलेगा कि रन के बीच पुराना डेटा मिटा दिया जाएगा और आप नए बेसलाइन टेस्ट कॉन्फ़िगरेशन का इस्तेमाल कर रहे हैं.
डेटा इंपोर्ट और एक्सपोर्ट करना
डेटाबेस और Cloud Storage for Firebase एम्युलेटर, आपको चालू एम्युलेटर इंस्टेंस से डेटा एक्सपोर्ट करने की अनुमति देते हैं. यूनिट टेस्ट या लगातार इंटिग्रेशन वर्कफ़्लो में इस्तेमाल करने के लिए, डेटा का बेसलाइन सेट तय करें. इसके बाद, इसे टीम के साथ शेयर करने के लिए एक्सपोर्ट करें.
firebase emulators:export ./dirटेस्ट में, एम्युलेटर शुरू होने पर, बेसलाइन डेटा इंपोर्ट करें.
firebase emulators:start --import=./dirएम्युलेटर को बंद होने पर डेटा एक्सपोर्ट करने का निर्देश दिया जा सकता है. इसके लिए, एक्सपोर्ट पाथ तय किया जा सकता है या --import फ़्लैग को पास किए गए पाथ का इस्तेमाल किया जा सकता है.
firebase emulators:start --import=./dir --export-on-exitडेटा इंपोर्ट और एक्सपोर्ट करने के ये विकल्प, firebase emulators:exec कमांड के साथ भी काम करते हैं. ज़्यादा जानकारी के लिए, एम्युलेटर कमांड रेफ़रंस देखें.
सुरक्षा नियमों से जुड़ी गतिविधि को विज़ुअलाइज़ करना
प्रोटोटाइप और टेस्ट लूप के दौरान, विज़ुअलाइज़ेशन टूल और Local Emulator Suite से मिली रिपोर्ट का इस्तेमाल किया जा सकता है.
अनुरोध मॉनिटर का इस्तेमाल करना
Cloud Firestore एम्युलेटर, आपको Emulator Suite UI में क्लाइंट के अनुरोधों को विज़ुअलाइज़ करने की सुविधा देता है. इसमें Firebase Security Rules के लिए, आकलन ट्रेसिंग भी शामिल है.
हर अनुरोध के लिए, आकलन के क्रम की पूरी जानकारी देखने के लिए, Firestore > अनुरोध टैब खोलें.
नियमों के आकलन की रिपोर्ट को विज़ुअलाइज़ करना
प्रोटोटाइप में सुरक्षा नियम जोड़ने के दौरान, उन्हें Local Emulator Suite डीबग टूल की मदद से डीबग किया जा सकता है.
टेस्ट का सुइट चलाने के बाद, टेस्ट कवरेज रिपोर्ट ऐक्सेस की जा सकती हैं. इनमें यह दिखाया जाता है कि आपके हर सुरक्षा नियम का आकलन कैसे किया गया.
रिपोर्ट पाने के लिए, एम्युलेटर के चालू होने के दौरान, उसके किसी ऐसे एंडपॉइंट के लिए क्वेरी करें जिसे ऐक्सेस किया जा सकता है. ब्राउज़र के साथ काम करने वाले वर्शन के लिए, यह यूआरएल इस्तेमाल करें:
http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage.html
इससे आपके नियमों को एक्सप्रेशन और सब-एक्सप्रेशन में बांटा जाता है. इन पर कर्सर ले जाकर, ज़्यादा जानकारी देखी जा सकती है. इसमें आकलन की संख्या और दिखाई गई वैल्यू शामिल हैं. इस डेटा के रॉ JSON वर्शन के लिए, अपनी क्वेरी में यह यूआरएल शामिल करें:
http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage
यहां, रिपोर्ट के एचटीएमएल वर्शन में, उन आकलनों को हाइलाइट किया गया है जिनमें अनडिफ़ाइंड और नल-वैल्यू से जुड़ी गड़बड़ियां हैं:

Cloud Firestore एम्युलेटर, प्रोडक्शन से कैसे अलग है
Cloud Firestore एम्युलेटर, प्रोडक्शन सेवा के व्यवहार को सटीक तरीके से दोहराने की कोशिश करता है. हालांकि, इसमें कुछ अहम सीमाएं हैं.
Cloud Firestore के लिए एक से ज़्यादा डेटाबेस की सुविधा
फ़िलहाल, Emulator Suite UI डिफ़ॉल्ट डेटाबेस के लिए इंटरैक्टिव तरीके से बनाने, बदलाव करने, मिटाने, अनुरोध मॉनिटर करने, और सुरक्षा को विज़ुअलाइज़ करने की सुविधा देता है. हालांकि, यह सुविधा, नाम वाले अन्य डेटाबेस के लिए उपलब्ध नहीं है.
हालांकि, एम्युलेटर, आपकी firebase.json फ़ाइल में मौजूद कॉन्फ़िगरेशन के आधार पर, नाम वाला डेटाबेस बनाता है. साथ ही, एसडीके या REST API के कॉल के जवाब में भी यह डेटाबेस बनाता है.
लेन-देन
फ़िलहाल, एम्युलेटर, प्रोडक्शन में दिखने वाले लेन-देन के सभी व्यवहार को लागू नहीं करता. जब उन सुविधाओं की जांच की जाती है जिनमें एक ही दस्तावेज़ में एक साथ कई बार लिखने की ज़रूरत होती है, तो एम्युलेटर को लिखने के अनुरोध पूरे करने में ज़्यादा समय लग सकता है. कुछ मामलों में, लॉक को रिलीज़ होने में 30 सेकंड तक लग सकते हैं. ज़रूरत पड़ने पर, टेस्ट के टाइमआउट को अडजस्ट करें.
इंडेक्स
एम्युलेटर, कंपोज़िट इंडेक्स को ट्रैक नहीं करता. इसके बजाय, यह किसी भी मान्य क्वेरी को एक्ज़ीक्यूट करेगा. यह पता करने के लिए कि आपको किन इंडेक्स की ज़रूरत होगी, अपने ऐप्लिकेशन की जांच, असली Cloud Firestore इंस्टेंस के ख़िलाफ़ करें.
सीमाएं
एम्युलेटर, प्रोडक्शन में लागू की गई सभी सीमाओं को लागू नहीं करता. उदाहरण के लिए, एम्युलेटर, ऐसे लेन-देन की अनुमति दे सकता है जिन्हें प्रोडक्शन सेवा, बहुत बड़े होने की वजह से अस्वीकार कर देगी. पक्का करें कि आपको दस्तावेज़ में बताई गई सीमाओं के बारे में पता हो और आपने अपने ऐप्लिकेशन को इस तरह डिज़ाइन किया हो कि इन सीमाओं का उल्लंघन न हो.
आगे क्या करना है?
- वीडियो के चुने हुए सेट और सिलसिलेवार तरीके से निर्देश देने वाले उदाहरणों के लिए, Firebase Emulators ट्रेनिंग प्लेलिस्ट देखें.
- सुरक्षा नियमों की जांच और Firebase Test SDK के इस्तेमाल के बेहतर उदाहरणों की जांच करें: सुरक्षा नियमों की जांच करना (Firestore).
- ट्रिगर किए गए फ़ंक्शन, Cloud Firestore के साथ आम तौर पर इंटिग्रेट होते हैं. Cloud Functions for Firebase एम्युलेटर के बारे में ज़्यादा जानने के लिए, फ़ंक्शन को स्थानीय तौर पर चलाना लेख पढ़ें.