डाटा लिया जा रहा है

इस दस्तावेज़ में डेटा पुनर्प्राप्त करने की मूल बातें और Firebase डेटा को ऑर्डर और फ़िल्टर करने का तरीका शामिल है।

शुरू करने से पहले

इससे पहले कि आप उपयोग कर सकते हैं रीयलटाइम डाटाबेस , आप की जरूरत है:

  • अपना एकता प्रोजेक्ट पंजीकृत करें और इसे फायरबेस का उपयोग करने के लिए कॉन्फ़िगर करें।

    • अगर आपका यूनिटी प्रोजेक्ट पहले से ही फायरबेस का उपयोग करता है, तो यह पहले से पंजीकृत है और फायरबेस के लिए कॉन्फ़िगर किया गया है।

    • यदि आप एक एकता परियोजना की जरूरत नहीं है, तो आप एक डाउनलोड कर सकते हैं नमूना एप्लिकेशन

  • जोड़े में Firebase एकता एसडीके (विशेष रूप से, FirebaseDatabase.unitypackage ) अपने एकता परियोजना के लिए।

ध्यान रखें कि आपके एकता परियोजना के लिए Firebase जोड़ने दोनों में कार्य शामिल है Firebase सांत्वना और अपने खुले एकता परियोजना में (उदाहरण के लिए, आप Firebase config फ़ाइलों कंसोल से डाउनलोड, फिर उन्हें अपने एकता परियोजना में ले जाते हैं)।

पुन: प्राप्त डेटा

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 भी अगर पढ़ने को रद्द कर दिया गया है यह देखने के लिए जांच की जाती है। उदाहरण के लिए, यदि क्लाइंट के पास Firebase डेटाबेस स्थान से पढ़ने की अनुमति नहीं है, तो एक पठन रद्द किया जा सकता है। 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 घटना आम तौर पर एक Firebase डेटाबेस में मदों की एक सूची प्राप्त करने के लिए किया जाता है। 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
    }

यह एक प्रश्न है कि जब एक साथ संयुक्त परिभाषित करता है valuechanged घटना श्रोता डेटाबेस में लीडरबोर्ड, प्रत्येक प्रविष्टि के स्कोर द्वारा आदेश दिया साथ ग्राहक सिंक्रनाइज़ करता है। आप में कुशलता से अपने डेटा संरचना बनाने के बारे में और अधिक पढ़ सकते हैं आपका डाटाबेस संरचना

करने के लिए कॉल OrderByChild() विधि द्वारा परिणाम ऑर्डर करने के लिए बच्चे कुंजी निर्दिष्ट करता है। इस मामले में, परिणामों के मूल्य द्वारा हल कर रहे हैं "score" प्रत्येक बच्चे में मूल्य। कैसे अन्य डेटा प्रकार का आदेश दिया जाता के बारे में अधिक जानकारी के लिए, क्वेरी डेटा कैसे निर्धारित होता है

फ़िल्टरिंग डेटा

डेटा फ़िल्टर करने के लिए, आप क्वेरी बनाते समय किसी भी सीमा या श्रेणी विधियों को ऑर्डर-बाय विधि के साथ जोड़ सकते हैं।

तरीका प्रयोग
LimitToFirst() परिणामों की क्रमबद्ध सूची की शुरुआत से लौटने के लिए अधिकतम आइटम सेट करता है।
LimitToLast() परिणामों की आदेशित सूची के अंत से लौटने के लिए आइटम की अधिकतम संख्या सेट करता है।
StartAt() चुनी गई ऑर्डर-बाय विधि के आधार पर निर्दिष्ट कुंजी या मान से अधिक या उसके बराबर आइटम लौटाएं।
EndAt() चुनी गई ऑर्डर-बाय विधि के आधार पर निर्दिष्ट कुंजी या मान से कम या उसके बराबर आइटम लौटाएं।
EqualTo() चुनी गई ऑर्डर-बाय विधि के आधार पर निर्दिष्ट कुंजी या मान के बराबर आइटम लौटाएं।

