התקן את משחק Unity שלך עם Firebase Remote Config

1. הקדמה

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

אתה תוסיף את הפונקציונליות החדשה הזו למשחק לדוגמה, MechaHamster: Level Up with Firebase Edition . משחק לדוגמה זה הוא גרסה חדשה של משחק Firebase הקלאסי MechaHamster שמסיר את רוב הפונקציונליות המובנית של Firebase, מה שנותן לך את ההזדמנות ליישם שימושים חדשים ב-Firebase במקומם.

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

מה תלמד

  • כיצד להגדיר ערכי Config מרחוק בענן ולאחזר אותם
  • כיצד להכשיר את קוד Unity C# שלך לשימוש אוטומטי בערכים שאוחזרו
  • כיצד לאחסן, לאמן ולעקוף ערכים/אובייקטים מורכבים כערכי JSON
  • כיצד להשתמש בתנאי Config מרחוק כדי להגיש גרסאות ערך שונות לקבוצות שונות של משתמשים

מה אתה צריך

  • Unity 2019.1.0f1 ומעלה עם תמיכה ב-iOS ו/או אנדרואיד
  • מכשיר אנדרואיד/iOS פיזי או סימולטור/אמולטור לבנייה והרצה של המשחק

2. הגדר את סביבת הפיתוח שלך

הסעיפים הבאים מתארים כיצד להוריד את הקוד Level Up עם Firebase , לפתוח אותו ב-Unity ולהוסיף פרויקט Firebase. משחק הדוגמה הזה לרמה עם Firebase נמצא בשימוש על ידי מספר מעבדות קוד אחרות של Firebase + Unity, כך שאולי כבר השלמת את המשימות בסעיף זה. אם כן, תוכל לדלג על שלבים אלה ולהמשיך ל-Add Firebase SDKs for Unity כדי להוסיף Config מרחוק לקוד המשחק לדוגמה.

הורד את הקוד

שיבוט את מאגר GitHub של Codelab זה משורת הפקודה:

git clone https://github.com/firebase/level-up-with-firebase

לחלופין, אם לא התקנת git, אתה יכול להוריד את המאגר כקובץ ZIP .

פתח את Level Up עם Firebase בעורך Unity

  1. הפעל את Unity Hub ובכרטיסייה פרויקטים לחץ על החץ הנפתח לצד פתח .
  2. לחץ על הוסף פרוייקט מהדיסק .
  3. נווט אל הספרייה המכילה את הקוד ולאחר מכן לחץ על אישור .
  4. אם תתבקש, בחר בגרסת עורך Unity לשימוש ובפלטפורמת היעד שלך (אנדרואיד או iOS).
  5. לחץ על שם הפרויקט, רמה למעלה-עם-firebase , והפרויקט ייפתח בעורך Unity.
  6. אם העורך שלך לא פותח אותו אוטומטית, פתח MainGameScene בנכסים > אוגר בלשונית Project של Unity Editor.

למידע נוסף על התקנה ושימוש ב-Unity, ראה עבודה ב-Unity .

3. הוסף את Firebase לפרויקט Unity שלך

צור פרויקט Firebase

  1. במסוף Firebase , לחץ על הוסף פרויקט .
  2. כדי ליצור פרויקט חדש, הזן את שם הפרויקט הרצוי.
    זה גם יקבע את מזהה הפרויקט (המוצג מתחת לשם הפרויקט) למשהו המבוסס על שם הפרויקט. באפשרותך ללחוץ על סמל העריכה במזהה הפרויקט כדי להתאים אותו עוד יותר.
  3. אם תתבקש, עיין בתנאי Firebase וקבל אותם.
  4. לחץ על המשך .
  5. בחר באפשרות הפעל את Google Analytics עבור פרויקט זה ולאחר מכן לחץ על המשך .
  6. בחר חשבון Google Analytics קיים לשימוש או בחר צור חשבון חדש כדי ליצור חשבון חדש.
  7. לחץ על צור פרויקט .
  8. לאחר יצירת הפרויקט, לחץ על המשך .

