Catch up on highlights from Firebase at Google I/O 2023. Learn more

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

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

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

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

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

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

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

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

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

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

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

डेमो

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

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

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

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

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

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

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

क्लाउड फायरस्टोर के साथ बातचीत करने के लिए अपना इन-ऐप कॉन्फ़िगरेशन या टेस्ट क्लास निम्नानुसार सेट करें।

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 = "localhost:8080"
settings.isPersistenceEnabled = false 
settings.isSSLEnabled = false
Firestore.firestore().settings = settings

Web version 9

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

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

Web version 8

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

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

व्यवस्थापक एसडीके

जब FIRESTORE_EMULATOR_HOST परिवेश चर सेट किया जाता है, तो Firebase व्यवस्थापक SDK स्वचालित रूप से क्लाउड फायरस्टोर एमुलेटर से जुड़ जाते हैं:

export FIRESTORE_EMULATOR_HOST="localhost:8080"

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

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

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

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

प्रोडक्शन फायरस्टार डेटाबेस को फ्लश करने के लिए कोई प्लेटफॉर्म एसडीके विधि प्रदान नहीं करता है, लेकिन फायरस्टोर एमुलेटर आपको विशेष रूप से इस उद्देश्य के लिए एक आरईएसटी एंडपॉइंट देता है, जिसे टेस्ट फ्रेमवर्क सेटअप/टियरडाउन चरण से, टेस्ट क्लास से या शेल से (उदाहरण के लिए) कहा जा सकता है। , 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"

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

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

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

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 संस्करण उन मूल्यांकनों को हाइलाइट करता है जो अपरिभाषित और शून्य-मान त्रुटियों को फेंकते हैं:

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

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

लेनदेन

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

इंडेक्स

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

सीमाएं

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

आगे क्या?