Veri Alma

Bu dokümanda, veri almayla ilgili temel bilgiler ile sıralama ve filtreleme açıklanmaktadır. Firebase verileri.

Başlamadan önce

Kullanmadan önce Gerçek Zamanlı Veritabanı, Yapmanız gerekenler:

  • Unity projenizi kaydedin ve Firebase'i kullanacak şekilde yapılandırın.

    • Unity projeniz zaten Firebase kullanıyorsa kaydedilip yapılandırıldı.

    • Unity projeniz yoksa şunu indirebilirsiniz: örnek uygulama.

  • Firebase Unity SDK'sını (özellikle, FirebaseDatabase.unitypackage) derleyip toparlarsınız.

ziyaret edin.

Firebase'i Unity projenize eklemenin hem Firebase konsolunda ve açık Unity projenizde (örneğin, Firebase yapılandırma dosyalarını konsoldan indirip bu dosyalara bunları Unity projenize ekleyin).

Veri Alma

Firebase verileri, bir defalık GetValueAsync() çağrısıyla veya FirebaseDatabase referansındaki bir etkinliğe ekleyerek. Etkinlik işleyici bir kez çağrılmasını sağlar.

Veritabanı Referansı Alma

Veritabanındaki verileri okumak için DatabaseReference örneği gerekir:

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;
  }
}

Verileri bir kez oku

Şu öğenin statik anlık görüntüsünü okumak için GetValueAsync yöntemini kullanabilirsiniz: belirli bir yoldaki içeriği bir kez. Görev sonucu bir anlık görüntü içerecek çocuk verileri de dahil olmak üzere söz konusu konumdaki tüm verileri içeren. Veri yoksa döndürülen anlık görüntü 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...
        }
      });

Etkinlikleri dinleyin

Verilerde yapılan değişikliklere abone olmak için etkinlik işleyiciler ekleyebilirsiniz:

Etkinlik Tipik kullanım
ValueChanged Bir yolun tüm içeriğindeki değişiklikleri okuma ve dinleme.
ChildAdded Öğe listelerini alın veya öğe listesine yapılan eklemeleri dinleyin. ChildChanged ve ile önerilen kullanım Listelerde yapılan değişiklikleri izlemek için ChildRemoved.
ChildChanged Listedeki öğelerde yapılan değişiklikleri bekleyin. Şununla kullan: İzlenecek ChildAdded ve ChildRemoved listeler.
ChildRemoved Bir listeden kaldırılan öğeleri bekleyin. Şununla kullan: İzlenecek ChildAdded ve ChildChanged listeler.
ChildMoved Sıralı listedeki öğelerin sırasındaki değişiklikleri bekleyin. ChildMoved etkinlik her zaman şunları takip eder: Öğenin siparişinin verilmesine neden olan ChildChanged etkinlik (geçerli sıralama yönteminize göre).

ValueChanged etkinliği

Şunlardaki değişikliklere abone olmak için ValueChanged etkinliğini kullanabilirsiniz: belirli bir yoldaki içerikler. Bu etkinlik, işleyici şu anda bir kez eklenir ve çocuklar da dahil olmak üzere veriler her değiştiğinde tekrar eklenir. Etkinlik geri çağırması, aşağıdakiler de dahil olmak üzere söz konusu konumdaki tüm verileri içeren bir anlık görüntü aktarılır: alt verileri. Veri yoksa döndürülen anlık görüntü null olur.

Aşağıdaki örnekte, bir skor tablosunun skorlarını alan bir oyun gösterilmektedir kaldırın:

      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 Etkinlik sırasında veritabanında belirtilen konumu. Value aranıyor verileri temsil eden bir Dictionary<string, object> döndürür. Konumda veri yoksa Value işlevinin çağrılması null sonucunu döndürür.

Bu örnekte args.DatabaseError, okunan içeriğin iptal edildi. Örneğin, istemcinin Firebase veritabanı konumundan okuma izni. DatabaseError, hatanın neden oluştuğunu belirtir.

Daha sonra,DatabaseReference gerekir. DatabaseReference örnekleri geçicidir ve düşünülebilir bir erişim yolu olarak görür.

      FirebaseDatabase.DefaultInstance
        .GetReference("Leaders")
        .ValueChanged -= HandleValueChanged; // unsubscribe from ValueChanged.
    }

