फायरबेस रिमोट कॉन्फ़िगरेशन के साथ अपने यूनिटी गेम को इंस्ट्रुमेंट करें

1 परिचय

आप अपने ऐप में कुंजी-मूल्य जोड़े, जिन्हें पैरामीटर के रूप में भी जाना जाता है, को परिभाषित करने और क्लाउड में उनके मानों को अपडेट करने के लिए फायरबेस रिमोट कॉन्फ़िगरेशन का उपयोग कर सकते हैं, जिससे आप ऐप अपडेट वितरित किए बिना अपने ऐप की उपस्थिति और व्यवहार को संशोधित कर सकते हैं।

आप इस नई कार्यक्षमता को एक नमूना गेम, मेचाहैम्स्टर: फायरबेस एडिशन के साथ लेवल अप में जोड़ देंगे। यह नमूना गेम क्लासिक फायरबेस गेम मेचाहैम्स्टर का एक नया संस्करण है जो इसकी अधिकांश अंतर्निहित फायरबेस कार्यक्षमता को हटा देता है, जिससे आपको उनके स्थान पर फायरबेस के नए उपयोग को लागू करने का मौका मिलता है।

यह सुनिश्चित करने के लिए कि आपका ऐप इच्छित तरीके से व्यवहार करता है, आप नमूना गेम कोड में मानों के लिए डिफ़ॉल्ट कॉन्फ़िगरेशन सेट करेंगे, और इन मानों को फायरबेस कंसोल में रिमोट कॉन्फ़िगरेशन में आपके द्वारा सेट किए गए मानों द्वारा ओवरराइड किया जा सकता है।

आप क्या सीखेंगे

  • क्लाउड में रिमोट कॉन्फ़िगरेशन मान कैसे सेट करें और उन्हें पुनः प्राप्त करें
  • पुनर्प्राप्त मूल्यों का स्वचालित रूप से उपयोग करने के लिए अपने यूनिटी सी# कोड को कैसे इंस्ट्रुमेंट करें
  • JSON मानों के रूप में मिश्रित मानों/ऑब्जेक्टों को कैसे संग्रहीत करें, उपकरणित करें और ओवरराइड करें
  • उपयोगकर्ताओं के विभिन्न समूहों को अलग-अलग मूल्य वेरिएंट प्रदान करने के लिए रिमोट कॉन्फ़िगरेशन शर्तों का उपयोग कैसे करें

आपको किस चीज़ की ज़रूरत पड़ेगी

  • आईओएस और/या एंड्रॉइड बिल्ड सपोर्ट के साथ यूनिटी 2019.1.0f1 या उच्चतर
  • गेम बनाने और चलाने के लिए एक भौतिक एंड्रॉइड/आईओएस डिवाइस या सिम्युलेटर/एमुलेटर

2. अपना विकास परिवेश स्थापित करें

निम्नलिखित अनुभाग वर्णन करते हैं कि फायरबेस कोड के साथ लेवल अप को कैसे डाउनलोड करें, इसे यूनिटी में खोलें और फायरबेस प्रोजेक्ट जोड़ें। फायरबेस सैंपल गेम के साथ लेवल अप का उपयोग कई अन्य फायरबेस + यूनिटी कोडलैब द्वारा किया जाता है, इसलिए हो सकता है कि आपने इस अनुभाग में कार्य पहले ही पूरा कर लिया हो। यदि ऐसा है, तो आप इन चरणों को छोड़ सकते हैं और नमूना गेम कोड में रिमोट कॉन्फ़िगरेशन जोड़ने के लिए यूनिटी के लिए फायरबेस एसडीके जोड़ने के लिए आगे बढ़ सकते हैं।

कोड डाउनलोड करें

कमांड लाइन से इस कोडलैब के GitHub रिपॉजिटरी को क्लोन करें:

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

वैकल्पिक रूप से, यदि आपके पास गिट स्थापित नहीं है, तो आप रिपॉजिटरी को ज़िप फ़ाइल के रूप में डाउनलोड कर सकते हैं।