רשום את האפליקציה שלך ב-Firebase

  1. פתח את מסוף Firebase וממרכז דף סקירת הפרויקט, לחץ על סמל Unity כדי להפעיל את זרימת העבודה של ההגדרה או, אם כבר הוספת אפליקציה לפרויקט Firebase שלך, לחץ על הוסף אפליקציה כדי להציג את אפשרויות הפלטפורמה.
  2. בחר כדי לרשום הן את יעדי הבנייה של Apple (iOS) והן ל-Android.
  3. הזן את המזהים הספציפיים לפלטפורמה של פרויקט Unity שלך. עבור מעבדת קוד זה, הזן את הדברים הבאים:
  4. לחלופין, הזן את הכינוי/כינויים הספציפיים לפלטפורמה של פרויקט Unity שלך.
  5. לחץ על הרשמה אפליקציה והמשך לקטע הורד קובץ תצורה .
  6. חזור על התהליך עבור כל יעד בנייה שלא עשית בפעם הראשונה.

הוסף קבצי תצורה של Firebase

לאחר לחיצה על הרשמה אפליקציה , תתבקש להוריד שני קובצי תצורה (קובץ תצורה אחד לכל יעד בנייה). פרויקט Unity שלך זקוק למטא נתונים של Firebase בקבצים האלה כדי להתחבר ל-Firebase.

  1. הורד את שני קבצי התצורה הזמינים:
    • עבור Apple (iOS) : הורד את GoogleService-Info.plist .
    • עבור אנדרואיד : הורד את google-services.json .
  2. פתח את חלון הפרויקט של פרויקט Unity שלך, ולאחר מכן העבר את שני קובצי התצורה לתיקיית הנכסים .
  3. בחזרה למסוף Firebase, בזרימת העבודה של ההגדרה, לחץ על Next והמשך להוספת Firebase SDKs for Unity.

הערה: אתה תמיד יכול להוריד מחדש את הקבצים האלה במועד מאוחר יותר על ידי פתיחת ההגדרות הכלליות של הפרויקט שלך, גלילה מטה לקטע האפליקציות שלך ולאחר מכן לחיצה על כפתור ההורדה עבור קובץ התצורה הרצוי.

הוסף ערכות פיתוח של Firebase עבור Unity

  1. לחץ על הורד Firebase Unity SDK במסוף Firebase.
  2. פתח את ה-SDK במקום נוח.
  3. בפרויקט Unity הפתוח שלך, נווט אל נכסים > ייבוא ​​חבילה > חבילה מותאמת אישית .
  4. בתיבת הדו-שיח 'ייבוא ​​חבילה' , נווט אל הספרייה המכילה את ה-SDK שנפרם, בחר FirebaseAnalytics.unitypackage ולאחר מכן לחץ על פתח .
  5. מתיבת הדו-שיח ייבוא ​​חבילת אחדות שמופיעה, לחץ על ייבוא ​​.
  6. חזור על השלבים הקודמים כדי לייבא את שתי החבילות הבאות:
    • FirebaseRemoteConfig.unitypackage
    • FirebaseCrashlytics.unitypackage
      Crashlytics הוא כתב קריסות קל משקל בזמן אמת שעוזר לך לעקוב, לתעדף ולתקן בעיות יציבות השוחקות את איכות האפליקציה שלך. אם לא השתמשת בו בעבר, שקול להשלים את מסלול הלמידה של Crashlytics לאחדות .
  7. חזור למסוף Firebase ובתהליך העבודה של ההגדרה, לחץ על הבא .

למידע נוסף על הוספת Firebase SDK לפרויקטים של Unity, ראה אפשרויות התקנה נוספות של Unity .

4. הגדר ברירת מחדל של Remote Config ואחזר ערכים חדשים

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

