משחזר נתונים

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

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

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

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

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

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

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

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

משחזר נתונים

נתוני Firebase מאוחזר גם על ידי אמצעי שיחת פעם אחת כדי GetValueAsync () או מצרף לאירוע על FirebaseDatabase הפניה. המאזין לאירועים נקרא פעם אחת למצב הראשוני של הנתונים ושוב בכל פעם שהנתונים משתנים.

קבל מסד נתונים

כדי לקרוא נתונים ממסד הנתונים, אתה צריך מופע של DatabaseReference :

using Firebase;
using Firebase.Database;

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().ContinueWith(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 .

הדוגמה הבאה מדגימה משחק שמאחזר את ציוני ה- Leaderboard ממסד הנתונים:

      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.

לדוגמא, הקוד שלמטה מחזיר את הציון הגבוה ביותר מ- Leaderboard:

      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() , למעט הערך של הצומת משמש במקום הערך של מפתח הבן שצוין.