अपने ऐप्लिकेशन को 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 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 डेटाबेस से जुड़े उदाहरणों के लिए, एक से ज़्यादा डेटाबेस के लिए गाइड देखें.
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); }
एम्युलेटर का इस्तेमाल करके, Firestore इवेंट से ट्रिगर होने वाले Cloud Functions को टेस्ट करने के लिए, किसी अन्य सेटअप की ज़रूरत नहीं है. जब Firestore और Cloud Functions, दोनों के एम्युलेटर चल रहे हों, तो वे अपने-आप एक साथ काम करते हैं.
Admin SDK से॰
FIRESTORE_EMULATOR_HOST एनवायरमेंट वैरिएबल सेट होने पर, Firebase Admin SDK अपने-आप Cloud Firestore एम्युलेटर से कनेक्ट हो जाता है:
export FIRESTORE_EMULATOR_HOST="127.0.0.1:8080"
अगर आपका कोड Cloud Functions एम्युलेटर में चल रहा है, तो initializeApp को कॉल करने पर, आपका प्रोजेक्ट आईडी और अन्य कॉन्फ़िगरेशन अपने-आप सेट हो जाते हैं.
अगर आपको अपने Admin SDK कोड को किसी दूसरे एनवायरमेंट में चल रहे शेयर किए गए एम्युलेटर से कनेक्ट करना है, तो आपको वही प्रोजेक्ट आईडी डालना होगा जो आपने Firebase CLI का इस्तेमाल करके सेट किया है.
initializeApp को सीधे तौर पर प्रोजेक्ट आईडी पास किया जा सकता है या GCLOUD_PROJECT एनवायरमेंट वैरिएबल सेट किया जा सकता है.
Node.js Admin SDK
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 एंडपॉइंट देता है. इसे टेस्ट शुरू होने से पहले, टेस्ट फ़्रेमवर्क सेटअप/टियरडाउन चरण, टेस्ट क्लास या शेल (उदाहरण के लिए, 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 > Requests टैब खोलें.
नियमों के आकलन की रिपोर्ट देखना
प्रोटोटाइप में सुरक्षा से जुड़े नियम जोड़ने के बाद, उन्हें Local Emulator Suite डीबग टूल की मदद से डीबग किया जा सकता है.
टेस्ट का एक सुइट चलाने के बाद, टेस्ट कवरेज रिपोर्ट को ऐक्सेस किया जा सकता है. इससे पता चलता है कि आपके हर सुरक्षा नियम का आकलन कैसे किया गया.
रिपोर्ट पाने के लिए, एम्युलेटर के चालू होने के दौरान, उसमें एक्सपोज़ किए गए एंडपॉइंट के लिए क्वेरी करें. ब्राउज़र के साथ काम करने वाले वर्शन के लिए, इस यूआरएल का इस्तेमाल करें:
http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage.html
यह आपके नियमों को एक्सप्रेशन और सब-एक्सप्रेशन में बांटता है. ज़्यादा जानकारी के लिए, इन पर माउस घुमाएं. इसमें आकलन की संख्या और वैल्यू की जानकारी शामिल है. इस डेटा के रॉ JSON वर्शन के लिए, अपनी क्वेरी में यह यूआरएल शामिल करें:
http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage
यहां रिपोर्ट के एचटीएमएल वर्शन में, उन आकलन को हाइलाइट किया गया है जिनमें undefined और null-value वाली गड़बड़ियां दिखती हैं:

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