כדי להביא ערכים חדשים מ-Remote Config, ישנן מספר שיטות לא מיושמות שכבר קיימות בקובץ Assets/Hamster/Scripts/MainGame.cs שיש להשלים.

  1. הוסף את הדברים הבאים using הצהרות ל- MainGame.cs :
    using Firebase.Crashlytics;
    using Firebase.Extensions;
    using Firebase.RemoteConfig;
    
    מודול Firebase.Extensions מכיל כמה הרחבות ל- C# Tasks API אשר יסייעו להפוך את ניהול תהליך האתחול עם התקשרויות לפשוט יותר.
  2. הוסף אתחול Firebase לשיטת MainGame.cs Start() שלך על ידי החלפת שיטת InitializeCommonDataAndStartGame() הקיימת בשיטה שאינה מיושמת כעת, InitializeFirebaseAndStartGame() :
    void Start()
    {
       Screen.SetResolution(Screen.width / 2, Screen.height / 2, true);
       InitializeFirebaseAndStartGame();
    }
    
  3. ב- MainGame.cs , מצא את InitializeFirebaseAndStartGame() . הכרזה על משתנה אפליקציה והחלפת יישום השיטה באופן הבא:
    public Firebase.FirebaseApp app = null;
    
    // Begins the firebase initialization process and afterwards, opens the main menu.
    private void InitializeFirebaseAndStartGame()
    {
       Firebase.FirebaseApp.CheckAndFixDependenciesAsync()
       .ContinueWithOnMainThread(
          previousTask =>
          {
             var dependencyStatus = previousTask.Result;
             if (dependencyStatus == Firebase.DependencyStatus.Available) {
             // Create and hold a reference to your FirebaseApp,
             app = Firebase.FirebaseApp.DefaultInstance;
             // Set the recommended Crashlytics uncaught exception behavior.
             Crashlytics.ReportUncaughtExceptionsAsFatal = true;
             SetRemoteConfigDefaults();
             } else {
             UnityEngine.Debug.LogError(
                $"Could not resolve all Firebase dependencies: {dependencyStatus}\n" +
                "Firebase Unity SDK is not safe to use here");
             }
          });
    }
    
  4. אתחול Firebase קורא ל- SetRemoteConfigDefaults בהצלחה כדי להגדיר ערכי ברירת מחדל בתוך האפליקציה. החלף את שיטת SetRemoteConfigDefaults שלא מיושמת בשיטה הבאה:
    private void SetRemoteConfigDefaults()
    {
       var defaults = new System.Collections.Generic.Dictionary < string, object > ();
       defaults.Add(
          Hamster.MapObjects.AccelerationTile.AccelerationTileForceKey,
          Hamster.MapObjects.AccelerationTile.AccelerationTileForceDefault);
       defaults.Add(
          Hamster.States.MainMenu.SubtitleOverrideKey,
          Hamster.States.MainMenu.SubtitleOverrideDefault);
       var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
       remoteConfig.SetDefaultsAsync(defaults).ContinueWithOnMainThread(
          previousTask =>
          {
             FetchRemoteConfig(InitializeCommonDataAndStartGame);
          }
       );
    }
    

5. אחזר והפעל ערכים חדשים (לפי הצורך)

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

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

  1. הדבק את הקוד למטה לתוך FetchRemoteConfig :
    public void FetchRemoteConfig(System.Action onFetchAndActivateSuccessful)
    {
       if(app==null)
       {
          Debug.LogError($"Do not use Firebase until it is properly initialized by calling {nameof(InitializeFirebaseAndStartGame)}.");
          return;
       }
    
       Debug.Log("Fetching data...");
       var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
       remoteConfig.FetchAsync(System.TimeSpan.Zero).ContinueWithOnMainThread(
          previousTask=>
          {
             if (!previousTask.IsCompleted)
             {
             Debug.LogError($"{nameof(remoteConfig.FetchAsync)} incomplete: Status '{previousTask.Status}'");
             return;
             }
             ActivateRetrievedRemoteConfigValues(onFetchAndActivateSuccessful);
          });
    }
    
  2. לאחר מכן, השלם את השיטה ActivateRetrievedRemoteConfigValues , המקבלת התקשרות חוזרת מועברת, onFetchAndActivateSuccessful . כאשר ההפעלה תסתיים, ההתקשרות חזרה שצוינה תופעל:
    private void ActivateRetrievedRemoteConfigValues(System.Action onFetchAndActivateSuccessful)
    {
       var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
       var info = remoteConfig.Info;
       if(info.LastFetchStatus == LastFetchStatus.Success)
       {
          remoteConfig.ActivateAsync().ContinueWithOnMainThread(
             previousTask =>
             {
             Debug.Log($"Remote data loaded and ready (last fetch time {info.FetchTime}).");
             onFetchAndActivateSuccessful();
             });
       }
    }
    