यूनिटी एडिटर में फायरबेस के साथ लेवल अप खोलें

  1. यूनिटी हब लॉन्च करें और, प्रोजेक्ट्स टैब से, ओपन के बगल में ड्रॉप-डाउन तीर पर क्लिक करें।
  2. डिस्क से प्रोजेक्ट जोड़ें पर क्लिक करें।
  3. उस निर्देशिका पर नेविगेट करें जिसमें कोड है, और फिर ठीक पर क्लिक करें।
  4. यदि संकेत दिया जाए, तो उपयोग करने के लिए यूनिटी संपादक संस्करण और अपने लक्ष्य प्लेटफ़ॉर्म (एंड्रॉइड या आईओएस) का चयन करें।
  5. प्रोजेक्ट नाम, लेवल-अप-विथ-फायरबेस पर क्लिक करें और प्रोजेक्ट यूनिटी संपादक में खुल जाएगा।
  6. यदि आपका संपादक इसे स्वचालित रूप से नहीं खोलता है, तो यूनिटी एडिटर के प्रोजेक्ट टैब में एसेट्स > हैम्स्टर में MainGameScene खोलें।

यूनिटी को स्थापित करने और उपयोग करने के बारे में अधिक जानकारी के लिए वर्किंग इन यूनिटी देखें।

3. अपने यूनिटी प्रोजेक्ट में फायरबेस जोड़ें

एक फायरबेस प्रोजेक्ट बनाएं

  1. फायरबेस कंसोल में, प्रोजेक्ट जोड़ें पर क्लिक करें।
  2. एक नया प्रोजेक्ट बनाने के लिए, वांछित प्रोजेक्ट नाम दर्ज करें।
    यह प्रोजेक्ट नाम के आधार पर प्रोजेक्ट आईडी (प्रोजेक्ट नाम के नीचे प्रदर्शित) भी सेट कर देगा। आप इसे और अधिक अनुकूलित करने के लिए वैकल्पिक रूप से प्रोजेक्ट आईडी पर संपादन आइकन पर क्लिक कर सकते हैं।
  3. यदि संकेत दिया जाए, तो फायरबेस शर्तों की समीक्षा करें और स्वीकार करें।
  4. जारी रखें पर क्लिक करें.
  5. इस प्रोजेक्ट के लिए Google Analytics सक्षम करें विकल्प चुनें और फिर जारी रखें पर क्लिक करें।
  6. उपयोग करने के लिए मौजूदा Google Analytics खाता चुनें या नया खाता बनाने के लिए नया खाता बनाएं चुनें।
  7. प्रोजेक्ट बनाएं पर क्लिक करें.
  8. जब प्रोजेक्ट बन जाए, तो जारी रखें पर क्लिक करें।

अपने ऐप को फायरबेस के साथ पंजीकृत करें

  1. फायरबेस कंसोल खोलें और, प्रोजेक्ट अवलोकन पृष्ठ के केंद्र से, सेटअप वर्कफ़्लो लॉन्च करने के लिए यूनिटी आइकन पर क्लिक करें या, यदि आपने पहले से ही अपने फायरबेस प्रोजेक्ट में एक ऐप जोड़ा है, तो प्लेटफ़ॉर्म विकल्प प्रदर्शित करने के लिए ऐप जोड़ें पर क्लिक करें।
  2. Apple (iOS) और Android दोनों बिल्ड लक्ष्यों को पंजीकृत करने के लिए चयन करें।
  3. अपने यूनिटी प्रोजेक्ट की प्लेटफ़ॉर्म-विशिष्ट आईडी दर्ज करें। इस कोडलैब के लिए, निम्नलिखित दर्ज करें:
  4. वैकल्पिक रूप से, अपने यूनिटी प्रोजेक्ट के प्लेटफ़ॉर्म-विशिष्ट उपनाम दर्ज करें।
  5. रजिस्टर ऐप पर क्लिक करें और डाउनलोड कॉन्फिग फ़ाइल अनुभाग पर आगे बढ़ें।
  6. जिस भी निर्माण लक्ष्य के लिए आपने पहली बार ऐसा नहीं किया था, उसके लिए प्रक्रिया को दोहराएं।

फायरबेस कॉन्फ़िगरेशन फ़ाइलें जोड़ें