Alt etkinlikler

Alt etkinlikler, Bir işlemdeki düğümün alt öğeleridir (ör. Push() yöntemi veya UpdateChildrenAsync() aracılığıyla güncellenen bir alt öğe yöntemidir. Bunların her biri birlikte projedeki değişiklikleri dinlemek için bir düğümden geliyor. Örneğin, bir oyunda bu yöntemler kullanılabilir aşağıdaki gibi bir oyun oturumuna ait yorumlardaki etkinliği izlemek için aşağıdaki adımları uygulayın:

      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 etkinliği genellikle öğeleri eklemesi gerekir. ChildAdded etkinliği bir kez tetiklendi devam eder ve ardından belirtilen yol. İşleyiciye, yeni alt öğenin dışı verilerdir.

Bir alt düğüm her değiştirildiğinde ChildChanged etkinliği tetiklenir. Buna alt düğümün alt öğelerinde yapılan değişiklikler de dahildir. Evet genellikle ChildAdded ve ChildRemoved ile birlikte kullanılır yanıt vermek için kullanabileceğiniz etkinliklerdir. etkinlik işleyici alt öğe için güncellenmiş verileri içerir.

Hemen bir alt öğe kaldırıldığında ChildRemoved etkinliği tetiklenir. Genellikle ChildAdded ve ChildChanged geri arama. Etkinlik geri çağırmasına iletilen anlık görüntü, geri bildirime olanak tanır.

ChildMoved etkinliği, ChildChanged her etkinleştiğinde etkinlik, alt öğenin yeniden sıralanmasına neden olan bir güncelleme tarafından tetikleniyor. Evet OrderByChild veya OrderByValue ile sıralanmış verilerle kullanılır.

Verileri sıralama ve filtreleme

Verileri sıralama ölçütü olarak almak için Realtime Database Query sınıfını kullanabilirsiniz değerine veya bir alt öğe değerine göre düzenleyebilirsiniz. Mevcut içeriklerinize göre sıralanmış sonucu belirli sayıda sonuç veya anahtar aralığı ya da değerler.

Verileri sırala

Sıralanmış verileri almak için öncelikle sıralamaya göre yöntemlerden birini belirterek sonuçların nasıl sıralandığını belirler:

Yöntem Kullanım
OrderByChild() Sonuçları, belirtilen bir alt anahtarın değerine göre sıralayın.
OrderByKey() Sonuçları alt anahtarlara göre sıralayın.
OrderByValue() Sonuçları alt değerlere göre sıralayın.

Aynı anda yalnızca bir sıralama yöntemi kullanabilirsiniz. Tek tek sıralama yöntemini çağırma işlemi birden çok kez tekrarlanırsa hata verir.

Aşağıdaki örnekte, bir skoru nasıl abone olabileceğiniz gösterilmektedir skora göre sıralanmış skor tablosu.

      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
    }

Bu, valuechanged etkinlik işleyici ile birleştirildiğinde istemciyi veritabanındaki leaderboard ile senkronize eder, her bir girişin puanını kontrol edin. Verilerinizi verimli bir şekilde yapılandırma hakkında daha fazla bilgi edinmek için Veritabanınızı Yapılandırma.

OrderByChild() yöntemine yapılan çağrı, arama sonuçlarını görebilirsiniz. Bu durumda sonuçlar, "score" değerine göre sıralanır. her bir alt öğedeki değere bakacağız. Diğer veri türlerinin nasıl sıralandığı hakkında daha fazla bilgi için Sorgu verileri nasıl sıralanır? bölümüne bakın.

Veri filtreleme

Verileri filtrelemek için sınır veya aralık yöntemlerinden herhangi birini, yönteme göre sırala.