כאשר נקרא במורד הזרם על ידי SetRemoteConfigDefaults מהקשר האתחול, ActivateRetrievedRemoteConfigValues ​​קורא לנקודת ההתחלה הקודמת, InitializeCommonDataAndStartGame , כדי להתחיל את המשחק על ידי פתיחת התפריט הראשי.

6. הגדר אסטרטגיית טעינת תצורה מרחוק

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

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

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

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

כדי לאפשר זאת באפליקציה, השלם את השיטות הרלוונטיות בתפריט הראשי וקבצי בחירת רמה, אשר יחסמו את תצוגת ממשק המשתמש עד להשלמת FetchAsync ו- ActivateAsync :

  1. פתח את Assets/Hamster/Scripts/States/MainMenu.cs והחלף את שיטת Resume הקיימת בשיטה הבאה:
    public override void Resume(StateExitValue results) {
       CommonData.mainGame.SelectAndPlayMusic(CommonData.prefabs.menuMusic, true);
       CommonData.mainGame.FetchRemoteConfig(InitializeUI);
    }
    
  2. שמור את הקובץ.
  3. פתח את Assets/Hamster/Scripts/States/BaseLevelSelect.cs , החלף את שיטת Resume הקיימת בשיטה הבאה:
    public override void Resume(StateExitValue results) {
       CommonData.mainGame.FetchRemoteConfig(ShowUI);
    }
    
  4. שמור את הקובץ.

7. איתור באגים/אמת התנהגויות אחזור

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

המידע יודפס כחלק מיומני הסימולטור, המכשיר או העורך שלך. עבור iOS, אתה יכול להציג יומני מכשירים וסימולטור ב-Xcode. עבור אנדרואיד, הצג יומנים על ידי הפעלת adb logcat . אם אתה מפעיל את הקוד ב-Unity על ידי לחיצה על Play בעורך, יומנים יופיעו בלשונית המסוף.

  1. בנה מחדש והפעל את האפליקציה (בעורך, באמצעות מכשיר או סימולטור).
  2. לאחר הופעת התפריט הראשי של המשחק, סקור את פלט היומן של המשחק שלך, שאמור להכיל את היומנים שנוצרו על ידי Debug.Log ב- FetchRemoteConfig ו- ActivateRetrievedRemoteConfigValues . אלה אמורות להראות הודעות "מביא נתונים..." ו"נתונים מרחוק נטענים ומוכנים". שימו לב לחותמות הזמן בתחילת ההודעות הללו.
  3. במשחק, לחץ על רישיון .
  4. לחץ על אישור .
  5. המתן עד שיופיע התפריט הראשי של המשחק.
  6. סקור את פלט היומן של המשחק שלך, שאמור להיות דומה לאלו שבשלב הקודם, עם חותמות זמן חדשות (התואמות את הזמן שנקבע בשעון המערכת שבו אתה מריץ את המשחק).
  7. במשחק, הקש על הפעל .
  8. לחץ על בואו נגלגל .
  9. נווט את הכדור אל המטרה באמצעות חיצי המקלדת, שיפתחו תפריט השלמת רמה.
  10. לחץ על רמות .
  11. המתן עד שהתפריט בחירת רמה ייטען.
  12. בדוק שוב את פלט יומן המשחק שלך. זה אמור להתאים להודעות יומן מהשלבים המוקדמים יותר, עם חותמות זמן חדשות יותר (התואמות את השעה שנקבעה בשעון המערכת שבו אתה מריץ את המשחק).

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

