अपने ऐप्लिकेशन को 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 प्रोजेक्ट के साथ काम करते समय, AdMob के साथ काम करने वाले किसी भी या सभी प्रॉडक्ट के लिए एम्युलेटर चलाए जा सकते हैं. जिन प्रॉडक्ट के लिए एम्युलेटर नहीं चलाए जा रहे हैं उनके लिए, आपके ऐप्लिकेशन और कोड, लाइव संसाधन (डेटाबेस इंस्टेंस, स्टोरेज बकेट, फ़ंक्शन वगैरह) के साथ इंटरैक्ट करेंगे. |
| डेमो |
डेमो Firebase प्रोजेक्ट में, असली Firebase कॉन्फ़िगरेशन और कोई लाइव संसाधन नहीं होते. आम तौर पर, इन प्रोजेक्ट को कोडलैब या अन्य ट्यूटोरियल के ज़रिए ऐक्सेस किया जाता है. डेमो प्रोजेक्ट के प्रोजेक्ट आईडी में, |
डेमो 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")
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); }
एम्युलेटर का इस्तेमाल करके, Realtime Database इवेंट से ट्रिगर होने वाले Cloud Functions की जांच करने के लिए, कोई अतिरिक्त सेटअप करने की ज़रूरत नहीं होती. जब Realtime Database और Cloud Functions, दोनों के एम्युलेटर चल रहे होते हैं, तो वे अपने-आप एक साथ काम करते हैं.
Admin SDKs
Firebase Admin SDKs अपने-आप Realtime Database एम्युलेटर से कनेक्ट हो जाते हैं, जब
FIREBASE_DATABASE_EMULATOR_HOST एनवायरमेंट वैरिएबल सेट होता है:
export FIREBASE_DATABASE_EMULATOR_HOST="127.0.0.1:9000"
अगर आपका कोड Cloud Functions एम्युलेटर के अंदर चल रहा है, तो आपका प्रोजेक्ट आईडी
और अन्य कॉन्फ़िगरेशन initializeApp को कॉल करते समय अपने-आप सेट हो जाएगा.
अगर आपको अपने Admin SDK कोड को किसी दूसरे एनवायरमेंट में चल रहे शेयर किए गए एम्युलेटर से कनेक्ट करना है, तो आपको वही प्रोजेक्ट आईडी तय करना होगा जिसे आपने Firebase सीएलआई का इस्तेमाल करके सेट किया था.
initializeApp में सीधे तौर पर कोई प्रोजेक्ट आईडी पास किया जा सकता है या GCLOUD_PROJECT एनवायरमेंट वैरिएबल सेट किया जा सकता है.
Node.js एडमिन 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>
इसके बाद क्या करना है?
- वीडियो के चुने गए सेट और सिलसिलेवार तरीके से निर्देश देने वाले उदाहरणों के लिए, Firebase Emulators ट्रेनिंग प्लेलिस्ट देखें.
- सुरक्षा के नियमों की जांच और Firebase Test SDK टूल के इस्तेमाल के बेहतर उदाहरणों के बारे में जानें: सुरक्षा के नियमों की जांच करना (Realtime Database).
- ट्रिगर किए गए फ़ंक्शन, आम तौर पर Realtime Database के साथ इंटिग्रेट होते हैं. इसलिए, Cloud Functions for Firebase एम्युलेटर के बारे में ज़्यादा जानने के लिए, स्थानीय तौर पर फ़ंक्शन चलाना लेख पढ़ें.