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

अपने ऐप्लिकेशन को 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 प्लैटफ़ॉर्म, और Web SDK

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

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 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+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);

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

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

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

डेटाबेस और 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>

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