रजिस्टर ऐप पर क्लिक करने के बाद, आपको दो कॉन्फ़िगरेशन फ़ाइलें (प्रत्येक बिल्ड लक्ष्य के लिए एक कॉन्फ़िगरेशन फ़ाइल) डाउनलोड करने के लिए कहा जाएगा। आपके यूनिटी प्रोजेक्ट को फ़ायरबेस से जुड़ने के लिए इन फ़ाइलों में फ़ायरबेस मेटाडेटा की आवश्यकता है।

  1. दोनों उपलब्ध कॉन्फ़िगरेशन फ़ाइलें डाउनलोड करें:
    • Apple (iOS) के लिए : GoogleService-Info.plist डाउनलोड करें।
    • Android के लिए : google-services.json डाउनलोड करें।
  2. अपने यूनिटी प्रोजेक्ट की प्रोजेक्ट विंडो खोलें, फिर दोनों कॉन्फिग फाइलों को एसेट्स फ़ोल्डर में ले जाएं।
  3. फ़ायरबेस कंसोल में वापस, सेटअप वर्कफ़्लो में, अगला क्लिक करें और यूनिटी के लिए फ़ायरबेस एसडीके जोड़ने के लिए आगे बढ़ें।

नोट: आप अपने प्रोजेक्ट की सामान्य सेटिंग्स खोलकर, आपके ऐप्स अनुभाग तक नीचे स्क्रॉल करके और फिर वांछित कॉन्फ़िगरेशन फ़ाइल के लिए डाउनलोड बटन पर क्लिक करके इन फ़ाइलों को बाद में कभी भी पुनः डाउनलोड कर सकते हैं।

यूनिटी के लिए फायरबेस एसडीके जोड़ें

  1. फायरबेस कंसोल में डाउनलोड फायरबेस यूनिटी एसडीके पर क्लिक करें।
  2. SDK को किसी सुविधाजनक स्थान पर अनज़िप करें।
  3. अपने खुले यूनिटी प्रोजेक्ट में, एसेट्स > इंपोर्ट पैकेज > कस्टम पैकेज पर नेविगेट करें।
  4. आयात पैकेज संवाद में, उस निर्देशिका पर जाएँ जिसमें अनज़िप्ड SDK है, FirebaseAnalytics.unitypackage चुनें और फिर Open पर क्लिक करें।
  5. दिखाई देने वाले आयात एकता पैकेज संवाद से, आयात पर क्लिक करें।
  6. निम्नलिखित दो पैकेज आयात करने के लिए पिछले चरणों को दोहराएँ:
    • FirebaseRemoteConfig.unitypackage
    • FirebaseCrashlytics.unitypackage
      क्रैशलाइटिक्स एक हल्का, रियलटाइम क्रैश रिपोर्टर है जो आपके ऐप की गुणवत्ता को खराब करने वाली स्थिरता संबंधी समस्याओं को ट्रैक करने, प्राथमिकता देने और ठीक करने में आपकी मदद करता है। यदि आपने पहले इसका उपयोग नहीं किया है, तो यूनिटी के लिए क्रैशलाईटिक्स लर्निंग पाथवे को पूरा करने पर विचार करें।
  7. फायरबेस कंसोल पर लौटें और, सेटअप वर्कफ़्लो में, अगला क्लिक करें।

यूनिटी परियोजनाओं में फायरबेस एसडीके जोड़ने के बारे में अधिक जानकारी के लिए, अतिरिक्त यूनिटी इंस्टॉलेशन विकल्प देखें।

4. रिमोट कॉन्फिग डिफ़ॉल्ट सेट करें और नए मान प्राप्त करें

इस कोडलैब में, आप उन ऑब्जेक्ट्स को अपडेट करेंगे जो कोड में परिभाषित मानों का उपयोग करते हैं या रिमोट कॉन्फिग के साथ इंस्ट्रूमेंट किए गए मानों का उपयोग करने के लिए यूनिटी संपादक में क्रमबद्ध हैं। आप SetDefaultsAsync का उपयोग करके प्रत्येक पैरामीटर के लिए डिफ़ॉल्ट मान कॉन्फ़िगर करेंगे ताकि आपका ऐप रिमोट कॉन्फ़िगरेशन बैकएंड से कनेक्ट होने से पहले इच्छित व्यवहार करे। आपका ऐप रिमोट कॉन्फिग से नए मान लाकर और उन्हें कोड में प्रयोग करने योग्य बनाने के लिए सक्रिय करके अद्यतित रहेगा।