אם היומנים הראשוניים מטעינת התפריט מופיעים, אך אחד מהאחרים לא, חקור/יישם מחדש את שיטות Resume ב- Assets/Hamster/Scripts/States/MainMenu.cs ו- Assets/Hamster/Scripts/States/BaseLevelSelect.cs .

8. מכשיר את הקוד שלך

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

לאחר שתגדיר ערכים ב-Remote Config Backend, תביא אותם והפעלת אותם ( או תעשה את שניהם בבת אחת ), הערכים האלה זמינים לאפליקציה שלך. כדי להשתמש בערכים אלה, התקשר ל- GetValue(string key ) ובחר מפתח פרמטר כארגומנט. זה מחזיר ConfigValue , שיש לו מאפיינים לגישה לערך כסוגים נתמכים שונים: string , bool , long , double . בפרויקט זה וברוב מקרי השימוש במשחקים, עליך להעלות את שני הסוגים האחרונים ל- int and float האידיומטית יותר. כדי להבטיח שהמרות אלו לא יגרמו לבעיות, ודא שהערכים הראשוניים שהוגדרו ב-Remote Config נמצאים בטווח החוקי של הסוגים שבהם תשתמש בקוד האפליקציה שלך.

  1. ייבא תצורה מרוחקת על ידי הוספה using Firebase.RemoteConfig; לראש הקבצים הבאים:
    • Assets/Hamster/Scripts/States/MainMenu.cs
    • Assets/Hamster/Scripts/MapObjects/AccelerationTile.cs
  2. החלף את שיטת Start של AccelerationTile.cs :
    private void Start() {
       var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
       Acceleration = (float)remoteConfig.GetValue(AccelerationTileForceKey).DoubleValue;
    }
    
    עם שינוי זה, כמות הכוח המוקנה על ידי אריח ההאצה ישתנה לזו שהתקבלה מ-Remote Config.
  3. ערוך את הגוף של שיטת InitializeUI של MainMenu.cs :
    private void InitializeUI() {
       if (menuComponent == null) {
          menuComponent = SpawnUI<Menus.MainMenuGUI>(StringConstants.PrefabMainMenu);
       }
    
       var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
       var subtitleOverride = JsonUtility.FromJson<Menus.MainMenuGUI.SubtitleOverride>(
          remoteConfig.GetValue(SubtitleOverrideKey).StringValue);
       // Only sets values if all fields of the override are non-default.
       if(subtitleOverride != null && subtitleOverride.IsValidOverride())
       {
          menuComponent.MenuSubtitleText.text = subtitleOverride.text;
          menuComponent.MenuSubtitleText.fontSize = subtitleOverride.fontSize;
          menuComponent.MenuSubtitleText.color = subtitleOverride.textColor;
       }
       ShowUI();
    }
    
    כאן, subtitleOverride מוגדר לשנות את הכתובית במסך התפריט הראשי אם כל השדות שלה בענן מוגדרים כערכים שאינם ערכי ברירת המחדל של הסוג שלהם.

9. הגדר את ערכי הפרמטרים מרחוק

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

  1. במסוף Firebase , פתח את הפרויקט שלך.
  2. בחר ב-Remote Config מהתפריט כדי להציג את לוח המחוונים של Remote Config.
  3. עבור כל אחד מהפרמטרים שהגדרת באפליקציה שלך ורשום בטבלה הבאה, לחץ על הוסף פרמטר , הדבק את שם הפרמטר (מפתח), בחר את סוג הנתונים המופיע בטבלה, השבת את השימוש בברירת המחדל באפליקציה והדבק ב- ערך ברירת מחדל חדש:

    שם פרמטר (מפתח)

    סוג מידע

    ערך ברירת מחדל

    כוח_אריח_האצה

    מספר

    100

    subtitle_override

    JSON

    {"text":"We overwrote the subtitle","fontSize":8,"textColor":{"r":0.0,"g":255.0,"b":0.0,"a":255.0}}

    Remote Config Parameter editor with\nacceleration_tile_force populated
  4. לחץ על שמור כדי לשמור את השינויים שלך.
  5. לחץ על פרסם כדי לפרסם את התצורה החדשה ולהפוך את הערכים החדשים לזמינים למשחק שלך.
  6. הפעל שוב את האפליקציה שלך לאחר הגדרת הפרמטרים המרוחקים הללו וראה כיצד הם עוקפים את ברירות המחדל המקוריות. Mechahamster main screen with Debug\nMenu enabled

