अपने ऐप को रीयलटाइम डेटाबेस एम्यूलेटर से कनेक्ट करें

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

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

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

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

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

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

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

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

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

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

डेमो

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

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

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

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

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

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

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 database = Firebase.database
database.useEmulator("10.0.2.2", 9000)
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
FirebaseDatabase database = FirebaseDatabase.getInstance();
database.useEmulator("10.0.2.2", 9000);
तीव्र
    // In almost all cases the ns (namespace) is your project ID.
let db = Database.database(url:"http://127.0.0.1:9000?ns=YOUR_DATABASE_NAMESPACE")

Web modular API

import { getDatabase, connectDatabaseEmulator } from "firebase/database";

const db = getDatabase();
if (location.hostname === "localhost") {
  // Point to the RTDB emulator running on localhost.
  connectDatabaseEmulator(db, "127.0.0.1", 9000);
} 

Web namespaced API

var db = firebase.database();
if (location.hostname === "localhost") {
  // Point to the RTDB emulator running on localhost.
  db.useEmulator("127.0.0.1", 9000);
} 

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

व्यवस्थापक SDKs

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

export FIREBASE_DATABASE_EMULATOR_HOST="127.0.0.1:9000"

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

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

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

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

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

Kotlin+KTX
// With a DatabaseReference, write null to clear the database.
database.reference.setValue(null)
Java
// With a DatabaseReference, write null to clear the database.
database.getReference().setValue(null);
तीव्र
// With a DatabaseReference, write nil to clear the database.
    Database.database().reference().setValue(nil);

Web modular API

import { getDatabase, ref, set } from "firebase/database";

// With a database Reference, write null to clear the database.
const db = getDatabase();
set(ref(db), null);

Web namespaced API

// With a database Reference, write null to clear the database.
firebase.database().ref().set(null);

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

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

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

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

firebase emulators:export ./dir

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

firebase emulators:start --import=./dir

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

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

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

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

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

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

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

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

http://localhost:9000/.inspect/coverage?ns=<database_name>

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

http://localhost:9000/.inspect/coverage.json?ns=<database_name>

आगे क्या?