अपने ऐप्लिकेशन को 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 कॉन्फ़िगरेशन और कोई लाइव संसाधन नहीं होता. आम तौर पर, इन प्रोजेक्ट को कोडलैब या अन्य ट्यूटोरियल की मदद से ऐक्सेस किया जाता है. डेमो प्रोजेक्ट के प्रोजेक्ट आईडी में |
डेमो Firebase प्रोजेक्ट के साथ काम करते समय, आपके ऐप्लिकेशन और कोड, सिर्फ़ एमुलेटर के साथ इंटरैक्ट करते हैं. अगर आपका ऐप्लिकेशन किसी ऐसे संसाधन के साथ इंटरैक्ट करने की कोशिश करता है जिसका कोई एमुलेटर नहीं चल रहा है, तो वह कोड काम नहीं करेगा. |
हमारा सुझाव है कि जहां भी हो सके वहां डेमो प्रोजेक्ट का इस्तेमाल करें. इसके ये फ़ायदे हैं:
- आसान सेटअप, क्योंकि Firebase प्रोजेक्ट बनाए बिना ही एमुलेटर चलाए जा सकते हैं
- ज़्यादा सुरक्षित, क्योंकि अगर आपका कोड गलती से एमुलेट किए गए (प्रोडक्शन) संसाधनों को ट्रिगर करता है, तो डेटा में बदलाव, इस्तेमाल, और बिलिंग की संभावना नहीं होती
- बेहतर ऑफ़लाइन सहायता, क्योंकि SDK टूल का कॉन्फ़िगरेशन डाउनलोड करने के लिए, इंटरनेट का ऐक्सेस करने की ज़रूरत नहीं होती.
एमुलेटर से बात करने के लिए, अपने ऐप्लिकेशन को इंस्ट्रूमेंट करना
Android, Apple प्लैटफ़ॉर्म, और वेब 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>
आगे क्या करना है?
- वीडियो के चुने गए सेट और सिलसिलेवार निर्देशों के उदाहरणों के लिए, Firebase एमुलेटर ट्रेनिंग प्लेलिस्ट देखें.
- सुरक्षा नियमों की जांच करने और Firebase Test SDK टूल से जुड़े बेहतर इस्तेमाल के उदाहरणों की जांच करें: सुरक्षा नियमों की जांच करना (रीयल टाइम डेटाबेस).
- ट्रिगर किए गए फ़ंक्शन, Realtime Database के साथ सामान्य इंटिग्रेशन होते हैं. इसलिए, Cloud Functions for Firebase एमुलेटर के बारे में ज़्यादा जानने के लिए, फ़ंक्शन को स्थानीय तौर पर चलाएं पर जाएं.