रिमोट कॉन्फिग से नए मान लाने के लिए, Assets/Hamster/Scripts/MainGame.cs फ़ाइल में पहले से ही कई गैर-कार्यान्वयन विधियां मौजूद हैं जिन्हें पूरा किया जाना चाहिए।

  1. MainGame.cs में कथनों का using निम्नलिखित जोड़ें:
    using Firebase.Crashlytics;
    using Firebase.Extensions;
    using Firebase.RemoteConfig;
    
    Firebase.Extensions मॉड्यूल में C# टास्क एपीआई के लिए कुछ एक्सटेंशन शामिल हैं जो कॉलबैक के साथ आरंभीकरण प्रक्रिया को प्रबंधित करने को आसान बनाने में मदद करेंगे।
  2. मौजूदा InitializeCommonDataAndStartGame() विधि को वर्तमान में लागू नहीं की गई विधि, InitializeFirebaseAndStartGame() से प्रतिस्थापित करके अपने MainGame.cs Start() () विधि में फ़ायरबेस आरंभीकरण जोड़ें:
    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. फ़ायरबेस आरंभीकरण इन-ऐप डिफ़ॉल्ट मान सेट करने के लिए सफलता पर 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 विधि को पूरा करने की आवश्यकता है। यह onFetchAndActivateSuccessful नाम के कॉलबैक पैरामीटर का उपयोग करके रिमोट कॉन्फिग के तरीकों FetchAsync (जो रिमोट कॉन्फिग से नए मान प्राप्त करता है) और ActivateAsync (जो उन प्राप्त मूल्यों को कोड में उपलब्ध कराने के लिए सक्रिय करता है) पर कॉल की श्रृंखला बनाएगा।

पिछले चरण में हमने जो स्टार्टअप कोड जोड़ा था, वह अनुक्रम के अंत में गेम शुरू करने के लिए FetchRemoteConfig InitializeCommonDataAndStartGame के साथ कॉलबैक के रूप में कॉल करता है। आप अलग-अलग परिणामों के साथ फ़ेच को लागू करने के लिए FetchRemoteConfig पर वैकल्पिक कॉलबैक पास कर सकते हैं। एक उदाहरण (जिसे आप बाद में लागू करेंगे) एक ऐसी विधि से गुजर रहा है जो नए यूआई मेनू खोलता है, जो रिमोट कॉन्फ़िगरेशन मानों पर निर्भर करता है। इससे मेनू केवल उन मानों को लाने और सक्रिय करने के बाद ही खुलेंगे।

  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. रिमोट कॉन्फिग लोडिंग रणनीति सेट करें

ऐप के उपयोग के दौरान किसी अन्य समय मूल्यों को लाने और सक्रिय करने के लिए, आपको इन फ़ंक्शनों को फिर से कॉल करने की आवश्यकता है और, यदि किसी ऑब्जेक्ट ने मूल्यों को कैश किया है, तो उन्हें अपडेट करने के लिए सूचित किया जाना चाहिए। रिमोट कॉन्फ़िग मानों को पुनः प्राप्त करने की रणनीति विकसित करने के लिए, विचार करें कि नए मानों की आवश्यकता कब है और उपयोग के दौरान उनके परिवर्तन से बचने के लिए नए मानों को लाने और सक्रिय करने की शुरुआत कब की जाए।

जैसा कि वर्तमान में लागू किया गया है, ऐप शुरू होने पर रिमोट कॉन्फिग मान लाए और सक्रिय किए जाते हैं। मेनू परिवर्तन के दौरान फ़ेच को छिपाया जा सकता है जबकि संक्रमण के दौरान इंटरैक्शन को अवरुद्ध भी किया जा सकता है। इसके अलावा, नए मान प्राप्त करने के लिए यह अक्सर सबसे प्रासंगिक समय होता है, क्योंकि मेनू स्थिति में बदलाव का उपयोग अक्सर यह जानने के लिए किया जा सकता है कि खिलाड़ी "कहां" जा रहा है और यह अनुमान लगा सकता है कि किसी मान का उपयोग किया जाएगा।

