Firebase रिमोट कॉन्फ़िगरेशन का इस्तेमाल शुरू करना


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

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

इस गाइड में, शुरू करने का तरीका बताया गया है. साथ ही, इसमें कुछ सैंपल कोड के बारे में भी बताया गया है. इनमें से हर कोड को GitHub रिपॉज़िटरी में firebase/quickstart-unity से क्लोन किया जा सकता है या डाउनलोड किया जा सकता है.

पहला चरण: अपने ऐप्लिकेशन में रिमोट कॉन्फ़िगरेशन जोड़ना

रिमोट कॉन्फ़िगरेशन का इस्तेमाल करने से पहले, आपको:

  • अपना Unity प्रोजेक्ट रजिस्टर करें और इसे Firebase का इस्तेमाल करने के लिए कॉन्फ़िगर करें.

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

    • अगर आपके पास Unity प्रोजेक्ट नहीं है, तो ऐप्लिकेशन का सैंपल डाउनलोड किया जा सकता है.

  • अपने Unity प्रोजेक्ट में, Firebase Unity SDK (खास तौर पर, FirebaseRemoteConfig.unitypackage) जोड़ें.

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

दूसरा चरण: ऐप्लिकेशन में डिफ़ॉल्ट पैरामीटर वैल्यू को सेट करना

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

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

(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 => {

तीसरा चरण: अपने ऐप्लिकेशन में इस्तेमाल करने के लिए पैरामीटर वैल्यू पाना

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

ये वैल्यू पाने के लिए, पैरामीटर कुंजी को आर्ग्युमेंट के तौर पर देकर, GetValue() का इस्तेमाल करें. यह एक ConfigValue रिटर्न करता है, जिसमें वैल्यू को अलग-अलग बेस टाइप में बदलने के लिए प्रॉपर्टी मौजूद होती हैं.

चौथा चरण: पैरामीटर वैल्यू को सेट करना

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

पांचवां चरण: वैल्यू को फ़ेच और चालू करना (ज़रूरत के हिसाब से)

रिमोट कॉन्फ़िगरेशन बैकएंड से पैरामीटर की वैल्यू फ़ेच करने के लिए, FetchAsync() तरीके को कॉल करें. बैकएंड पर सेट की गई कोई भी वैल्यू, रिमोट कॉन्फ़िगरेशन ऑब्जेक्ट में फ़ेच और कैश मेमोरी में सेव हो जाती है.

// 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() के किसी एक ओवरलोड के पैरामीटर से मैच होता है.

नीचे दिए गए सैंपल कोड में, FetchComplete तरीके को पिछले टास्क (fetchTask) को पास कर दिया गया है. इससे FetchComplete को यह पता चलता है कि वह टास्क पूरा हुआ या नहीं. इसके बाद, कोड Info.LastFetchStatus का इस्तेमाल करके यह तय करता है कि फ़िनिश भी पूरा हुआ या नहीं. ऐसा होने पर, रिमोट कॉन्फ़िगरेशन पैरामीटर की वैल्यू को 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() को शुरू किए जाने तक वैल्यू उपलब्ध नहीं कराई जाती हैं. इससे आपको यह पक्का करने में मदद मिलती है कि नई वैल्यू, हिसाब के बीच में लागू नहीं होती हैं. इसके अलावा, ऐसा अन्य समय भी लागू नहीं होता है जिसकी वजह से समस्याएं या गड़बड़ी हो सकती हैं.

छठा चरण: रीयल टाइम में अपडेट सुनना

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

रीयल-टाइम अपडेट, Firebase Unity SDK टूल के v11.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;
}

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

अगले चरण

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