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

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

कोई Firebase प्रोजेक्ट चुनें

Firebase लोकल एम्युलेटर सुइट, किसी एक Firebase प्रोजेक्ट के लिए प्रॉडक्ट को एम्युलेट करता है.

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

Local Emulator Suite, असली Firebase प्रोजेक्ट और डेमो प्रोजेक्ट के एम्युलेशन के साथ काम करता है.

प्रोजेक्ट का टाइप सुविधाएं एम्युलेटर के साथ इस्तेमाल करें
रीयल

असली Firebase प्रोजेक्ट वह होता है जिसे आपने बनाया और कॉन्फ़िगर किया है (ऐसा ज़्यादातर Firebase कंसोल के ज़रिए होता है).

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

रीयल Firebase प्रोजेक्ट के साथ काम करते समय, इस्तेमाल किए जा सकने वाले किसी भी या सभी प्रॉडक्ट के लिए एम्युलेटर चलाए जा सकते हैं.

आप जिन प्रॉडक्ट को एम्युलेट नहीं कर रहे हैं उनके लिए, आपके ऐप्लिकेशन और कोड लाइव रिसॉर्स (डेटाबेस इंस्टेंस, स्टोरेज बकेट, फ़ंक्शन वगैरह) के साथ इंटरैक्ट करेंगे.

डेमो

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

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

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

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

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

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

Android, Apple प्लैटफ़ॉर्म, और Web 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);
Swift
    // 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

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

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

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

एडमिन SDK

FIREBASE_DATABASE_EMULATOR_HOST एनवायरमेंट वैरिएबल सेट होने पर, Firebase एडमिन एसडीके, रीयलटाइम डेटाबेस एम्युलेटर से अपने-आप कनेक्ट हो जाते हैं:

export FIREBASE_DATABASE_EMULATOR_HOST="127.0.0.1:9000"

अगर आपका कोड, Cloud Functions एम्युलेटर के अंदर चल रहा है, तो initializeApp को कॉल करने पर आपका प्रोजेक्ट आईडी और अन्य कॉन्फ़िगरेशन अपने-आप सेट हो जाएंगे.

अगर आपको अपने एडमिन SDK कोड को किसी दूसरे एनवायरमेंट में चल रहे शेयर किए गए एम्युलेटर से कनेक्ट करना है, तो आपको वही प्रोजेक्ट आईडी बताना होगा जिसे आपने Firebase सीएलआई का इस्तेमाल करके सेट किया था. आपके पास किसी प्रोजेक्ट आईडी को सीधे 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);
Swift
// With a DatabaseReference, write nil to clear the database.
    Database.database().reference().setValue(nil);

Web

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

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

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

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

डेटा इंपोर्ट और एक्सपोर्ट करना

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

firebase emulators:export ./dir

टेस्ट में, एम्युलेटर स्टार्टअप पर, बेसलाइन डेटा इंपोर्ट करें.

firebase emulators:start --import=./dir

एक्सपोर्ट पाथ की जानकारी देकर या --import फ़्लैग में दिए गए पाथ का इस्तेमाल करके, एम्युलेटर को बंद होने पर डेटा एक्सपोर्ट करने का निर्देश दिया जा सकता है.

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

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

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

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

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

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

टेस्ट का सुइट चलाने के बाद, टेस्ट कवरेज रिपोर्ट ऐक्सेस की जा सकती हैं. इससे पता चलता है कि आपके हर नियम का आकलन कैसे किया गया है. रिपोर्ट पाने के लिए, एम्युलेटर के चलने के दौरान एक्सपोज़्ड एंडपॉइंट पर क्वेरी करें. ब्राउज़र-फ़्रेंडली वर्शन के लिए, इस यूआरएल का इस्तेमाल करें:

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

इससे आपके नियम, एक्सप्रेशन और सब-एक्सप्रेशन में बंट जाते हैं. ज़्यादा जानकारी के लिए, उन पर माउसओवर किया जा सकता है. इसमें, एक्ज़ीक्यूशन और रिटर्न की संख्या शामिल है. इस डेटा के रॉ JSON वर्शन के लिए, अपनी क्वेरी में यह यूआरएल शामिल करें:

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

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