10. השתמש בתנאי Config מרחוק כדי להציג גרסאות

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

שימוש נפוץ אחד לתנאים הוא שינוי תוכן בין פלטפורמות iOS ו- Android. בצע את השלבים הבאים כדי ליישם תנאי המשרת ערך שונה עבור subtitle_override בהתאם לפלטפורמה שנמצאת בשימוש.

  1. פתח את הכרטיסייה Remote Config של הפרויקט שלך במסוף Firebase .
  2. לחץ על כפתור העריכה עבור subtitle_override.
  3. בפינה הימנית התחתונה, לחץ על הוסף חדש .
  4. בתפריט הנפתח שמופיע, העבר את העכבר מעל ערך מותנה ולחץ על צור תנאי חדש. Remote Config parameter editor:\nConditional value option
  5. כשתתבקש, שם לתנאי "הוא iOS" אם אתה ממקד ל-iOS, או "הוא Android" אם אתה ממקד לאנדרואיד. אם אתה מכוון לשניהם, פשוט בחר אחד כאן והשתמש בו לשאר מעבדת הקוד. Using the Define a new condition\ndialog to define an iOS-specific condition
  6. תחת חל אם... , לחץ על התפריט הנפתח בחר... ובחר פלטפורמה . לאחר מכן, בחר את הפלטפורמה המתאימה. Using the Define a new condition\neditor to select the iOS platform
  7. לחץ על צור תנאי כדי ליצור את התנאי. תיבת הדו-שיח עריכת פרמטר מופיעה שוב וכעת תוכל להגדיר ערך:
    • אם אתה ממקד לאנדרואיד, הגדר את הערך ל:
      {"text":"Level Up Android Version","fontSize":8,"textColor":{"r":0.0,"g":255.0,"b":0.0,"a":255.0}}
      
    • אם אתה ממקד ל-iOS, הגדר את הערך ל:
      {"text":"Level Up iOS Version","fontSize":8,"textColor":{"r":0.0,"g":255.0,"b":0.0,"a":255.0}}
      
  8. לחץ על שמור כדי לשמור את השינויים שלך.
  9. לחץ על פרסם כדי לפרסם את התצורה החדשה ולהפוך את הערכים החדשים לזמינים למשחק שלך.

אם אתה בונה ומריץ את המשחק שוב, אתה אמור לראות את הכתובית של המשחק מוחלפת בגרסה הספציפית לפלטפורמה שלו.

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

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

איך זה עובד

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

הטמעת תצורה מרוחקת בזמן אמת

כדי להמחיש איך זה עובד במשחק, בצע את השינויים הבאים בקוד שלך.

צור מטפל לעדכון תצורה

הצעד הראשון לשימוש באירוע Config Update הוא יצירת שיטה המסוגלת להאזין לו. מקם את השיטה הבאה ב- Assets/Hamster/Scripts/MainGame.cs :

   void ActivateValuesOnConfigUpdate( object sender, ConfigUpdateEventArgs args)
   {
      if (args.Error != RemoteConfigError.None) {
         Debug.Log($"Error occurred while listening: {args.Error}");
         return;
      }

      Debug.Log("Updated keys: " + string.Join(", ", args.UpdatedKeys));
      // Activate all fetched values and then logs.
      var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
      remoteConfig.ActivateAsync().ContinueWithOnMainThread(
         task => {
            Debug.Log($"Keys from {nameof(ActivateValuesOnConfigUpdate)} activated.");
         });
   }