मेकाहैमस्टर के मेनू सिस्टम को देखते हुए, यूआई ब्लॉकिंग मेनू रिफ्रेश को जोड़ने का सबसे आसान तरीका मुख्य मेनू फिर से शुरू होने से पहले इसे कॉल करना है (विशेष रूप से जब इसे किसी अन्य मेनू से बैक आउट करके एक्सेस किया जाता है) और यूआई डिस्प्ले विधि को onFetchAndActivateSuccessful कॉलबैक के रूप में पास करना है। लेवल सेलेक्ट मेनू के लिए भी ऐसा ही किया जा सकता है।

ऐप स्टार्ट-अप के हिस्से के रूप में प्रारंभिक लोड के साथ, मुख्य मेनू के माध्यम से जाने वाले किसी भी मेनू नेविगेशन को इनमें से पहले द्वारा नियंत्रित किया जाएगा, जबकि लेवल सेलेक्ट मेनू के किसी भी पुन: प्रवेश के कारण भी ताज़ा हो जाएगा। स्तर चयन मेनू में प्रारंभिक प्रवेश कोई मायने नहीं रखता क्योंकि इसे केवल मुख्य मेनू से ही एक्सेस किया जा सकता है और इस प्रकार यह पहले से ही कवर किया गया है।

ऐप में इसे सक्षम करने के लिए, मुख्य मेनू में प्रासंगिक तरीकों को पूरा करें और फ़ाइलों का स्तर चुनें, जो FetchAsync और ActivateAsync के पूरा होने तक UI डिस्प्ले को ब्लॉक कर देगा:

  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. लाने के व्यवहार को डीबग/मान्य करें

इस बिंदु पर, निदान/सत्यापन जांच करना फायदेमंद है। निम्नलिखित प्रक्रिया आपको अपने ऐप का मैन्युअल रूप से परीक्षण करने की अनुमति देगी और यह रिमोट कॉन्फ़िगरेशन मानों को कैसे/कैसे प्राप्त और सक्रिय करती है।

जानकारी आपके सिम्युलेटर, डिवाइस या संपादक लॉग के हिस्से के रूप में मुद्रित की जाएगी। iOS के लिए, आप Xcode में डिवाइस और सिम्युलेटर लॉग देख सकते हैं। Android के लिए, adb logcat चलाकर लॉग देखें। यदि आप संपादक में प्ले दबाकर कोड को यूनिटी में चलाते हैं, तो लॉग कंसोल टैब में दिखाई देते हैं।

  1. ऐप को फिर से बनाएं और चलाएं (संपादक में, किसी डिवाइस या सिम्युलेटर का उपयोग करके)।
  2. गेम का मुख्य मेनू प्रकट होने के बाद, अपने गेम के लॉग आउटपुट की समीक्षा करें, जिसमें FetchRemoteConfig और ActivateRetrievedRemoteConfigValues ​​में Debug.Log द्वारा उत्पन्न लॉग शामिल होने चाहिए। इन्हें "डेटा लाया जा रहा है..." और "दूरस्थ डेटा लोड और तैयार" संदेश दिखाना चाहिए। इन संदेशों की शुरुआत में टाइमस्टैम्प पर ध्यान दें।
  3. गेम में, लाइसेंस दबाएँ।
  4. ठीक दबाएँ.
  5. गेम के मुख्य मेनू के प्रकट होने की प्रतीक्षा करें।
  6. अपने गेम के लॉग आउटपुट की समीक्षा करें, जो पहले चरण के समान होना चाहिए, नए टाइमस्टैम्प के साथ (सिस्टम घड़ी पर सेट किए गए समय से मेल खाते हुए जहां आप गेम चला रहे हैं)।
  7. गेम में, Play दबाएँ।
  8. लेट्स रोल दबाएँ।
  9. कीबोर्ड तीरों का उपयोग करके गेंद को लक्ष्य तक ले जाएँ, जिससे एक लेवल कम्प्लीट मेनू खुल जाएगा।
  10. स्तर दबाएँ.
  11. लेवल सेलेक्ट मेनू के लोड होने तक प्रतीक्षा करें।
  12. अपने गेम के लॉग आउटपुट की दोबारा समीक्षा करें। इसे पहले के चरणों के लॉग संदेशों से नए टाइमस्टैम्प के साथ मेल खाना चाहिए (सिस्टम घड़ी पर निर्धारित समय से मेल खाते हुए जहां आप गेम चला रहे हैं)।

