Firebase रिमोट कॉन्फ़िगरेशन की मदद से, अपने यूनिटी गेम को इंस्टॉल करें

1. शुरुआती जानकारी

Firebase रिमोट कॉन्फ़िगरेशन का इस्तेमाल करके, अपने ऐप्लिकेशन में की-वैल्यू पेयर तय किए जा सकते हैं. इन्हें पैरामीटर भी कहा जाता है. साथ ही, इनकी वैल्यू क्लाउड में अपडेट की जा सकती हैं. इनकी मदद से, ऐप्लिकेशन का अपडेट डिस्ट्रिब्यूट किए बिना, ऐप्लिकेशन के दिखने और काम करने के तरीके में बदलाव किया जा सकता है.

आपको इस नई सुविधा को सैंपल गेम, MechaHamster: Level Up with Firebase वर्शन में जोड़ना होगा. यह नमूना गेम, क्लासिक Firebase गेम MechaHamster का एक नया वर्शन है जो इसकी ज़्यादातर बिल्ट-इन Firebase फ़ंक्शन को हटा देता है और आपको उनकी जगह Firebase के नए इस्तेमाल को लागू करने का मौका देता है.

यह पक्का करने के लिए कि आपका ऐप्लिकेशन सही तरीके से काम करे, आपको सैंपल गेम कोड में वैल्यू के लिए डिफ़ॉल्ट कॉन्फ़िगरेशन सेट करने होंगे. ये वैल्यू Firebase कंसोल में रिमोट कॉन्फ़िगरेशन में सेट की गई वैल्यू से बदली जा सकती हैं.

आपको यह जानकारी मिलेगी

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

आपको इन चीज़ों की ज़रूरत होगी

  • iOS और/या Android बिल्ड सपोर्ट वाला Unity 2019.1.0f1 या इसके बाद का वर्शन
  • गेम बनाने और चलाने के लिए, फ़िज़िकल Android/iOS डिवाइस या सिम्युलेटर/एम्युलेटर

2. अपना डेवलपमेंट एनवायरमेंट सेट अप करें

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

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

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

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

इसके अलावा, अगर आपने GitHub फ़ाइल इंस्टॉल नहीं की है, तो डेटा स्टोर करने की जगह को ZIP फ़ाइल के रूप में डाउनलोड करें.

Unity एडिटर में Firebase के साथ लेवल बढ़ाएं सुविधा खोलें

  1. Unity Hub लॉन्च करें और प्रोजेक्ट टैब में, खोलें के बगल में मौजूद ड्रॉप-डाउन ऐरो पर क्लिक करें.
  2. डिस्क से प्रोजेक्ट जोड़ें पर क्लिक करें.
  3. उस डायरेक्ट्री पर जाएं जिसमें कोड शामिल है. इसके बाद, ठीक है पर क्लिक करें.
  4. अगर कहा जाए, तो इस्तेमाल करने के लिए कोई Unity एडिटर वर्शन और अपना टारगेट प्लैटफ़ॉर्म (Android या iOS) चुनें.
  5. प्रोजेक्ट के नाम, level-up-with-firebase पर क्लिक करें और प्रोजेक्ट, Unity एडिटर में खुल जाएगा.
  6. अगर आपका एडिटर टूल अपने-आप नहीं खुलता, तो MainGameScene को ऐसेट में खोलें > Unity Editor के प्रोजेक्ट टैब में मौजूद Hamster.

Unity को इंस्टॉल और इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, Unity में काम करना लेख पढ़ें.

3. अपने Unity प्रोजेक्ट में Firebase जोड़ना

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 डाउनलोड करें.
    • Android के लिए: google-services.json डाउनलोड करें.
  2. अपने Unity प्रोजेक्ट की प्रोजेक्ट विंडो खोलें. इसके बाद, दोनों कॉन्फ़िगरेशन फ़ाइलों को ऐसेट फ़ोल्डर में ले जाएं.
  3. Firebase कंसोल पर, सेटअप वर्कफ़्लो में वापस जाएं. इसके बाद, आगे बढ़ें पर क्लिक करें और Unity के लिए Firebase SDK टूल जोड़ें.

ध्यान दें: प्रोजेक्ट की सामान्य सेटिंग खोलकर, नीचे की ओर स्क्रोल करके आपके ऐप्लिकेशन सेक्शन में जाकर, अपनी पसंद की कॉन्फ़िगरेशन फ़ाइल के 'डाउनलोड करें' बटन पर क्लिक करके, इन फ़ाइलों को कभी भी फिर से डाउनलोड किया जा सकता है.

Unity के लिए Firebase SDK टूल जोड़ना

  1. Firebase कंसोल में, Firebase Unity SDK टूल डाउनलोड करें पर क्लिक करें.
  2. SDK टूल को किसी ऐसी जगह पर अनज़िप करें जिसे आसानी से अनज़िप किया जा सकता है.
  3. अपने खुले हुए Unity प्रोजेक्ट में, ऐसेट पर जाएं > पैकेज इंपोर्ट करें > कस्टम पैकेज.
  4. पैकेज इंपोर्ट करें डायलॉग में, उस डायरेक्ट्री पर जाएं जिसमें अनज़िप किया गया SDK टूल है. इसके बाद, FirebaseAnalytics.unitypackage चुनें और फिर खोलें पर क्लिक करें.
  5. स्क्रीन पर दिखने वाले Unity पैकेज को इंपोर्ट करें डायलॉग बॉक्स में, इंपोर्ट करें पर क्लिक करें.
  6. इन दो पैकेज को इंपोर्ट करने के लिए, यह तरीका दोहराएं:
    • FirebaseRemoteConfig.unitypackage
    • FirebaseCrashlytics.unitypackage
      Crashlytics एक हल्का और रीयल टाइम क्रैश रिपोर्टर है. यह ऐप्लिकेशन क्रैश होने से जुड़ी समस्याओं को ट्रैक करने, उन्हें प्राथमिकता देने, और ठीक करने में मदद करता है. इससे आपके ऐप्लिकेशन की क्वालिटी खराब होती है. अगर आपने पहले कभी इसका इस्तेमाल नहीं किया है, तो Crashlytics LearningPathway for Unity को पूरा करें.
  7. Firebase कंसोल पर वापस जाएं और सेटअप वर्कफ़्लो में, आगे बढ़ें पर क्लिक करें.

