תחילת העבודה עם הגדרת התצורה מרחוק ב-Unity

בחירת פלטפורמה: iOS+‎ Android אינטרנט Flutter Unity C++‎


אתם יכולים להשתמש ב-Firebase Remote Config כדי להגדיר פרמטרים באפליקציה ולעדכן את הערכים שלהם בענן, וכך לשנות את המראה וההתנהגות של האפליקציה בלי להפיץ עדכון לאפליקציה.

ספריית Remote Config משמשת לאחסון ערכי פרמטרים שמוגדרים כברירת מחדל באפליקציה, לאחזור ערכי פרמטרים מעודכנים מהקצה העורפי של Remote Config ולשליטה במועד שבו הערכים שאוחזרו יהיו זמינים לאפליקציה. מידע נוסף זמין במאמר אסטרטגיות טעינה של הגדרת תצורה מרחוק.

במדריך הזה מפורטים השלבים לתחילת העבודה ומוצג קוד לדוגמה, שזמין לשכפול או להורדה ממאגר ה-GitHub של firebase/quickstart-unity.

שלב 1: מוסיפים את Remote Config לאפליקציה

לפני שתוכלו להשתמש ב-Remote Config, אתם צריכים:

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

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

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

  • מוסיפים את Firebase Unity SDK (באופן ספציפי, FirebaseRemoteConfig.unitypackage) לפרויקט ב-Unity.

שימו לב: הוספת Firebase לפרויקט ב-Unity כוללת משימות גם במסוף Firebase וגם בפרויקט הפתוח ב-Unity (לדוגמה, אתם מורידים קובצי תצורה של Firebase מהמסוף ואז מעבירים אותם לפרויקט ב-Unity).

שלב 2: מגדירים ערכי פרמטרים כברירת מחדל באפליקציה

אתם יכולים להגדיר ערכי פרמטרים כברירת מחדל בתוך האפליקציה באובייקט Remote Config, כדי שהאפליקציה תפעל כמצופה לפני שהיא מתחברת לקצה העורפי של Remote Config, וכדי שערכי ברירת המחדל יהיו זמינים אם לא הוגדרו ערכים בקצה העורפי.

כדי לעשות את זה, יוצרים מילון מחרוזות ומאכלסים אותו בצמדי מפתח/ערך שמייצגים את ערכי ברירת המחדל שרוצים להוסיף. אם כבר הגדרתם ערכי פרמטרים של קצה עורפי ב-Remote Config, אתם יכולים להוריד קובץ שמכיל את צמדי המפתח/ערך האלה ולהשתמש בו כדי ליצור את מילון המחרוזות. מידע נוסף זמין במאמר הורדת ברירות המחדל של התבניות של Remote Config.

(מאפיינים שהם לא מחרוזת יומרו לסוג המאפיין כשמתבצעת קריאה ל-SetDefaultsAsync()).

System.Collections.Generic.Dictionary<string, object> defaults =
  new System.Collections.Generic.Dictionary<string, object>();

// These are the values that are used if we haven't fetched data from the
// server
// yet, or if we ask for values that the server doesn't have:
defaults.Add("config_test_string", "default local string");
defaults.Add("config_test_int", 1);
defaults.Add("config_test_float", 1.0);
defaults.Add("config_test_bool", false);

