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

अपने ऐप्लिकेशन को Realtime Database एम्युलेटर से कनेक्ट करने से पहले, पक्का करें कि आपको 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 प्रोजेक्ट बनाए बिना भी चलाया जा सकता है
  • ज़्यादा सुरक्षा, क्योंकि अगर आपका कोड गलती से ऐसे रिसॉर्स को कॉल करता है जो एम्युलेट नहीं किए गए हैं (प्रोडक्शन), तो डेटा में बदलाव, इस्तेमाल, और बिलिंग की कोई संभावना नहीं होती
  • ऑफ़लाइन मोड में बेहतर सहायता मिलती है, क्योंकि एसडीके कॉन्फ़िगरेशन को डाउनलोड करने के लिए इंटरनेट ऐक्सेस करने की ज़रूरत नहीं होती.

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

Android, Apple प्लैटफ़ॉर्म, और वेब एसडीके

Realtime Database के साथ इंटरैक्ट करने के लिए, इन-ऐप्लिकेशन कॉन्फ़िगरेशन या टेस्ट क्लास को इस तरह सेट अप करें.

Kotlin
// 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")
Unity
// Connects to the RTDB Emulator running on port 9000.
// Note: You may need to append your namespace: "?ns=YOUR_PROJECT_ID"
FirebaseDatabase database = FirebaseDatabase.GetInstance("http://127.0.0.1:9000");

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 Functions को टेस्ट करने के लिए, किसी अन्य सेटअप की ज़रूरत नहीं होती. जब रीयलटाइम डेटाबेस और Cloud Functions के एमुलेटर, दोनों चल रहे हों, तो वे अपने-आप एक साथ काम करते हैं.

Admin SDK से॰

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

export FIREBASE_DATABASE_EMULATOR_HOST="127.0.0.1:9000"

अगर आपका कोड 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"

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

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

Kotlin
// 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);

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

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

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

डेटाबेस और 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 से मिले विज़ुअलाइज़ेशन टूल और रिपोर्ट का इस्तेमाल किया जा सकता है.

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

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

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

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

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

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

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