Yöntem Kullanım
LimitToFirst() Döndürülecek maksimum öğe sayısını sıralı sonuç listesi.
LimitToLast() Siparişin sonundan itibaren iade edilecek maksimum öğe sayısını ayarlar sonuç listesi.
StartAt() Belirtilen anahtar veya değerden büyük veya ona eşit olan öğeleri döndür seçilen yönteme göre değişir.
EndAt() Belirtilen anahtar veya değerden düşük veya ona eşit öğeleri döndür seçilen yönteme göre değişir.
EqualTo() Belirtilen anahtara veya değere eşit olan öğeleri döndür seçilen yönteme göre değişir.

Sıralama ölçütü yöntemlerinden farklı olarak birden çok sınırlama veya aralık işlevini birleştirebilirsiniz. Örneğin, kullanıcı sayısını sınırlandırmak için StartAt() ve EndAt() yöntemlerini birleştirebilirsiniz. sonuçları belirli bir değer aralığına göre ayarlar.

Sorgu için tek bir eşleşme olsa bile anlık görüntü hâlâ bir liste, tek bir öğe içeriyor.

Sonuç sayısını sınırlandırın

Şu değeri ayarlamak için LimitToFirst() ve LimitToLast() yöntemlerini kullanabilirsiniz: belirli bir geri çağırma için senkronize edilecek maksimum alt öğe sayısı. Örneğin, 100'lük bir sınır belirlemek için LimitToFirst() kullanıyorsanız başlangıçta yalnızca 100 ChildAdded geri çağırma. Hesabınızda depoladığınız öğe sayısı 100'den azsa Firebase veritabanını kullanıyorsanız her öğe için bir ChildAdded geri çağırması tetiklenir.

Öğeler değiştikçe şuna giren öğeler için ChildAdded geri çağırma alırsınız: ve ChildRemoved geri çağırmasına olanak tanır. Böylece, toplam sayı 100'de kalıyor.

Örneğin, aşağıdaki kod, bir leaderboard'daki en yüksek skoru döndürür:

      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
    }

Anahtar veya değere göre filtreleyin

İsteğe bağlı seçimi yapmak için StartAt(), EndAt() ve EqualTo() kullanabilirsiniz Sorgular için başlangıç, bitiş ve denklik noktaları. Bu özellik, veya belirli bir değere sahip olan öğeleri bulmanıza yardımcı olur.

Sorgu verileri nasıl sıralanır?

Bu bölümde, verilerin her bir yönteme göre nasıl sıralandığı açıklanmaktadır. Query sınıf.

OrderByChild

OrderByChild() kullanılırken belirtilen alt anahtarı içeren veriler şu şekilde sıralanmıştır:

  1. Belirtilen alt anahtar için null değerine sahip alt öğeler gelir tıklayın.
  2. Belirtilen alt anahtar için false değerine sahip alt öğeler bir sonraki adımımız var. Birden fazla çocuk false değerine sahipse anahtara göre sözlüksel olarak sıralanır.
  3. Belirtilen alt anahtar için true değerine sahip alt öğeler bir sonraki adımımız var. Birden fazla çocuk true değerine sahipse anahtar kelimelere göre sıralanması.
  4. Sayısal değere sahip olan alt öğeler artan düzende sıralanır. Eğer birden fazla alt öğe, belirtilen alt öğe için aynı sayısal değere sahip anahtara göre sıralanırlar.
  5. Dizeler sayılardan sonra gelir ve sözlüksel olarak artan düzende sıralanır. sipariş. Belirtilen alt öğe için aynı değere sahip birden fazla alt öğe varsa bu terimler sözlüksel olarak anahtara göre sıralanır.
  6. Nesneler son sırada gelir ve anahtara göre sözlüksel olarak artan düzende sıralanır.

OrderByKey

Verilerinizi sıralamak için OrderByKey() kullandığınızda veriler artan düzende döndürülür anahtara göre.

  1. 32 bit tam sayı olarak ayrıştırılabilen bir anahtarı olan alt öğeler önce gelir ve artan düzende sıralanır.
  2. Anahtarlarında dize değeri olan alt öğeler sıradaki sırayla, sözlüksel olarak artan düzende sıralanır.

OrderByValue

OrderByValue() kullanılırken alt öğeler değerlerine göre sıralanır. Sıralama ölçütleri, OrderByChild() ile aynıdır. Tek fark, düğümün değerinin belirtilen bir alt anahtarın değeri yerine kullanılır.