Firebase.RemoteConfig.FirebaseRemoteConfig.DefaultInstance.SetDefaultsAsync(defaults)
  .ContinueWithOnMainThread(task => {

שלב 3: מקבלים ערכי פרמטר לשימוש באפליקציה

עכשיו אפשר לקבל ערכי פרמטרים מהאובייקט Remote Config. אם הגדרתם ערכים בקצה העורפי של Remote Config, אחזרתם אותם ואז הפעלתם אותם, הערכים האלה זמינים לאפליקציה. אחרת, תקבלו את ערכי הפרמטרים באפליקציה שהוגדרו באמצעות SetDefaultsAsync().

כדי לקבל את הערכים האלה, משתמשים ב-GetValue() ומספקים את מפתח הפרמטר כארגומנט. הפונקציה מחזירה אובייקט ConfigValue, שיש לו מאפיינים להמרת הערך לסוגי בסיס שונים.

שלב 4: מגדירים ערכי פרמטרים

  1. במסוף Firebase, עוברים אל DevOps & Engagement (DevOps ומעורבות) > Remote Config (הגדרת תצורה מרחוק).

  2. מגדירים פרמטרים עם שמות זהים לאלה של הפרמטרים שהגדרתם באפליקציה. לכל פרמטר אפשר להגדיר ערך ברירת מחדל (שבסופו של דבר יחליף את ערך ברירת המחדל שמוגדר באפליקציה) וערכים מותנים. מידע נוסף זמין במאמר פרמטרים ותנאים של Remote Config.

שלב 5: מאחזרים ומפעילים ערכים (לפי הצורך)

כדי לאחזר ערכי פרמטרים מה-backend של Remote Config, צריך להפעיל את השיטה FetchAsync(). כל הערכים שהגדרתם בקצה העורפי מאוחזרים ונשמרים במטמון באובייקט Remote Config.

// Start a fetch request.
// FetchAsync only fetches new data if the current data is older than the provided
// timespan.  Otherwise it assumes the data is "recent enough", and does nothing.
// By default the timespan is 12 hours, and for production apps, this is a good
// number. For this example though, it's set to a timespan of zero, so that
// changes in the console will always show up immediately.
public Task FetchDataAsync() {
  DebugLog("Fetching data...");
  System.Threading.Tasks.Task fetchTask =
  Firebase.RemoteConfig.FirebaseRemoteConfig.DefaultInstance.FetchAsync(
      TimeSpan.Zero);
  return fetchTask.ContinueWithOnMainThread(FetchComplete);
}

בקוד הקודם, FetchComplete היא שיטה שהחתימה שלה תואמת לפרמטרים של אחד מעומסי היתר של ContinueWithOnMainThread().

בקוד לדוגמה הבא, ה-method‏ FetchComplete מועברת למשימה הקודמת (fetchTask), וכך FetchComplete יכולה לקבוע אם היא הסתיימה. הקוד משתמש ב-Info.LastFetchStatus כדי לקבוע אם הסיום גם הצליח. אם כן, ערכי הפרמטרים של Remote Config מופעלים באמצעות ActivateAsync().

private void FetchComplete(Task fetchTask) {
  if (!fetchTask.IsCompleted) {
    Debug.LogError("Retrieval hasn't finished.");
    return;
  }

  var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
  var info = remoteConfig.Info;
  if(info.LastFetchStatus != LastFetchStatus.Success) {
    Debug.LogError($"{nameof(FetchComplete)} was unsuccessful\n{nameof(info.LastFetchStatus)}: {info.LastFetchStatus}");
    return;
  }

  // Fetch successful. Parameter values must be activated to use.
  remoteConfig.ActivateAsync()
    .ContinueWithOnMainThread(
      task => {
        Debug.Log($"Remote data loaded and ready for use. Last fetch time {info.FetchTime}.");
    });
}

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

שלב 6: האזנה לעדכונים בזמן אמת

אחרי שאחזרתם את ערכי הפרמטרים, אתם יכולים להשתמש ב-Remote Config בזמן אמת כדי להאזין לעדכונים מה-backend של Remote Config. ‫Remote Config שולח אותות בזמן אמת למכשירים מחוברים כשיש עדכונים זמינים, ומאחזר אוטומטית את השינויים אחרי שמפרסמים גרסה חדשה של Remote Config.

עדכונים בזמן אמת נתמכים ב-SDK של Firebase Unity בגרסה 11.0.0 ואילך בפלטפורמות של Android ו-Apple.

  1. באפליקציה, מוסיפים OnConfigUpdateListener כדי להתחיל להאזין לעדכונים ולאחזר באופן אוטומטי ערכי פרמטרים חדשים או מעודכנים. לאחר מכן, יוצרים ConfigUpdateListenerEventHandler כדי לעבד אירועי עדכון. בדוגמה הבאה, המערכת מאזינה לעדכונים ומשתמשת בערכים החדשים שנשלפו כדי להציג הודעת פתיחה מעודכנת.
// Invoke the listener.
void Start()
{
  Firebase.RemoteConfig.FirebaseRemoteConfig.DefaultInstance.OnConfigUpdateListener
    += ConfigUpdateListenerEventHandler;
}

// Handle real-time Remote Config events.
void ConfigUpdateListenerEventHandler(
   object sender, Firebase.RemoteConfig.ConfigUpdateEventArgs args) {
  if (args.Error != Firebase.RemoteConfig.RemoteConfigError.None) {
    Debug.Log(String.Format("Error occurred while listening: {0}", args.Error));
    return;
  }

  Debug.Log("Updated keys: " + string.Join(", ", args.UpdatedKeys));
  // Activate all fetched values and then display a welcome message.
  remoteConfig.ActivateAsync().ContinueWithOnMainThread(
    task => {
        DisplayWelcomeMessage();
    });
}

// Stop the listener.
void OnDestroy() {
    Firebase.RemoteConfig.FirebaseRemoteConfig.DefaultInstance.OnConfigUpdateListener
      -= ConfigUpdateListenerEventHandler;
}

בפעם הבאה שתפרסמו גרסה חדשה של Remote Config, מכשירים שמריצים את האפליקציה ומאזינים לשינויים יקראו ל-completion handler.