यदि उनमें से कोई भी आपके ऐप में दिखाई नहीं देता है, तो फ़ेच और सक्रिय प्रवाह का कुछ हिस्सा (या आपका डिवाइस) गलत कॉन्फ़िगर किया जा सकता है। यदि पहला लॉग दिखाई नहीं देता है, तो संभावना है कि आपका गेम प्रारंभ नहीं होगा। अपने प्रोजेक्ट/पर्यावरण के बारे में चेतावनियों और त्रुटियों के लिए संपादक कंसोल या डिवाइस/एमुलेटर लॉग की समीक्षा करें और उनकी जांच करें-समस्या इंटरनेट से कनेक्ट करने जितनी सरल हो सकती है।

यदि मेनू लोड करने से प्रारंभिक लॉग दिखाई देते हैं, लेकिन बाद के लॉग में से एक दिखाई नहीं देता है, Assets/Hamster/Scripts/States/MainMenu.cs और Assets/Hamster/Scripts/States/BaseLevelSelect.cs में फिर से Resume के तरीकों की जांच/पुन: कार्यान्वयन करें।

8. अपना कोड लिखें

अब जब आपने SetDefaultsAsync() में इन-ऐप पैरामीटर मान कॉन्फ़िगर कर लिया है और FetchAsync() और ActivateAsync() के साथ सबसे अद्यतित संस्करण उपलब्ध करा दिया है, तो आप उन मानों को कोड में संदर्भित और उपयोग करेंगे।

जब आप रिमोट कॉन्फिग बैकएंड में मान सेट करते हैं, उन्हें लाते हैं, और उन्हें सक्रिय करते हैं ( या दोनों एक साथ करते हैं ), तो वे मान आपके ऐप पर उपलब्ध होते हैं। इन मानों का उपयोग करने के लिए, GetValue(string key ) पर कॉल करें, और एक पैरामीटर कुंजी को तर्क के रूप में चुनें। यह एक ConfigValue लौटाता है, जिसमें विभिन्न समर्थित प्रकारों के रूप में मूल्य तक पहुंचने के गुण होते हैं: string , bool , long , double । इस प्रोजेक्ट और अधिकांश गेमिंग उपयोग के मामलों में, आपको अंतिम दो प्रकारों को अधिक मुहावरेदार int और float में डालना होगा। यह सुनिश्चित करने के लिए कि ये रूपांतरण समस्याएँ पैदा न करें, सुनिश्चित करें कि रिमोट कॉन्फ़िगरेशन में सेट किए गए प्रारंभिक मान उन प्रकारों की मान्य सीमा के भीतर हैं जिनका उपयोग आप अपने ऐप कोड में करेंगे।

  1. using Firebase.RemoteConfig; निम्न फ़ाइलों के शीर्ष पर:
    • Assets/Hamster/Scripts/States/MainMenu.cs
    • Assets/Hamster/Scripts/MapObjects/AccelerationTile.cs
  2. AccelerationTile.cs की Start विधि को बदलें:
    private void Start() {
       var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
       Acceleration = (float)remoteConfig.GetValue(AccelerationTileForceKey).DoubleValue;
    }
    
    इस परिवर्तन के साथ, त्वरण टाइल द्वारा लगाए गए बल की मात्रा को रिमोट कॉन्फ़िगरेशन से प्राप्त बल में बदल दिया जाएगा।
  3. MainMenu.cs की InitializeUI विधि का मुख्य भाग संपादित करें:
    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. पैरामीटर मानों को दूरस्थ रूप से सेट करें