Unity प्रोजेक्ट में Firebase SDK टूल जोड़ने के बारे में ज़्यादा जानकारी के लिए, Unity के लिए इंस्टॉल करने के अतिरिक्त विकल्प देखें.

4. रिमोट कॉन्फ़िगरेशन की डिफ़ॉल्ट वैल्यू सेट करें और नई वैल्यू फ़ेच करें

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

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

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

हमने पिछले चरण में जो स्टार्टअप कोड जोड़ा था उसे 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. रिमोट कॉन्फ़िगरेशन लोड होने की रणनीति सेट अप करना

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

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

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

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

ऐप्लिकेशन में इसे चालू करने के लिए, मुख्य मेन्यू में जाकर काम के तरीकों को पूरा करें और फ़ाइलों को एक-दूसरे के लेवल पर चुनें. ऐसा करने से, 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. फ़ेच व्यवहार को डीबग/पुष्टि करें

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

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

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

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

अगर मेन्यू लोड होने से शुरुआती लॉग दिखते हैं, लेकिन बाद के लॉग में से कोई एक नहीं दिखता, तो 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. पैरामीटर वैल्यू को रिमोट तरीके से सेट करना

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

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

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

    डेटा टाइप

    डिफ़ॉल्ट वैल्यू

    ऐक्सेलरेशन_टाइल_फ़ोर्स

    संख्या

    100

    सबटाइटल

    JSON

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

    रिमोट कॉन्फ़िगरेशन पैरामीटर एडिटर में,\nacceleration_ile_force गया
  4. अपने बदलावों को सेव करने के लिए, सेव करें पर क्लिक करें.
  5. नया कॉन्फ़िगरेशन पब्लिश करने और अपने गेम के लिए नई वैल्यू उपलब्ध कराने के लिए, पब्लिश करें पर क्लिक करें.
  6. इन रिमोट पैरामीटर को सेट करने के बाद, अपना ऐप्लिकेशन फिर से चलाएं और देखें कि ये मूल डिफ़ॉल्ट को कैसे बदलते हैं.मेकाहैमस्टर की मुख्य स्क्रीन, जिसमें डीबग किया गया है\nमेन्यू चालू किया गया है

10. वैरिएंट दिखाने के लिए, रिमोट कॉन्फ़िगरेशन की शर्तों का इस्तेमाल करना

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

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

  1. Firebase कंसोल में अपने प्रोजेक्ट का रिमोट कॉन्फ़िगरेशन टैब खोलें.
  2. subtitle_override. के लिए 'बदलाव करें' बटन पर क्लिक करें
  3. सबसे नीचे बाएं कोने में, नया जोड़ें पर क्लिक करें.
  4. इसके बाद दिखने वाले ड्रॉप-डाउन में, शर्त के साथ वैल्यू पर कर्सर घुमाएं और नई शर्त बनाएं पर क्लिक करें.रिमोट कॉन्फ़िगरेशन पैरामीटर एडिटर:\nशर्त वाली वैल्यू का विकल्प
  5. जब कहा जाए, तब शर्त को "iOS है" नाम दें अगर आपका टारगेट iOS है, या "यह Android है" लोगों को ध्यान में रखकर बनाया गया है. अगर आपको दोनों को टारगेट करना है, तो यहां से एक चुनें और बाकी कोडलैब के लिए उसका इस्तेमाल करें.iOS से जुड़ी खास शर्त तय करने के लिए, &#39;नई शर्त तय करें&#39;\nडायलॉग का इस्तेमाल करना
  6. लागू होता है, अगर... के नीचे, चुनें... ड्रॉप-डाउन पर क्लिक करके प्लैटफ़ॉर्म चुनें. इसके बाद, सही प्लैटफ़ॉर्म चुनें.iOS प्लैटफ़ॉर्म चुनने के लिए, &#39;नई शर्त तय करें&#39;\nएडिटर का इस्तेमाल करना
  7. शर्त बनाने के लिए, शर्त बनाएं पर क्लिक करें. पैरामीटर संपादित करें डायलॉग फिर से दिखाई देता है और अब आप कोई मान सेट कर सकते हैं:
    • अगर Android को टारगेट किया जा रहा है, तो वैल्यू को इस पर सेट करें:
      {"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 बदलें और निगरानी करें

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

  1. acceleration_tile_force के आगे दिया गया 'बदलाव करें' बटन दबाएं.

dc602d4db54e50a4.png

  1. वैल्यू को ‘120' में बदलें और सेव करें दबाएं.

FCbc1df848f88009.png

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

3785c1e00e7a6359.png

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

12. बधाई हो!

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

हमने इन विषयों के बारे में बताया

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

अगले चरण

पैरामीटर वैल्यू की प्राथमिकता के बारे में पढ़ें. इससे यह समझने में मदद मिलेगी कि किसी ऐप्लिकेशन इंस्टेंस से कौनसी वैल्यू मिलती हैं. ऐसा तब होता है, जब कोई ऐप्लिकेशन इंस्टेंस कई वैल्यू (स्थितियों या इलाके की वजह से) वाले पैरामीटर का इस्तेमाल करता है.