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

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

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

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

रीयलटाइम डेटाबेस के साथ इंटरैक्ट करने के लिए, अपने ऐप्लिकेशन में कॉन्फ़िगरेशन या टेस्ट क्लास को इस तरह सेट अप करें.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 SDKs

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

export FIREBASE_DATABASE_EMULATOR_HOST="127.0.0.1:9000"

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

अगर आपको अपने Admin SDK कोड को किसी दूसरे एनवायरमेंट में चल रहे शेयर किए गए एम्युलेटर से कनेक्ट करना है, तो आपको वही प्रोजेक्ट आईडी तय करना होगा जिसे आपने Firebase सीएलआई का इस्तेमाल करके सेट किया था. 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>

इसके बाद क्या करना है?