अब जब आपका ऐप पूरी तरह से इंस्ट्रुमेंटेड हो गया है, तो आप रिमोट कॉन्फ़िगरेशन सर्वर पर पैरामीटर और मान कॉन्फ़िगर करने के लिए तैयार हैं। इस कोडलैब में, हम इसे फायरबेस कंसोल का उपयोग करके सेट करेंगे।

  1. फायरबेस कंसोल में, अपना प्रोजेक्ट खोलें।
  2. रिमोट कॉन्फिग डैशबोर्ड देखने के लिए मेनू से रिमोट कॉन्फिग चुनें।
  3. आपके द्वारा अपने ऐप में परिभाषित और निम्न तालिका में सूचीबद्ध प्रत्येक पैरामीटर के लिए, पैरामीटर जोड़ें पर क्लिक करें, पैरामीटर नाम (कुंजी) में पेस्ट करें, तालिका में सूचीबद्ध डेटा प्रकार का चयन करें, इन-ऐप डिफ़ॉल्ट का उपयोग अक्षम करें और पेस्ट करें नया डिफ़ॉल्ट मान:

    पैरामीटर नाम (कुंजी)

    डेटा प्रकार

    डिफ़ॉल्ट मान

    त्वरण_टाइल_बल

    संख्या

    100

    उपशीर्षक_ओवरराइड

    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. वेरिएंट परोसने के लिए रिमोट कॉन्फिग शर्तों का उपयोग करें

हो सकता है कि आप उपयोगकर्ता को उनकी भाषा, वे कहां हैं, दिन का समय, या वे किस प्लेटफ़ॉर्म का उपयोग करते हैं, के आधार पर ऐप अनुभव प्रदान करना चाहें। रिमोट कॉन्फिग स्थितियां आपको उपयोगकर्ता को अलग-अलग मान (जिन्हें वेरिएंट कहा जाता है) प्रदान करने के लिए इन और अन्य विशेषताओं को व्यक्तिगत रूप से या संयोजन में उपयोग करने की क्षमता देती है।

शर्तों का एक सामान्य उपयोग iOS और Android प्लेटफ़ॉर्म के बीच सामग्री को बदलना है। ऐसी शर्त लागू करने के लिए नीचे दिए गए चरणों का पालन करें जो subtitle_override के लिए एक अलग मान प्रदान करती है, जो इस बात पर निर्भर करता है कि कौन सा प्लेटफ़ॉर्म उपयोग में है।

  1. फायरबेस कंसोल में अपने प्रोजेक्ट का रिमोट कॉन्फिग टैब खोलें।
  2. subtitle_override.
  3. निचले बाएँ कोने पर, नया जोड़ें पर क्लिक करें।
  4. दिखाई देने वाले ड्रॉप-डाउन में, सशर्त मान पर होवर करें और नई शर्त बनाएं पर क्लिक करें। Remote Config parameter editor:\nConditional value option
  5. संकेत मिलने पर, यदि आप iOS को लक्षित कर रहे हैं तो शर्त को "iOS है" या यदि आप Android को लक्षित कर रहे हैं तो "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. रीयल-टाइम अपडेट प्राप्त करने के लिए रिमोट कॉन्फ़िगरेशन कॉन्फ़िगर करें

रिमोट कॉन्फिग अब वास्तविक समय में रिमोट कॉन्फिग टेम्प्लेट के अपडेट को सुन और संभाल सकता है। कॉन्फिग परिवर्तन और अद्यतन मूल्यों को सुनने के लिए ऐप्स नए रीयल-टाइम रिमोट कॉन्फिग एपीआई की सदस्यता ले सकते हैं।

यह काम किस प्रकार करता है

अपडेट सुनने के लिए, आपके ऐप को एक विधि लागू करनी होगी जो OnConfigUpdateListener ईवेंट की सदस्यता लेती है। जबकि एक या अधिक कॉन्फिग अपडेट श्रोता सब्सक्राइब किए गए हैं, नए रिमोट कॉन्फिग टेम्प्लेट स्वचालित रूप से लाए जाएंगे, सब्सक्राइब किए गए हैंडलर को कॉल किया जाएगा और प्रतिक्रिया में तर्क करने के लिए उपयोग किया जा सकता है, जैसे नए मानों को सक्रिय करना और उन्हें बाकी एप्लिकेशन के लिए उपलब्ध कराना।

रीयल-टाइम रिमोट कॉन्फ़िगरेशन लागू करें

यह समझाने के लिए कि यह गेम में कैसे काम करता है, अपने कोड में निम्नलिखित परिवर्तन करें।

