अपने ऐप्लिकेशन को Cloud Firestore Emulator से कनेक्ट करें

अपने ऐप्लिकेशन को 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 कॉन्फ़िगरेशन नहीं होता और कोई लाइव संसाधन नहीं. इन प्रोजेक्ट को आम तौर पर कोडलैब से ऐक्सेस किया जाता है या अन्य ट्यूटोरियल.

डेमो प्रोजेक्ट के प्रोजेक्ट आईडी में demo- प्रीफ़िक्स होता है.

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

हमारा सुझाव है कि जहां भी मुमकिन हो, डेमो प्रोजेक्ट का इस्तेमाल करें. सदस्यता के साथ यहां दिए गए फ़ायदे मिलते हैं:

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

एम्युलेटर से बात करने के लिए, अपने ऐप्लिकेशन को इंस्टॉल करें

शुरू होने पर, Cloud Firestore एम्युलेटर, डिफ़ॉल्ट डेटाबेस और नाम आपके ब्राउज़र में, हर firestore कॉन्फ़िगरेशन के लिए डेटाबेस firebase.json फ़ाइल.

नाम वाले डेटाबेस भी, किसी एसडीके टूल या सेवा की शर्तों के मुताबिक तैयार किए जाते हैं REST API, एम्युलेटर को कॉल करता है जो किसी खास डेटाबेस का रेफ़रंस देता है. इस तरह सीधे तौर पर बनाए गए डेटाबेस, ओपन नियमों के हिसाब से काम करते हैं.

अपने डिफ़ॉल्ट और नाम वाले डेटाबेस के साथ काम करने के लिए, Emulator Suite UI, अपने ब्राउज़र के पता बार में यूआरएल को अपडेट करें डिफ़ॉल्ट या नाम वाले डेटाबेस का इस्तेमाल हो.

  • उदाहरण के लिए, अपने डिफ़ॉल्ट इंस्टेंस में डेटा ब्राउज़ करने के लिए, यूआरएल को अपडेट करें localhost:4000/firestore/default/data अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
  • ecommerce नाम के इंस्टेंस में ब्राउज़ करने के लिए, इसे अपडेट करें localhost:4000/firestore/ecommerce/data.

Android, Apple प्लैटफ़ॉर्म, और Web SDK

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

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);
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);
}

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

Admin SDK सेकंड

Firebase Admin SDK अपने-आप 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 का एडमिन SDK
admin.initializeApp({ projectId: "your-project-id" });
एनवायरमेंट वैरिएबल
export GCLOUD_PROJECT="your-project-id"

अलग-अलग टेस्ट के बीच अपना डेटाबेस मिटाएं

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

किसी उचित तरीके में, HTTP 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 निर्देश भी. ज़्यादा जानकारी के लिए, इसे देखें emulator निर्देश का रेफ़रंस.

सुरक्षा के नियमों से जुड़ी गतिविधि देखें

प्रोटोटाइप और टेस्ट लूप पर काम करते समय, विज़ुअलाइज़ेशन टूल इस्तेमाल किए जा सकते हैं. और ये रिपोर्ट, Local Emulator Suite से मिलती हैं.

अनुरोध मॉनिटर का इस्तेमाल करना

Cloud Firestore एम्युलेटर की मदद से, क्लाइंट के अनुरोधों को इसमें विज़ुअलाइज़ किया जा सकता है Emulator Suite UI. इसमें Firebase Security Rules के लिए इवैलुएशन ट्रेसिंग भी शामिल है.

Firestore > खोलें अनुरोध टैब से, सभी समस्याओं का आकलन किया जा सकता है हर अनुरोध का क्रम तय करें.

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 फ़ाइल में मौजूद है और अनुमान के तौर पर SDK टूल या REST API कॉल.

लेन-देन

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

इंडेक्स

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

सीमाएं

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

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