ऑर्डर-बाय विधियों के विपरीत, आप कई सीमा या श्रेणी कार्यों को जोड़ सकते हैं। उदाहरण के लिए, आप को जोड़ सकते हैं StartAt() और EndAt() मूल्यों के एक निर्धारित श्रृंखला के लिए परिणामों को सीमित करने के लिए तरीके।

यहां तक ​​कि जब क्वेरी के लिए केवल एक मैच होता है, तब भी स्नैपशॉट एक सूची होती है; इसमें सिर्फ एक ही आइटम होता है।

परिणामों की संख्या सीमित करें

आप उपयोग कर सकते हैं LimitToFirst() और LimitToLast() बच्चों को दिए गए कॉलबैक के लिए सिंक करने की अधिकतम संख्या निर्धारित करने के लिए तरीके। उदाहरण के लिए, यदि आप का उपयोग LimitToFirst() 100 की एक सीमा निर्धारित करने के लिए, आप शुरू में केवल 100 प्राप्त ChildAdded कॉलबैक। आप 100 से कम अपने Firebase डेटाबेस, एक में संग्रहीत आइटम है, तो 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() , डेटा होता है कि निर्दिष्ट बच्चे कुंजी इस प्रकार का आदेश दिया जाता है:

  1. एक के साथ बच्चे null निर्दिष्ट बच्चे कुंजी के लिए मूल्य पहले आओ।
  2. के एक मूल्य के साथ बच्चे false निर्दिष्ट बच्चे कुंजी के लिए अगले आते हैं। कई बच्चों के एक मूल्य है, तो false है, वे हल कर रहे हैं कोषगत कुंजी के द्वारा।
  3. के एक मूल्य के साथ बच्चे true निर्दिष्ट बच्चे कुंजी के लिए अगले आते हैं। कई बच्चों के एक मूल्य है, तो true है, वे कुंजी द्वारा कोषगत हल कर रहे हैं।
  4. आरोही क्रम में क्रमबद्ध, संख्यात्मक मान वाले बच्चे आगे आते हैं। यदि निर्दिष्ट चाइल्ड नोड के लिए कई बच्चों का संख्यात्मक मान समान है, तो उन्हें कुंजी द्वारा क्रमबद्ध किया जाता है।
  5. स्ट्रिंग्स संख्याओं के बाद आती हैं और आरोही क्रम में लेक्सिकोग्राफ़िक रूप से क्रमबद्ध की जाती हैं। यदि निर्दिष्ट चाइल्ड नोड के लिए कई बच्चों का मान समान है, तो उन्हें कुंजी द्वारा लेक्सिकोग्राफ़िक रूप से आदेश दिया जाता है।
  6. वस्तुएं अंतिम आती हैं और आरोही क्रम में कुंजी द्वारा लेक्सिकोग्राफिक रूप से क्रमबद्ध की जाती हैं।

OrderByKey

का उपयोग करते समय OrderByKey() अपने डेटा को सॉर्ट करने, डेटा कुंजी के द्वारा आरोही क्रम में दिया जाता है।

  1. 32-बिट पूर्णांक के रूप में पार्स की जा सकने वाली कुंजी वाले बच्चे पहले आते हैं, आरोही क्रम में क्रमबद्ध होते हैं।
  2. स्ट्रिंग मान वाले बच्चे उनकी कुंजी के रूप में आगे आते हैं, आरोही क्रम में लेक्सिकोग्राफ़िक रूप से क्रमबद्ध होते हैं।

OrderByValue

का उपयोग करते समय OrderByValue() , बच्चों को उनके मूल्य द्वारा आदेश दिया गया है। आदेश मापदंड में जैसे ही हैं OrderByChild() , को छोड़कर नोड के मूल्य एक निर्दिष्ट बच्चे कुंजी के मूल्य के बजाय प्रयोग किया जाता है।