एक कॉन्फिग अपडेट हैंडलर बनाएं

कॉन्फिग अपडेट इवेंट का उपयोग करने का पहला कदम इसे सुनने में सक्षम एक विधि बनाना है। निम्नलिखित विधि को 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 सक्रिय करने के लिए, ईवेंट की सदस्यता लें। Assets/Hamster/Scripts/MainGame.cs में InitializeCommonDataAndStartGame() विधि को निम्नलिखित से बदलें:

   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; पर समाप्त होती है) इवेंट हैंडलर को इवेंट में सब्सक्राइब करती है।

जब हैंडलर की स्वामित्व वाली वस्तु नष्ट हो जाए तो सदस्यता समाप्त करें

अशक्त संदर्भ त्रुटियों को रोकने के लिए, घटनाओं की सदस्यता लेने वाली विधियों वाली वस्तुओं को नष्ट होने पर उस विधि की सदस्यता समाप्त करनी होगी। निम्नलिखित विधि को Assets/Hamster/Scripts/MainGame.cs में जोड़ें:

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

नई कार्यक्षमता का परीक्षण करें

नई कार्यक्षमता को सत्यापित करने के लिए, अपना निर्मित ऐप आज़माएं। निम्नलिखित प्रक्रिया के लिए आवश्यक है कि आप वास्तविक डिवाइस का उपयोग करके लॉग पढ़ सकें और डीबग कर सकें।

acceleration_tile_force बदलें और निरीक्षण करें

अपना ऐप शुरू करने के बाद, फ़ायरबेस कंसोल के रिमोट कॉन्फ़िगरेशन अनुभाग में:

  1. acceleration_tile_force के आगे संपादन बटन दबाएँ।

dc602d4db54e50a4.png

  1. मान को '120' में बदलें और सहेजें दबाएँ।

fcbc1df848f88009.png

  1. परिवर्तन प्रकाशित करें बटन पर क्लिक करें।

3785c1e00e7a6359.png

  1. लॉग का निरीक्षण करें.
  2. यदि आपको कोई लॉग संदेश दिखाई देता है जो "सुनते समय त्रुटि हुई" से शुरू होता है, तो उसका शेष भाग पढ़ें और प्रिंट होने वाले त्रुटि संदेश के साथ डीबग करने का प्रयास करें।
  3. यदि आपको कोई लॉग दिखाई देता है जो "अपडेटेड कुंजी" से शुरू होता है, तो आपके ऐप को परिवर्तित मान प्राप्त हो गए हैं।
  4. यदि आपको इनमें से कुछ भी दिखाई नहीं देता है, तो अपने बाकी लॉग देखें और फिर कॉन्फिग अपडेट हैंडलर बनाएं के निर्देशों की दोबारा समीक्षा करें, फिर से परीक्षण करें और यह निर्धारित करने के लिए लॉग की दोबारा जांच करें कि क्या कुछ गड़बड़ है।

12. बधाई हो!

आपने इन-गेम मानों को अपने ऐप में लाकर और विभिन्न वेरिएंट पेश करने के लिए शर्तों का उपयोग करके दूरस्थ रूप से नियंत्रित करने के लिए रिमोट कॉन्फ़िगरेशन का उपयोग किया है!

हमने क्या कवर किया है

  • रिमोट कॉन्फिग मान कैसे सेट करें और पुनः प्राप्त करें
  • पुनर्प्राप्त मूल्यों का उपयोग करने के लिए अपने यूनिटी सी# कोड को कैसे इंस्ट्रुमेंट करें
  • JSON मानों के रूप में मिश्रित मानों/ऑब्जेक्टों को कैसे संग्रहीत करें, उपकरणित करें और ओवरराइड करें
  • अलग-अलग वैल्यू वेरिएंट पेश करने के लिए रिमोट कॉन्फिग शर्तों का उपयोग कैसे करें

अगले कदम

किसी ऐप इंस्टेंस द्वारा एकाधिक मानों (स्थितियों या स्थानीयता के कारण) वाले पैरामीटर का उपयोग करने पर कौन से मान प्राप्त होते हैं, इसके तर्क को बेहतर ढंग से समझने के लिए पैरामीटर मान प्राथमिकता के बारे में पढ़ें।