Ten dokument zawiera podstawowe informacje o pobieraniu danych oraz ich porządkowaniu i filtrowaniu. danych Firebase.
Zanim zaczniesz
Zanim będzie można użyć Realtime Database, musisz:
Zarejestruj projekt Unity i skonfiguruj go pod kątem korzystania z Firebase.
Jeśli Twój projekt w Unity korzysta już z Firebase, zarejestrowane i skonfigurowane w Firebase.
Jeśli nie masz projektu Unity, możesz pobrać przykładowej aplikacji.
Dodaj pakiet SDK Firebase Unity (w szczególności
FirebaseDatabase.unitypackage
) do swojego projektu w Unity.
Pamiętaj, że dodanie Firebase do projektu Unity wymaga wykonania zadań zarówno w Firebase i w otwartym projekcie Unity (np. pobierasz z konsoli pliki konfiguracyjne Firebase, do swojego projektu Unity).
Pobieram dane
Dane Firebase są pobierane przez jednorazowe wywołanie GetValueAsync() lub
dołączanie do wydarzenia w pliku referencyjnym FirebaseDatabase
. Detektor zdarzeń to
jest wywoływane raz dla początkowego stanu danych i ponownie przy każdej zmianie.
Pobieranie odniesienia do bazy danych
Aby odczytać dane z bazy danych, potrzebujesz instancji 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; } }
Odczytaj dane raz
Za pomocą metody GetValueAsync
możesz odczytać statyczny zrzut
treści w danej ścieżce. Wynik zadania będzie zawierał zrzut
który zawiera wszystkie dane w tej lokalizacji, w tym dane podrzędne. Jeśli nie ma danych,
zwrócony zrzut to 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... } });
Nasłuchiwanie zdarzeń
Możesz dodać detektory zdarzeń, aby subskrybować zmiany danych:
Zdarzenie | Typowe zastosowanie |
---|---|
ValueChanged |
Odczyt i nasłuchiwanie zmian w całej zawartości ścieżki. |
ChildAdded
| Pobieranie list elementów lub słuchanie, czy dodano elementy do listy.
Sugerowane zastosowanie z tymi funkcjami: ChildChanged i
ChildRemoved , aby monitorować zmiany na listach. |
ChildChanged |
Wykrywaj zmiany wprowadzone w elementach na liście. Używaj z
ChildAdded i ChildRemoved do monitorowania
zmian na listach. |
ChildRemoved |
Nasłuchuj elementów usuwanych z listy. Używaj z
ChildAdded i ChildChanged do monitorowania
zmian na listach. |
ChildMoved |
Wykrywaj zmiany kolejności elementów na liście uporządkowanej.
Zdarzenia typu ChildMoved zawsze występują po
ChildChanged zdarzenie, które spowodowało zamówienie tego produktu na
(w zależności od bieżącej metody sortowania). |
Zdarzenie ValueChanged
Możesz użyć zdarzenia ValueChanged
, aby zasubskrybować informacje o zmianach w usłudze
treści na danej ścieżce. To zdarzenie jest wywoływane raz, gdy detektor
za każdym razem, gdy dane, w tym elementy podrzędne, zostaną zmienione. Wywołanie zwrotne zdarzenia jest przekazywane do zrzutu zawierającego wszystkie dane w tej lokalizacji, w tym
danych dziecka. Jeśli nie ma danych, zwrócony zrzut ma wartość null
.
Przykład poniżej przedstawia grę, która pobiera wyniki z tabeli wyników z bazy danych:
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
zawiera element DataSnapshot
zawierający dane w
określoną lokalizację w bazie danych w momencie wystąpienia zdarzenia. Dzwonię pod Value
zwraca wartość Dictionary<string, object>
reprezentującą dane.
Jeśli w danej lokalizacji nie ma danych, wywołanie funkcji Value
zwróci wartość null
.
W tym przykładzie funkcja args.DatabaseError
jest również sprawdzana w celu sprawdzenia, czy odczyt
anulowano. Odczyt można anulować na przykład, jeśli klient nie ma
uprawnienia do odczytu z lokalizacji bazy danych Firebase. DatabaseError
poinformuje o przyczynie wystąpienia błędu.
Później możesz anulować subskrypcję tego wydarzenia za pomocą dowolnej usługi DatabaseReference
, która ma
tę samą ścieżkę. DatabaseReference
instancja jest efemeryczna i można ją rozważyć
jako sposób na dostęp do dowolnej ścieżki i zapytania.
FirebaseDatabase.DefaultInstance .GetReference("Leaders") .ValueChanged -= HandleValueChanged; // unsubscribe from ValueChanged. }
Zdarzenia podrzędne
Zdarzenia podrzędne są wywoływane w reakcji na określone operacje
elementu podrzędnego węzła pochodzącego z operacji, takiej jak nowy element podrzędny dodany za pomocą funkcji
Metoda Push()
lub element podrzędny aktualizowany za pomocą interfejsu UpdateChildrenAsync()
. Każda z tych opcji może być przydatna do słuchania zmian
konkretnego węzła w bazie danych. Na przykład gra może używać tych metod
aby monitorować aktywność w komentarzach do sesji gry, jak pokazano poniżej:
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 }
Zdarzenie ChildAdded
jest zwykle używane do pobierania listy
elementy w bazie danych Firebase. Zdarzenie ChildAdded
jest wywoływane jednokrotnie
dla każdego istniejącego dziecka, a następnie za każdym razem, gdy do grupy
w podanej ścieżce. Odbiornik jest przekazywany do zrzutu zawierającego parametr nowego wydawcy podrzędnego
i skalowalnych danych.
Zdarzenie ChildChanged
jest wywoływane po każdej modyfikacji węzła podrzędnego.
Obejmuje to wszelkie modyfikacje elementów podrzędnych węzła podrzędnego. Jest
zwykle używane w połączeniu z ChildAdded
i ChildRemoved
zdarzenia w odpowiedzi na zmiany na liście elementów. Zrzut przekazany do
detektor zdarzeń zawiera zaktualizowane dane elementu podrzędnego.
Zdarzenie ChildRemoved
jest wyzwalane po usunięciu natychmiastowego elementu podrzędnego.
Jest zwykle używany w połączeniu z parametrami ChildAdded
i
ChildChanged
wywołań zwrotnych. Zrzut przekazany do wywołania zwrotnego zdarzenia zawiera
dane usuniętego konta dziecka.
Zdarzenie ChildMoved
jest wywoływane zawsze, gdy ChildChanged
jest wywoływane przez aktualizację, która powoduje zmianę kolejności elementu podrzędnego. Jest
używane z danymi uporządkowanych według: OrderByChild
lub OrderByValue
.
Sortowanie i filtrowanie danych
Możesz użyć klasy Realtime Database Query
, aby pobrać dane posortowane według
według klucza, wartości lub wartości elementu podrzędnego. Możesz też filtrować
posortowany wynik do określonej liczby wyników lub zakresu kluczy albo
.
Sortowanie danych
Aby pobrać posortowane dane, zacznij od określenia jednej z metod Określanie kolejności wyników:
Metoda | Wykorzystanie |
---|---|
OrderByChild() |
Uporządkuj wyniki według wartości określonego klucza podrzędnego. |
OrderByKey()
| Uporządkuj wyniki według kluczy podrzędnych. |
OrderByValue() |
Uporządkuj wyniki według wartości podrzędnych. |
W danym momencie możesz używać tylko jednej metody sortowania. Wywoływanie kolejności według metody które kilka razy wywoła to samo zapytanie, spowoduje zgłoszenie błędu.
Ten przykład pokazuje, jak zasubskrybować wynik Tabela wyników posortowana według wyniku.
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 }
Definiuje zapytanie, które w połączeniu z detektorem zdarzeń valuechanged synchronizuje klienta z tabelą wyników w bazie danych w kolejności według punkty za każde zadanie. Więcej informacji na temat efektywnego porządkowania danych znajdziesz w Utwórz strukturę bazy danych.
Wywołanie metody OrderByChild()
określa klucz podrzędny, aby uporządkować
według. W tym przypadku wyniki są sortowane według wartości parametru "score"
wartości w każdym elemencie podrzędnym. Aby dowiedzieć się więcej o kolejności innych typów danych,
przeczytaj artykuł o porządkowaniu danych w zapytaniach.
Filtrowanie danych
Aby filtrować dane, możesz połączyć dowolne metody limitów lub zakresów za pomocą funkcji kolejność według metody podczas tworzenia zapytania.
Metoda | Wykorzystanie |
---|---|
LimitToFirst() |
Określa maksymalną liczbę elementów do zwrócenia od początku wartości uporządkowana lista wyników. |
LimitToLast() |
Określa maksymalną liczbę produktów do zwrócenia od końca zamówionego produktu z listą wyników. |
StartAt() |
Zwraca elementy większe lub równe określonemu kluczowi lub wartościowi w zależności od wybranej metody sortowania. |
EndAt() |
Zwraca elementy mniejsze lub równe podanej wartości klucza bądź wartości w zależności od wybranej metody sortowania. |
EqualTo() |
Zwraca elementy równe określonemu kluczowi lub określonej wartości w zależności od wybranej metody sortowania. |
W przeciwieństwie do metod sortowania według kolejności można łączyć wiele funkcji ograniczeń lub zakresu.
Możesz na przykład połączyć metody StartAt()
i EndAt()
, aby ograniczyć
wyniki do określonego zakresu wartości.
Nawet jeśli dla zapytania znaleziono tylko jedno dopasowanie, zrzut nie zmienia się listę; zawiera tylko jeden element.
Ogranicz liczbę wyników
Możesz użyć metod LimitToFirst()
i LimitToLast()
, aby ustawić
maksymalna liczba dzieci do zsynchronizowania w przypadku danego wywołania zwrotnego. Na przykład, jeśli
używasz aplikacji LimitToFirst()
, aby ustawić limit wynoszący 100, początkowo otrzymasz tylko
do 100 wywołań zwrotnych ChildAdded
. Jeśli na
bazy danych Firebase, dla każdego elementu uruchamia się wywołanie zwrotne ChildAdded
.
W miarę zmiany elementów otrzymujesz ChildAdded
wywołań zwrotnych dla elementów, które zostały wprowadzone
oraz wywołania zwrotne ChildRemoved
dla elementów, które z niego opuszczają, tak aby
łączna liczba pozostaje na poziomie 100.
Na przykład poniższy kod zwraca najlepszy wynik z tabeli wyników:
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 }
Filtruj według klucza lub wartości
Możesz użyć dowolnych danych StartAt()
, EndAt()
i EqualTo()
początkowym, końcowym i równoważnym dla zapytań. Może to być przydatne dla:
dzielenie danych na strony lub znajdowanie elementów z dziećmi, które mają określoną wartość.
Sposób porządkowania danych zapytań
W tej sekcji omówiono sposób sortowania danych według poszczególnych metod
Query
zajęcia.
OrderByChild
Gdy używasz OrderByChild()
, dane zawierające określony klucz podrzędny są
w następującej kolejności:
- Elementy podrzędne z wartością
null
określonego klucza podrzędnego są dostarczane . - Elementy podrzędne z wartością
false
określonego klucza podrzędnego co dalej. Jeśli kilka elementów podrzędnych ma wartośćfalse
, są one posortowane leksykograficznie według klucza. - Elementy podrzędne z wartością
true
określonego klucza podrzędnego co dalej. Jeśli kilka elementów podrzędnych ma wartośćtrue
, są one posortowane leksykograficznie według klucza. - Następne są elementy podrzędne z wartością liczbową, posortowane w kolejności rosnącej. Jeśli kilka elementów podrzędnych ma tę samą wartość liczbową określonego elementu podrzędnego węzłów, są one sortowane według klucza.
- Ciągi znaków znajdują się po liczbach i są sortowane leksykograficznie w kolejności rosnącej zamówienie. Jeśli kilka elementów podrzędnych ma tę samą wartość określonego elementu podrzędnego są uporządkowane leksykograficznie według klucza.
- Obiekty są na końcu i są sortowane leksykograficznie według klucza w kolejności rosnącej.
OrderByKey
Gdy dane są sortowane przy użyciu funkcji OrderByKey()
, są one zwracane w kolejności rosnącej
klawiszem.
- Elementy podrzędne z kluczem, który można przeanalizować jako 32-bitową liczbę całkowitą, są na pierwszym miejscu, posortowane w kolejności rosnącej.
- Następnym elementem są elementy podrzędne z wartością w postaci ciągu znaków, posortowane leksykograficznie w kolejności rosnącej.
OrderByValue
Gdy używasz metody OrderByValue()
, elementy podrzędne są uporządkowane według wartości. Kolejność
kryteria są takie same jak w OrderByChild()
, z wyjątkiem wartości węzła
zamiast wartości określonego klucza podrzędnego.