Bu belgede, veri alma ve Firebase verilerini sıralayıp filtreleme ile ilgili temel bilgiler ele alınmaktadır.
Başlamadan önce
Realtime Database kullanmaya başlamak için şunları yapmanız gerekir:
Unity projenizi kaydedin ve Firebase'i kullanacak şekilde yapılandırın.
Unity projeniz Firebase'i kullanıyorsa Firebase için zaten kayıtlı ve yapılandırılmış demektir.
Unity projeniz yoksa örnek uygulama indirebilirsiniz.
Firebase Unity SDK'sını (özellikle
FirebaseDatabase.unitypackage) Unity projenize ekleyin.
Unity projenize Firebase eklemek için hem Firebase konsolunda hem de açık Unity projenizde görevler gerçekleştirmeniz gerekir (örneğin, Firebase yapılandırma dosyalarını konsoldan indirip Unity projenize taşımanız gerekir).
Veriler alınıyor
Firebase verileri, GetValueAsync() işlevine tek seferlik bir çağrı yapılarak veya bir FirebaseDatabase referansındaki etkinliğe eklenerek alınır. Etkinlik işleyici, verilerin ilk durumu için bir kez ve veriler her değiştiğinde tekrar çağrılır.
DatabaseReference alma
Veritabanından veri okumak için DatabaseReference örneğine ihtiyacınız vardır:
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 okuma
Belirli bir yoldaki içeriklerin statik anlık görüntüsünü bir kez okumak için GetValueAsync yöntemini kullanabilirsiniz. Görev sonucu, alt veriler de dahil olmak üzere ilgili konumdaki tüm verileri içeren bir snapshot içerir. Veri yoksa döndürülen anlık görüntü null olur.
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 dinleme
Verilerdeki 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 alma veya öğe listesine eklenenleri dinleme
Listelerdeki değişiklikleri izlemek için ChildChanged ve ChildRemoved ile birlikte kullanılması önerilir. |
ChildChanged |
Bir listedeki öğelerde yapılan değişiklikleri dinleme. Listelerdeki değişiklikleri izlemek için ChildAdded ve ChildRemoved ile birlikte kullanın. |
ChildRemoved |
Listeden kaldırılan öğeleri dinleme Listelerdeki değişiklikleri izlemek için ChildAdded ve ChildChanged ile birlikte kullanın. |
ChildMoved |
Sıralı listedeki öğelerin sırasındaki değişiklikleri dinleme
ChildMoved etkinlikleri her zaman, öğenin sırasının değişmesine neden olan ChildChanged etkinliğini takip eder (mevcut sıralama yönteminize göre). |
ValueChanged etkinliği
Belirli bir yoldaki içeriklerde yapılan değişikliklere abone olmak için ValueChanged etkinliğini kullanabilirsiniz. Bu etkinlik, dinleyici eklendiğinde bir kez ve alt öğeler de dahil olmak üzere veriler her değiştiğinde tekrar tetiklenir. Etkinlik geri çağırma işlevine, alt veriler de dahil olmak üzere ilgili konumdaki tüm verileri içeren bir anlık görüntü iletilir. Veri yoksa döndürülen anlık görüntü null olur.
Aşağıdaki örnekte, bir oyunun veritabanından skor tablosu puanlarını alma işlemi gösterilmektedir:
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, etkinlik sırasında veritabanında belirtilen konumdaki verileri içeren bir DataSnapshot içerir. Bir anlık görüntüde Value çağrıldığında verileri temsil eden bir Dictionary<string, object> döndürülür.
Konumda veri yoksa Value çağrısı null döndürür.
Bu örnekte, okuma işleminin iptal edilip edilmediğini görmek için args.DatabaseError da incelenir. Örneğin, istemcinin bir Firebase veritabanı konumundan okuma izni yoksa okuma işlemi iptal edilebilir. DatabaseError, hatanın nedenini gösterir.
Daha sonra aynı yola sahip herhangi bir DatabaseReference kullanarak etkinliğin aboneliğinden çıkabilirsiniz. DatabaseReference örnekleri geçicidir ve herhangi bir yola ve sorguya erişmenin bir yolu olarak düşünülebilir.
FirebaseDatabase.DefaultInstance .GetReference("Leaders") .ValueChanged -= HandleValueChanged; // unsubscribe from ValueChanged. }
Alt etkinlikler
Alt etkinlikler, bir düğümün alt öğelerinde gerçekleşen belirli işlemlere yanıt olarak tetiklenir. Örneğin, Push() yöntemiyle yeni bir alt öğe eklenmesi veya UpdateChildrenAsync() yöntemiyle bir alt öğenin güncellenmesi gibi işlemler bu tür etkinlikleri tetikler. Bunların her biri, bir veritabanındaki belirli bir düğümde yapılan değişiklikleri dinlemek için yararlı olabilir. Örneğin, bir oyun, oyun oturumunun yorumlarındaki etkinliği izlemek için bu yöntemleri birlikte kullanabilir:
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 Firebase veritabanındaki öğelerin listesini almak için kullanılır. ChildAdded etkinliği, mevcut her alt öğe için bir kez ve belirtilen yola her yeni alt öğe eklendiğinde tekrar tetiklenir. Dinleyiciye, yeni alt öğenin verilerini içeren bir anlık görüntü iletilir.
Bir alt düğüm her değiştirildiğinde ChildChanged etkinliği tetiklenir.
Alt düğümün alt öğelerinde yapılan tüm değişiklikler buna dahildir. Genellikle bir öğe listesindeki değişikliklere yanıt vermek için ChildAdded ve ChildRemoved etkinlikleriyle birlikte kullanılır. Etkinlik işleyiciye iletilen anlık görüntü, alt öğenin güncellenmiş verilerini içerir.
ChildRemoved etkinliği, bir alt öğe kaldırıldığında tetiklenir.
Genellikle ChildAdded ve ChildChanged geri çağırmalarıyla birlikte kullanılır. Etkinlik geri çağırmasına iletilen anlık görüntü, kaldırılan alt öğenin verilerini içerir.
ChildMoved
etkinliği, alt öğenin yeniden sıralanmasına neden olan bir güncelleme tarafından ChildChanged
etkinliği tetiklendiğinde tetiklenir. OrderByChild veya OrderByValue ile sıralanan verilerle kullanılır.
Verileri sıralama ve filtreleme
Anahtara, değere veya bir alt öğenin değerine göre sıralanmış verileri almak için Realtime Database Query sınıfını kullanabilirsiniz. Sıralanan sonucu belirli sayıda sonuca veya bir anahtar ya da değer aralığına göre de filtreleyebilirsiniz.
Verileri sıralama
Sıralanmış verileri almak için öncelikle sonuçların nasıl sıralanacağını belirlemek üzere sıralama yöntemlerinden birini belirtin:
| Yöntem | Kullanım |
|---|---|
OrderByChild() |
Sonuçları, belirtilen bir alt anahtarın değerine göre sıralar. |
OrderByKey()
| Sonuçları alt anahtarlara göre sıralar. |
OrderByValue() |
Sonuçları alt değerlere göre sıralar. |
Aynı anda yalnızca bir sıralama yöntemi kullanabilirsiniz. Aynı sorguda bir sıralama yöntemini birden çok kez çağırmak hataya neden olur.
Aşağıdaki örnekte, puana göre sıralanmış bir skor tablosuna nasıl abone olabileceğiniz gösterilmektedir.
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 skor tablosuyla senkronize eden ve her girişin puanına göre sıralanan bir sorgu tanımlar. Verilerinizi verimli bir şekilde yapılandırma hakkında daha fazla bilgiyi Veritabanınızı Yapılandırma bölümünde bulabilirsiniz.
OrderByChild() yöntemine yapılan çağrı, sonuçların sıralanacağı alt anahtarı belirtir. Bu durumda sonuçlar, her alt öğedeki "score" değerine göre sıralanır. Diğer veri türlerinin nasıl sıralandığı hakkında daha fazla bilgi için Sorgu verileri nasıl sıralanır? başlıklı makaleyi inceleyin.
Veri filtreleme
Verileri filtrelemek için sorgu oluştururken sınır veya aralık yöntemlerinden herhangi birini bir sıralama yöntemiyle birleştirebilirsiniz.
| Yöntem | Kullanım |
|---|---|
LimitToFirst() |
Sıralı sonuç listesinin başından itibaren döndürülecek maksimum öğe sayısını ayarlar. |
LimitToLast() |
Sıralı sonuç listesinin sonundan döndürülecek maksimum öğe sayısını ayarlar. |
StartAt() |
Seçilen sıralama yöntemine bağlı olarak, belirtilen anahtardan veya değerden büyük ya da ona eşit olan öğeleri döndürür. |
EndAt() |
Seçilen sıralama yöntemine bağlı olarak, belirtilen anahtar veya değere eşit ya da ondan küçük öğeleri döndürür. |
EqualTo() |
Seçilen sıralama yöntemine bağlı olarak, belirtilen anahtara veya değere eşit öğeleri döndürür. |
Sıralama yöntemlerinin aksine, birden fazla sınır veya aralık işlevini birleştirebilirsiniz.
Örneğin, sonuçları belirli bir değer aralığıyla sınırlamak için StartAt() ve EndAt() yöntemlerini birleştirebilirsiniz.
Sorgu için yalnızca tek bir eşleşme olsa bile anlık görüntü yine de bir listedir; yalnızca tek bir öğe içerir.
Sonuç sayısını sınırlama
Belirli bir geri çağırma için senkronize edilecek maksimum alt öğe sayısını ayarlamak üzere LimitToFirst() ve LimitToLast() yöntemlerini kullanabilirsiniz. Örneğin, LimitToFirst() kullanarak 100 sınırı belirlerseniz başlangıçta yalnızca en fazla 100 ChildAdded geri çağırma alırsınız. Firebase veritabanınızda 100'den az öğe varsa her öğe için bir ChildAdded geri çağırma işlevi tetiklenir.
Öğeler değiştikçe sorguya giren öğeler için ChildAdded geri çağırma, sorgudan çıkan öğeler için ChildRemoved geri çağırma alırsınız. Böylece toplam sayı 100'de kalır.
Örneğin, aşağıdaki kod bir skor tablosundaki en yüksek puanı 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 }
Anahtara veya değere göre filtrele
Sorgular için rastgele başlangıç, bitiş ve eşdeğerlik noktaları seçmek üzere StartAt(),
EndAt()
ve EqualTo()
işlevlerini kullanabilirsiniz.
Bu, verileri sayfalara ayırmak veya belirli bir değere sahip alt öğeleri bulmak için yararlı olabilir.
Sorgu verilerinin sıralanma şekli
Bu bölümde, verilerin Query sınıfındaki sıralama yöntemlerinin her biri tarafından nasıl sıralandığı açıklanmaktadır.
OrderByChild
OrderByChild() kullanıldığında, belirtilen alt anahtarı içeren veriler aşağıdaki şekilde sıralanır:
- Belirtilen alt anahtar için
nulldeğerine sahip alt öğeler önce gelir. - Ardından, belirtilen alt anahtar için
falsedeğerine sahip alt öğeler gelir. Birden fazla alt öğenin değerifalseise anahtara göre sözlük düzeninde sıralanırlar. - Ardından, belirtilen alt anahtar için
truedeğerine sahip alt öğeler gelir. Birden fazla alt öğenin değeritrueise bunlar anahtara göre alfabetik olarak sıralanır. - Ardından, sayısal değere sahip alt öğeler artan düzende sıralanır. Belirtilen alt düğüm için birden fazla alt öğe aynı sayısal değere sahipse bunlar anahtara göre sıralanır.
- Dizeler sayılardan sonra gelir ve sözlük düzeninde artan düzende sıralanır. Belirtilen alt düğüm için birden fazla alt öğe aynı değere sahipse bunlar anahtara göre sözlük düzeninde sıralanır.
- Nesneler en sonda yer alır ve anahtara göre alfabetik olarak artan düzende sıralanır.
OrderByKey
Verilerinizi sıralamak için OrderByKey() kullanıldığında veriler anahtara göre artan düzende döndürülür.
- 32 bit tam sayı olarak ayrıştırılabilen bir anahtara sahip alt öğeler, artan düzende sıralanarak ilk sırada yer alır.
- Ardından, anahtarı dize değeri olan alt öğeler, alfabetik olarak artan düzende sıralanır.
OrderByValue
OrderByValue() kullanıldığında alt öğeler değerlerine göre sıralanır. Sıralama ölçütleri, belirtilen bir alt anahtarın değeri yerine düğümün değerinin kullanılması dışında OrderByChild() ile aynıdır.