שיטה זו תדפיס רשימה של מפתחות מעודכנים והודעת הצלחה ליומן כאשר היא תפעיל את הערכים החדשים.

הירשם לאירוע העדכון

על מנת להפעיל את ActivateValuesOnConfigUpdate כאשר האירוע נקרא, הירשמו לו לאירוע. החלף את השיטה InitializeCommonDataAndStartGame() ב- Assets/Hamster/Scripts/MainGame.cs בשיטה הבאה:

   void InitializeCommonDataAndStartGame()
   {
      CommonData.prefabs = FindObjectOfType<PrefabList>();
      CommonData.mainCamera = FindObjectOfType<CameraController>();
      CommonData.mainGame = this;

      Screen.orientation = ScreenOrientation.LandscapeLeft;

      musicPlayer = CommonData.mainCamera.GetComponentInChildren<AudioSource>();

      CommonData.gameWorld = FindObjectOfType<GameWorld>();

      // Set up volume settings.
      MusicVolume = PlayerPrefs.GetInt(StringConstants.MusicVolume, MaxVolumeValue);
      // Set the music to ignore the listeners volume, which is used for sound effects.
      CommonData.mainCamera.GetComponentInChildren<AudioSource>().ignoreListenerVolume = true;
      SoundFxVolume = PlayerPrefs.GetInt(StringConstants.SoundFxVolume, MaxVolumeValue);

      // Subscribes to on config update after first initial fetch and activate
      FirebaseRemoteConfig.DefaultInstance.OnConfigUpdateListener += ActivateValuesOnConfigUpdate;

      stateManager.PushState(new States.MainMenu());
   }

השורה החדשה (מסתיימת ב += ActivateValuesOnConfigUpdate; ) רושמת את מטפל האירועים לאירוע.

בטל את הרישום כאשר האובייקט שבבעלותו של המטפל מושמד

על מנת למנוע שגיאות הפניה ל-Null, אובייקטים עם מתודות המנויים לאירועים חייבים לבטל את הרישום של שיטה זו כאשר הם מושמדים. הוסף את השיטה הבאה ל- Assets/Hamster/Scripts/MainGame.cs :

   private void OnDestroy() 
   {
      FirebaseRemoteConfig.DefaultInstance.OnConfigUpdateListener -= ActivateValuesOnConfigUpdate;
   }

בדוק את הפונקציונליות החדשה

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

שנה acceleration_tile_force והתבונן

לאחר הפעלת האפליקציה שלך, בקטע 'הגדרות מרחוק' של מסוף Firebase:

  1. לחץ על לחצן העריכה שליד acceleration_tile_force .

dc602d4db54e50a4.png

  1. שנה את הערך ל'120' ולחץ על שמור .

fcbc1df848f88009.png

  1. לחץ על הלחצן פרסם שינויים .

3785c1e00e7a6359.png

  1. בדוק את היומן.
  2. אם אתה רואה הודעת יומן שמתחילה ב"התרחשה שגיאה בזמן האזנה", קרא את השאר ונסה לבצע ניפוי באגים עם הודעת השגיאה שהיא מודפסת.
  3. אם אתה רואה יומן שמתחיל ב"מפתחות מעודכנים", האפליקציה שלך קיבלה את הערכים שהשתנו.
  4. אם אינך רואה אף אחד מאלה, עיין בשאר היומנים שלך ולאחר מכן בדוק שוב את ההוראות מ- Create a Config Update handler , בדוק מחדש ובדוק מחדש את היומנים כדי לקבוע אם משהו אינו כשורה.

12. מזל טוב!

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

מה שכיסינו

  • כיצד להגדיר ולאחזר ערכי Config מרחוק
  • כיצד להכשיר את קוד Unity C# שלך לשימוש בערכים שאוחזרו
  • כיצד לאחסן, לאמן ולעקוף ערכים/אובייקטים מורכבים כערכי JSON
  • כיצד להשתמש בתנאי Config מרחוק כדי להציג גרסאות ערך שונות

הצעדים הבאים

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