यह दस्तावेज़ डेटा को पुनर्प्राप्त करने और फायरबेस डेटा को ऑर्डर और फ़िल्टर करने के तरीके की मूल बातें शामिल करता है।
शुरू करने से पहले
इससे पहले कि आप रीयलटाइम डेटाबेस का उपयोग कर सकें, आपको निम्न की आवश्यकता होगी:
अपनी एकता परियोजना को पंजीकृत करें और इसे फायरबेस का उपयोग करने के लिए कॉन्फ़िगर करें।
यदि आपकी एकता परियोजना पहले से ही फायरबेस का उपयोग करती है, तो यह पहले से पंजीकृत है और फायरबेस के लिए कॉन्फ़िगर किया गया है।
यदि आपके पास यूनिटी प्रोजेक्ट नहीं है, तो आप एक नमूना ऐप डाउनलोड कर सकते हैं।
अपने यूनिटी प्रोजेक्ट में Firebase Unity SDK (विशेष रूप से,
FirebaseDatabase.unitypackage
) जोड़ें।
ध्यान दें कि आपके यूनिटी प्रोजेक्ट में फायरबेस को जोड़ने में फायरबेस कंसोल और आपके ओपन यूनिटी प्रोजेक्ट दोनों में कार्य शामिल हैं (उदाहरण के लिए, आप कंसोल से फायरबेस कॉन्फिग फाइल डाउनलोड करते हैं, फिर उन्हें अपने यूनिटी प्रोजेक्ट में ले जाते हैं)।
पुन: प्राप्त डेटा
Firebase डेटा या तो GetValueAsync() को एक बार कॉल करके या FirebaseDatabase
संदर्भ पर किसी ईवेंट से जोड़कर प्राप्त किया जाता है। घटना श्रोता को डेटा की प्रारंभिक स्थिति के लिए एक बार और फिर कभी भी डेटा में परिवर्तन के लिए बुलाया जाता है।
डेटाबेस संदर्भ प्राप्त करें
डेटाबेस से डेटा पढ़ने के लिए, आपको DatabaseReference
का एक उदाहरण चाहिए:
using Firebase; using Firebase.Database; using Firebase.Extensions.TaskExtension; // for ContinueWithOnMainThread public class MyScript: MonoBehaviour { void Start() { // Get the root reference location of the database. DatabaseReference reference = FirebaseDatabase.DefaultInstance.RootReference; } }
एक बार डेटा पढ़ें
आप दिए गए पथ पर एक बार सामग्री के स्थिर स्नैपशॉट को पढ़ने के लिए GetValueAsync
विधि का उपयोग कर सकते हैं। कार्य परिणाम में चाइल्ड डेटा सहित उस स्थान पर सभी डेटा वाला एक स्नैपशॉट होगा। यदि कोई डेटा नहीं है, तो लौटाया गया स्नैपशॉट null
है।
FirebaseDatabase.DefaultInstance .GetReference("Leaders") .GetValueAsync().ContinueWithOnMainThread(task => { if (task.IsFaulted) { // Handle the error... } else if (task.IsCompleted) { DataSnapshot snapshot = task.Result; // Do something with snapshot... } });
घटनाओं के लिए सुनो
आप डेटा में परिवर्तनों की सदस्यता लेने के लिए ईवेंट श्रोताओं को जोड़ सकते हैं:
आयोजन | विशिष्ट उपयोग |
---|---|
ValueChanged | पथ की संपूर्ण सामग्री में परिवर्तनों को पढ़ें और सुनें। |
ChildAdded | वस्तुओं की सूची पुनः प्राप्त करें या वस्तुओं की सूची में परिवर्धन के लिए सुनें। सूचियों में परिवर्तनों की निगरानी करने के लिए ChildChanged और ChildRemoved के साथ सुझाए गए उपयोग। |
ChildChanged | किसी सूची में आइटम्स में परिवर्तन के लिए सुनें। सूचियों में परिवर्तनों की निगरानी के लिए ChildAdded और ChildRemoved के साथ प्रयोग करें। |
ChildRemoved | सूची से निकाले जा रहे आइटमों को सुनें। सूचियों में परिवर्तनों की निगरानी करने के लिए ChildAdded और ChildChanged के साथ प्रयोग करें। |
ChildMoved | ऑर्डर की गई सूची में आइटम्स के क्रम में बदलाव के लिए सुनें। ChildMoved इवेंट हमेशा ChildChanged इवेंट का पालन करते हैं जिसके कारण आइटम का ऑर्डर बदल जाता है (आपके वर्तमान ऑर्डर-बाय मेथड के आधार पर)। |
वैल्यू चेंजेड इवेंट
आप किसी दिए गए पथ पर सामग्री के परिवर्तनों की सदस्यता लेने के लिए ValueChanged
ईवेंट का उपयोग कर सकते हैं। यह घटना एक बार ट्रिगर होती है जब श्रोता जुड़ा होता है और फिर से हर बार बच्चों सहित डेटा बदल जाता है। ईवेंट कॉलबैक एक स्नैपशॉट पारित किया जाता है जिसमें चाइल्ड डेटा सहित उस स्थान पर सभी डेटा होते हैं। यदि कोई डेटा नहीं है, तो लौटाया गया स्नैपशॉट null
है।
निम्न उदाहरण डेटाबेस से लीडरबोर्ड के स्कोर प्राप्त करने वाले गेम को प्रदर्शित करता है:
FirebaseDatabase.DefaultInstance .GetReference("Leaders") .ValueChanged += HandleValueChanged; } void HandleValueChanged(object sender, ValueChangedEventArgs args) { if (args.DatabaseError != null) { Debug.LogError(args.DatabaseError.Message); return; } // Do something with the data in args.Snapshot }
ValueChangedEventArgs
में एक DataSnapshot
होता है जिसमें घटना के समय डेटाबेस में निर्दिष्ट स्थान पर डेटा होता है। स्नैपशॉट पर कॉलिंग Value
डेटा का प्रतिनिधित्व करने वाला एक Dictionary<string, object>
देता है। यदि स्थान पर कोई डेटा मौजूद नहीं है, तो कॉल करने वाला Value
null
हो जाता है।
इस उदाहरण में, args.DatabaseError
जांच यह देखने के लिए भी की जाती है कि क्या पढ़ना रद्द कर दिया गया है। उदाहरण के लिए, यदि क्लाइंट के पास फायरबेस डेटाबेस स्थान से पढ़ने की अनुमति नहीं है, तो एक रीड को रद्द किया जा सकता है। DatabaseError
इंगित करेगी कि विफलता क्यों हुई।
आप बाद में समान पथ वाले किसी भी DatabaseReference
उपयोग करके ईवेंट से सदस्यता समाप्त कर सकते हैं। DatabaseReference
उदाहरण अल्पकालिक हैं और किसी भी पथ और क्वेरी तक पहुँचने के तरीके के रूप में सोचा जा सकता है।
FirebaseDatabase.DefaultInstance .GetReference("Leaders") .ValueChanged -= HandleValueChanged; // unsubscribe from ValueChanged. }
बाल घटनाएँ
किसी ऑपरेशन से नोड के बच्चों के साथ होने वाले विशिष्ट संचालन के जवाब में बाल घटनाओं को ट्रिगर किया जाता है जैसे Push()
विधि के माध्यम से जोड़ा गया एक नया बच्चा या UpdateChildrenAsync()
विधि के माध्यम से अद्यतन किया जा रहा बच्चा। इनमें से प्रत्येक एक साथ डेटाबेस में किसी विशिष्ट नोड में परिवर्तनों को सुनने के लिए उपयोगी हो सकता है। उदाहरण के लिए, गेम सत्र की टिप्पणियों में गतिविधि की निगरानी के लिए एक गेम इन विधियों का एक साथ उपयोग कर सकता है, जैसा कि नीचे दिखाया गया है:
var ref = FirebaseDatabase.DefaultInstance .GetReference("GameSessionComments"); ref.ChildAdded += HandleChildAdded; ref.ChildChanged += HandleChildChanged; ref.ChildRemoved += HandleChildRemoved; ref.ChildMoved += HandleChildMoved; } void HandleChildAdded(object sender, ChildChangedEventArgs args) { if (args.DatabaseError != null) { Debug.LogError(args.DatabaseError.Message); return; } // Do something with the data in args.Snapshot } void HandleChildChanged(object sender, ChildChangedEventArgs args) { if (args.DatabaseError != null) { Debug.LogError(args.DatabaseError.Message); return; } // Do something with the data in args.Snapshot } void HandleChildRemoved(object sender, ChildChangedEventArgs args) { if (args.DatabaseError != null) { Debug.LogError(args.DatabaseError.Message); return; } // Do something with the data in args.Snapshot } void HandleChildMoved(object sender, ChildChangedEventArgs args) { if (args.DatabaseError != null) { Debug.LogError(args.DatabaseError.Message); return; } // Do something with the data in args.Snapshot }
ChildAdded
इवेंट का उपयोग आमतौर पर फायरबेस डेटाबेस में आइटम्स की सूची को पुनः प्राप्त करने के लिए किया जाता है। ChildAdded
घटना प्रत्येक मौजूदा बच्चे के लिए एक बार उठाया जाता है और फिर हर बार निर्दिष्ट पथ में एक नया बच्चा जोड़ा जाता है। श्रोता को एक स्नैपशॉट पास किया जाता है जिसमें नए बच्चे का डेटा होता है।
किसी भी समय चाइल्ड नोड संशोधित होने पर ChildChanged
ईवेंट उठाया जाता है। इसमें चाइल्ड नोड के डिसेंडेंट में कोई भी संशोधन शामिल है। आइटम की सूची में परिवर्तनों का जवाब देने के लिए इसे आमतौर पर ChildAdded
और ChildRemoved
ईवेंट के संयोजन के साथ प्रयोग किया जाता है। ईवेंट श्रोता को दिए गए स्नैपशॉट में चाइल्ड के लिए अपडेट किया गया डेटा होता है।
ChildRemoved
इवेंट ट्रिगर होता है जब तत्काल चाइल्ड को हटा दिया जाता है। यह आमतौर पर ChildAdded
और ChildChanged
कॉलबैक के संयोजन के साथ प्रयोग किया जाता है। इवेंट कॉलबैक में दिए गए स्नैपशॉट में हटाए गए बच्चे के लिए डेटा होता है।
जब भी ChildMoved
इवेंट को अपडेट द्वारा उठाया जाता है, तो ChildChanged
इवेंट शुरू हो जाता है, जिससे बच्चे को फिर से व्यवस्थित किया जा सकता है। इसका उपयोग उस डेटा के साथ किया जाता है जिसे OrderByChild
या OrderByValue
के साथ ऑर्डर किया गया है।
डेटा को सॉर्ट करना और फ़िल्टर करना
आप कुंजी द्वारा, मान द्वारा, या किसी चाइल्ड के मान द्वारा सॉर्ट किए गए डेटा को पुनः प्राप्त करने के लिए रीयलटाइम डेटाबेस Query
क्लास का उपयोग कर सकते हैं। आप सॉर्ट किए गए परिणाम को विशिष्ट संख्या में परिणामों या कुंजियों या मानों की श्रेणी में भी फ़िल्टर कर सकते हैं।
डेटा क्रमबद्ध करें
सॉर्ट किए गए डेटा को पुनः प्राप्त करने के लिए, यह निर्धारित करने के लिए कि कैसे परिणाम ऑर्डर किए जाते हैं, ऑर्डर-बाय विधियों में से एक को निर्दिष्ट करके प्रारंभ करें:
तरीका | प्रयोग |
---|---|
OrderByChild() | निर्दिष्ट चाइल्ड कुंजी के मान के अनुसार परिणाम ऑर्डर करें। | OrderByKey() | चाइल्ड कुंजियों द्वारा परिणाम ऑर्डर करें। |
OrderByValue() | चाइल्ड वैल्यू के अनुसार परिणाम ऑर्डर करें। |
आप एक समय में केवल एक ऑर्डर-बाय विधि का उपयोग कर सकते हैं। ऑर्डर-बाय विधि को एक ही क्वेरी में कई बार कॉल करने से त्रुटि होती है।
निम्न उदाहरण प्रदर्शित करता है कि आप स्कोर द्वारा क्रमित स्कोर लीडरबोर्ड पर कैसे सब्सक्राइब कर सकते हैं।
FirebaseDatabase.DefaultInstance .GetReference("Leaders").OrderByChild("score") .ValueChanged += HandleValueChanged; } void HandleValueChanged(object sender, ValueChangedEventArgs args) { if (args.DatabaseError != null) { Debug.LogError(args.DatabaseError.Message); return; } // Do something with the data in args.Snapshot }
यह एक क्वेरी को परिभाषित करता है जो एक मूल्य-परिवर्तित ईवेंट श्रोता के साथ संयुक्त होने पर क्लाइंट को डेटाबेस में लीडरबोर्ड के साथ सिंक्रनाइज़ करता है, प्रत्येक प्रविष्टि के स्कोर द्वारा आदेश दिया जाता है। आप स्ट्रक्चर योर डेटाबेस में अपने डेटा को कुशलतापूर्वक संरचित करने के बारे में अधिक पढ़ सकते हैं।
OrderByChild()
विधि को कॉल परिणाम को ऑर्डर करने के लिए चाइल्ड कुंजी को निर्दिष्ट करता है। इस मामले में, परिणाम प्रत्येक बच्चे में "score"
मान के आधार पर क्रमबद्ध होते हैं। अन्य डेटा प्रकारों को कैसे क्रमित किया जाता है, इस बारे में अधिक जानकारी के लिए, क्वेरी डेटा कैसे क्रमबद्ध किया जाता है देखें।
फ़िल्टरिंग डेटा
डेटा को फ़िल्टर करने के लिए, आप किसी क्वेरी का निर्माण करते समय किसी भी सीमा या श्रेणी विधियों को ऑर्डर-बाय विधि के साथ जोड़ सकते हैं।
तरीका | प्रयोग |
---|---|
LimitToFirst() | परिणामों की आदेशित सूची की शुरुआत से लौटने के लिए अधिकतम संख्या में आइटम सेट करता है। |
LimitToLast() | परिणामों की आदेशित सूची के अंत से लौटने के लिए अधिकतम संख्या में आइटम सेट करता है। |
StartAt() | ऑर्डर-बाय विधि के आधार पर निर्दिष्ट कुंजी या मान से अधिक या उसके बराबर आइटम लौटाएं। |
EndAt() | ऑर्डर-बाय विधि के आधार पर निर्दिष्ट कुंजी या मान से कम या उसके बराबर आइटम लौटाएं। |
EqualTo() | ऑर्डर-बाय विधि के आधार पर निर्दिष्ट कुंजी या मान के बराबर आइटम लौटाएं। |
ऑर्डर-बाय विधियों के विपरीत, आप कई सीमा या श्रेणी कार्यों को जोड़ सकते हैं। उदाहरण के लिए, आप परिणामों को निर्दिष्ट मानों की सीमा तक सीमित करने के लिए StartAt()
और EndAt()
विधियों को जोड़ सकते हैं।
भले ही क्वेरी के लिए केवल एक ही मैच हो, स्नैपशॉट अभी भी एक सूची है; इसमें केवल एक आइटम है।
परिणामों की संख्या सीमित करें
किसी दिए गए कॉलबैक के लिए सिंक किए जाने वाले बच्चों की अधिकतम संख्या सेट करने के लिए आप LimitToFirst()
और LimitToLast()
विधियों का उपयोग कर सकते हैं। उदाहरण के लिए, यदि आप 100 की सीमा निर्धारित करने के लिए LimitToFirst()
उपयोग करते हैं, तो आप प्रारंभ में केवल 100 ChildAdded
कॉलबैक प्राप्त करते हैं। यदि आपके पास अपने फायरबेस डेटाबेस में 100 से कम आइटम संग्रहीत हैं, तो प्रत्येक आइटम के लिए एक ChildAdded
कॉलबैक सक्रिय होता है।
जैसे ही आइटम बदलते हैं, आप उन आइटम्स के लिए ChildAdded
कॉलबैक प्राप्त करते हैं जो क्वेरी दर्ज करते हैं और उन आइटम्स के लिए ChildRemoved
कॉलबैक प्राप्त करते हैं जो इससे बाहर हो जाते हैं ताकि कुल संख्या 100 पर बनी रहे।
उदाहरण के लिए, नीचे दिया गया कोड लीडरबोर्ड से शीर्ष स्कोर लौटाता है:
FirebaseDatabase.DefaultInstance .GetReference("Leaders").OrderByChild("score").LimitToLast(1) .ValueChanged += HandleValueChanged; } void HandleValueChanged(object sender, ValueChangedEventArgs args) { if (args.DatabaseError != null) { Debug.LogError(args.DatabaseError.Message); return; } // Do something with the data in args.Snapshot }
कुंजी या मान द्वारा फ़िल्टर करें
प्रश्नों के लिए मनमाने ढंग से प्रारंभ, समाप्ति और समतुल्य बिंदुओं को चुनने के लिए आप StartAt()
, EndAt()
, और EqualTo()
उपयोग कर सकते हैं। यह डेटा को पृष्ठांकित करने या बच्चों के साथ उन वस्तुओं को खोजने के लिए उपयोगी हो सकता है जिनका एक विशिष्ट मूल्य है।
क्वेरी डेटा कैसे ऑर्डर किया जाता है
यह खंड बताता है कि Query
वर्ग में प्रत्येक ऑर्डर-बाय विधियों द्वारा डेटा को कैसे सॉर्ट किया जाता है।
OrderByChild
OrderByChild()
का उपयोग करते समय, निर्दिष्ट बाल कुंजी वाले डेटा को निम्नानुसार आदेश दिया जाता है:
- निर्दिष्ट चाइल्ड कुंजी के लिए
null
मान वाले बच्चे पहले आते हैं। - निर्दिष्ट चाइल्ड कुंजी के लिए
false
मान वाले बच्चे आगे आते हैं। यदि एक से अधिक चिल्ड्रन का मानfalse
है, तो उन्हें कुंजी द्वारा शब्दकोष के अनुसार क्रमबद्ध किया जाता है। - निर्दिष्ट चाइल्ड कुंजी के लिए
true
मान वाले बच्चे आगे आते हैं। यदि एक से अधिक चिल्ड्रन का मानtrue
है, तो उन्हें कुंजी द्वारा शब्दकोष के अनुसार क्रमबद्ध किया जाता है। - संख्यात्मक मान वाले बच्चे आगे आते हैं, आरोही क्रम में क्रमबद्ध होते हैं। यदि निर्दिष्ट चाइल्ड नोड के लिए एकाधिक चिल्ड्रन का संख्यात्मक मान समान है, तो उन्हें कुंजी द्वारा क्रमबद्ध किया जाता है।
- तार संख्या के बाद आते हैं और आरोही क्रम में शब्दावली के अनुसार क्रमबद्ध होते हैं। यदि निर्दिष्ट चाइल्ड नोड के लिए एकाधिक चिल्ड्रन का मान समान है, तो उन्हें कुंजी द्वारा लेक्सिकोग्राफ़िक रूप से क्रमित किया जाता है।
- ऑब्जेक्ट सबसे अंत में आते हैं और आरोही क्रम में कुंजी द्वारा लेक्सिकोग्राफ़िक रूप से सॉर्ट किए जाते हैं।
OrderByKey
अपने डेटा को सॉर्ट करने के लिए OrderByKey()
उपयोग करते समय, डेटा को कुंजी द्वारा आरोही क्रम में लौटाया जाता है।
- एक कुंजी वाले बच्चे जिन्हें 32-बिट पूर्णांक के रूप में पार्स किया जा सकता है, पहले आते हैं, आरोही क्रम में क्रमबद्ध होते हैं।
- उनकी कुंजी के रूप में एक स्ट्रिंग मान वाले बच्चे आगे आते हैं, आरोही क्रम में लेक्सिकोग्राफ़िक रूप से क्रमबद्ध होते हैं।
OrderByValue
OrderByValue()
उपयोग करते समय, बच्चों को उनके मूल्य द्वारा आदेश दिया जाता है। ऑर्डरिंग मानदंड OrderByChild()
के समान हैं, नोड के मूल्य को छोड़कर निर्दिष्ट चाइल्ड कुंजी के मान के बजाय उपयोग किया जाता है।