משחזר נתונים

מסמך זה עוסק ביסודות אחזור הנתונים וכיצד ניתן להזמין ולסנן נתוני Firebase.

לפני שאתה מתחיל

לפני שתוכל להשתמש מסד זמן אמת , עליך:

  • רשום את פרויקט Unity והגדר אותו לשימוש ב- Firebase.

    • אם פרויקט Unity שלך כבר משתמש ב- Firebase, הוא כבר רשום ומוגדר עבור Firebase.

    • אם אין לך פרויקט אחדות, אתה יכול להוריד אפליקציה לדוגמא .

  • מוסיפים את SDK האחדות Firebase (במיוחד, FirebaseDatabase.unitypackage ) לפרויקט האחדות שלך.

שים לב כי הוספת Firebase לפרויקט האחדות שלך כרוך משימות הן Firebase הקונסולה ו בפרויקט האחדות פתוח (למשל, אתה מוריד קבצי config Firebase מהמסוף, ולאחר מכן להעביר אותם לתוך פרויקט האחדות שלכם).

משחזר נתונים

נתוני 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

אתה יכול להשתמש 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 מסנכרן את הלקוח עם leaderboard במסד הנתונים, מסודרות על פי התוצאה של כל ערך. אתה יכול לקרוא עוד על מבנה הנתונים שלך ביעילות מבנה בסיס הנתונים שלך .

הקריאה אל 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 , הם מסודרים lexicographically ידי מפתח.
  3. ילדים עם ערך של true עבור מפתח הבן שצוין לבוא הבאים. אם ילדים מרובים יש ערך של true , הם מסודרים lexicographically ידי מפתח.
  4. ילדים עם ערך מספרי מגיעים אחר כך, ממוינים בסדר עולה. אם למספר ילדים יש ערך מספרי זהה לצומת הילד שצוין, הם ממוינים לפי מפתח.
  5. מחרוזות באות אחרי מספרים וממוינות בלקסיקוגרפיה בסדר עולה. אם למספר ילדים יש ערך זהה לצומת הילד שצוין, הם מסודרים לקסיקוגרפית לפי מפתח.
  6. אובייקטים מגיעים אחרונים וממיינים בלקסיקוגרפיה לפי מפתח בסדר עולה.

OrderByKey

בעת שימוש OrderByKey() כדי למיין את נתון, נתונים מוחזרים בסדר עולה לפי מפתח.

  1. ילדים עם מפתח שניתן לנתח כמספר שלם של 32 סיביות באים ראשונים, ממוינים בסדר עולה.
  2. ילדים עם ערך מחרוזת כמפתח הם הבאים, ממוינים לקסיקוגרפית בסדר עולה.

OrderByValue

בעת שימוש OrderByValue() , הילדים מסודרים לפי ערכם. הקריטריונים ההזמנה זהים ב OrderByChild() , למעט הערך של הצומת משמש במקום הערך של מפתח הבן שצוין.