रिमोट कॉन्फ़िगरेशन को प्रोग्राम के हिसाब से बदलें

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

इस गाइड में बताए गए Remote Config REST API या Admin SDKs का इस्तेमाल करके, Firebase कंसोल में टेंप्लेट को मैनेज करने की प्रोसेस को बायपास किया जा सकता है. इससे, Remote Config में किए गए बदलावों को सीधे अपनी प्रोसेस में इंटिग्रेट किया जा सकता है. उदाहरण के लिए, Remote Config बैकएंड एपीआई की मदद से, ये काम किए जा सकते हैं:

  • अपडेट Remote Config शेड्यूल करना. क्रॉन जॉब के साथ एपीआई कॉल का इस्तेमाल करके, Remote Config वैल्यू को नियमित तौर पर बदला जा सकता है.
  • अपने मालिकाना हक वाले सिस्टम से Firebase Remote Config पर आसानी से स्विच करने के लिए, बैच इंपोर्ट कॉन्फ़िग वैल्यू.
  • Cloud Functions for Firebase के साथ Remote Config का इस्तेमाल करें. इससे सर्वर साइड पर होने वाले इवेंट के आधार पर, आपके ऐप्लिकेशन में वैल्यू बदलती हैं. उदाहरण के लिए, अपने ऐप्लिकेशन में किसी नई सुविधा का प्रमोशन करने के लिए, Remote Config का इस्तेमाल किया जा सकता है. इसके बाद, जब आपको पता चले कि काफ़ी लोगों ने नई सुविधा का इस्तेमाल कर लिया है, तो उस प्रमोशन को अपने-आप बंद होने के लिए सेट किया जा सकता है.

    इस डायग्राम में दिखाया गया है कि Remote Config का बैकएंड, कस्टम टूल और सर्वर के साथ कैसे इंटरैक्ट करता है

इस गाइड के इन सेक्शन में, Remote Config बैकएंड एपीआई की मदद से की जा सकने वाली कार्रवाइयों के बारे में बताया गया है. REST API के ज़रिए इन टास्क को पूरा करने वाले कोड की समीक्षा करने के लिए, इनमें से कोई एक सैंपल ऐप्लिकेशन देखें:

Firebase Admin SDK का इस्तेमाल करके, रिमोट कॉन्फ़िगरेशन में बदलाव करना

Admin SDK, सर्वर लाइब्रेरी का एक सेट है. इसकी मदद से, खास सुविधाओं वाले एनवायरमेंट से Firebase के साथ इंटरैक्ट किया जा सकता है. Remote Config को अपडेट करने के अलावा, Admin SDK की मदद से Firebase पर पुष्टि करने वाले टोकन जनरेट और उनकी पुष्टि की जा सकती है. साथ ही, Realtime Database से डेटा पढ़ा और लिखा जा सकता है. Admin SDK ज़रूरी शर्तें और सेटअप करने के बारे में ज़्यादा जानने के लिए, अपने सर्वर में Firebase Admin SDK टूल जोड़ें लेख पढ़ें.

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

एसडीके को शुरू करना और एपीआई अनुरोधों को अनुमति देना

जब Admin SDK को बिना किसी पैरामीटर के शुरू किया जाता है, तो SDK टूल Google ऐप्लिकेशन के डिफ़ॉल्ट क्रेडेंशियल का इस्तेमाल करता है. साथ ही, FIREBASE_CONFIG एनवायरमेंट वैरिएबल से विकल्प पढ़ता है. अगर FIREBASE_CONFIG वैरिएबल का कॉन्टेंट { से शुरू होता है, तो उसे JSON ऑब्जेक्ट के तौर पर पार्स किया जाएगा. ऐसा न करने पर, SDK यह मान लेगा कि स्ट्रिंग, विकल्पों वाली JSON फ़ाइल का नाम है.

उदाहरण के लिए:

Node.js

const admin = require('firebase-admin');
admin.initializeApp();

Java

FileInputStream serviceAccount = new FileInputStream("service-account.json");
FirebaseOptions options = FirebaseOptions.builder()
        .setCredentials(GoogleCredentials.fromStream(serviceAccount))
        .build();
FirebaseApp.initializeApp(options);

मौजूदा रिमोट कॉन्फ़िगरेशन टेंप्लेट पाएं

Remote Config टेंप्लेट का इस्तेमाल करते समय ध्यान रखें कि इनके वर्शन होते हैं. साथ ही, हर वर्शन की लाइफ़टाइम सीमित होती है. यह लाइफ़टाइम, वर्शन बनने के समय से लेकर उसे अपडेट किए जाने तक होती है. यह 90 दिनों की होती है. साथ ही, सेव किए गए वर्शन की कुल सीमा 300 होती है. ज़्यादा जानकारी के लिए, टेंप्लेट और वर्शन देखें.

बैकएंड एपीआई का इस्तेमाल करके, Remote Config टेंप्लेट का मौजूदा वर्शन JSON फ़ॉर्मैट में पाया जा सकता है.

A/B Testing एक्सपेरिमेंट में खास तौर पर वैरिएंट के तौर पर बनाए गए पैरामीटर और पैरामीटर वैल्यू, एक्सपोर्ट किए गए टेंप्लेट में शामिल नहीं होती हैं.

टेंप्लेट पाने के लिए:

Node.js

function getTemplate() {
  var config = admin.remoteConfig();
  config.getTemplate()
      .then(function (template) {
        console.log('ETag from server: ' + template.etag);
        var templateStr = JSON.stringify(template);
        fs.writeFileSync('config.json', templateStr);
      })
      .catch(function (err) {
        console.error('Unable to get template');
        console.error(err);
      });
}

Java

Template template = FirebaseRemoteConfig.getInstance().getTemplateAsync().get();
// See the ETag of the fetched template.
System.out.println("ETag from server: " + template.getETag());

Remote Config पैरामीटर में बदलाव करना

प्रोग्राम के हिसाब से, Remote Config पैरामीटर और पैरामीटर ग्रुप में बदलाव किया जा सकता है और उन्हें जोड़ा जा सकता है. उदाहरण के लिए, "new_menu" नाम वाले मौजूदा पैरामीटर ग्रुप में, सीज़नल जानकारी के डिसप्ले को कंट्रोल करने के लिए एक पैरामीटर जोड़ा जा सकता है:

Node.js

function addParameterToGroup(template) {
  template.parameterGroups['new_menu'].parameters['spring_season'] = {
    defaultValue: {
      useInAppDefault: true
    },
    description: 'spring season menu visibility.',
  };
}

Java

template.getParameterGroups().get("new_menu").getParameters()
        .put("spring_season", new Parameter()
                .setDefaultValue(ParameterValue.inAppDefault())
                .setDescription("spring season menu visibility.")
        );

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

रिमोट कॉन्फ़िगरेशन की शर्तों में बदलाव करना

प्रोग्राम के हिसाब से, Remote Config शर्तें और शर्तों के हिसाब से वैल्यू में बदलाव किया जा सकता है. साथ ही, इन्हें जोड़ा भी जा सकता है. उदाहरण के लिए, नई शर्त जोड़ने के लिए:

Node.js

function addNewCondition(template) {
  template.conditions.push({
    name: 'android_en',
    expression: 'device.os == \'android\' && device.country in [\'us\', \'uk\']',
    tagColor: 'BLUE',
  });
}

Java

template.getConditions().add(new Condition("android_en",
        "device.os == 'android' && device.country in ['us', 'uk']", TagColor.BLUE));

सभी मामलों में, बदलाव करने के बाद आपको टेंप्लेट को पक्का तौर पर पब्लिश करना होगा.

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

Remote Config टेंप्लेट की पुष्टि करना

आपके पास अपडेट पब्लिश करने से पहले, उनकी पुष्टि करने का विकल्प होता है. इसके लिए, यहां दिया गया तरीका अपनाएं:

Node.js

function validateTemplate(template) {
  admin.remoteConfig().validateTemplate(template)
      .then(function (validatedTemplate) {
        // The template is valid and safe to use.
        console.log('Template was valid and safe to use');
      })
      .catch(function (err) {
        console.error('Template is invalid and cannot be published');
        console.error(err);
      });
}

Java

try {
  Template validatedTemplate = FirebaseRemoteConfig.getInstance()
          .validateTemplateAsync(template).get();
  System.out.println("Template was valid and safe to use");
} catch (ExecutionException e) {
  if (e.getCause() instanceof FirebaseRemoteConfigException) {
    FirebaseRemoteConfigException rcError = (FirebaseRemoteConfigException) e.getCause();
    System.out.println("Template is invalid and cannot be published");
    System.out.println(rcError.getMessage());
  }
}

पुष्टि करने की इस प्रोसेस में, इन गड़बड़ियों की जांच की जाती है: पैरामीटर और शर्तों के लिए डुप्लीकेट कुंजियां, शर्तों के अमान्य नाम या ऐसी शर्तें जो मौजूद नहीं हैं या गलत फ़ॉर्मैट वाले ईटैग. उदाहरण के लिए, अगर किसी अनुरोध में तय सीमा से ज़्यादा कुंजियां (2,000) शामिल हैं, तो गड़बड़ी का मैसेज Param count too large दिखेगा.

Remote Config टेंप्लेट पब्लिश करना

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

अगर ज़रूरी हो, तो REST API का इस्तेमाल करके, पिछले वर्शन पर वापस जाएं. अपडेट में गड़बड़ियों के जोखिम को कम करने के लिए, पब्लिश करने से पहले पुष्टि करें.

Remote Config निजीकरण और शर्तें, डाउनलोड किए गए टेंप्लेट में शामिल होती हैं. इसलिए, किसी दूसरे प्रोजेक्ट में पब्लिश करने की कोशिश करते समय, इन सीमाओं के बारे में जानना ज़रूरी है:

  • मनमुताबिक बनाने की सुविधा को एक प्रोजेक्ट से दूसरे प्रोजेक्ट में इंपोर्ट नहीं किया जा सकता.

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

  • शर्तों को एक प्रोजेक्ट से दूसरे प्रोजेक्ट में इंपोर्ट किया जा सकता है. हालांकि, ध्यान दें कि किसी खास शर्त वाली वैल्यू (जैसे, ऐप्लिकेशन आईडी या ऑडियंस) को पब्लिश करने से पहले, टारगेट प्रोजेक्ट में मौजूद होना चाहिए.

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

  • अगर आपको ऐसा टेंप्लेट पब्लिश करना है जिसमें Google Analytics पर निर्भर रहने वाली शर्तें शामिल हैं, तो टारगेट प्रोजेक्ट में Analytics चालू होना चाहिए.

Node.js

function publishTemplate() {
  var config = admin.remoteConfig();
  var template = config.createTemplateFromJSON(
      fs.readFileSync('config.json', 'UTF8'));
  config.publishTemplate(template)
      .then(function (updatedTemplate) {
        console.log('Template has been published');
        console.log('ETag from server: ' + updatedTemplate.etag);
      })
      .catch(function (err) {
        console.error('Unable to publish template.');
        console.error(err);
      });
}

Java

try {
  Template publishedTemplate = FirebaseRemoteConfig.getInstance()
          .publishTemplateAsync(template).get();
  System.out.println("Template has been published");
  // See the ETag of the published template.
  System.out.println("ETag from server: " + publishedTemplate.getETag());
} catch (ExecutionException e) {
  if (e.getCause() instanceof FirebaseRemoteConfigException) {
    FirebaseRemoteConfigException rcError = (FirebaseRemoteConfigException) e.getCause();
    System.out.println("Unable to publish template.");
    System.out.println(rcError.getMessage());
  }
}

REST API का इस्तेमाल करके, Remote Config में बदलाव करना

इस सेक्शन में, https://firebaseremoteconfig.googleapis.com पर मौजूद Remote Config REST API की मुख्य क्षमताओं के बारे में बताया गया है. पूरी जानकारी के लिए, एपीआई रेफ़रंस देखें.

एपीआई अनुरोधों की पुष्टि करने और उन्हें अनुमति देने के लिए, ऐक्सेस टोकन पाना

Firebase प्रोजेक्ट, Google के सेवा खातों के साथ काम करते हैं. इनका इस्तेमाल करके, अपने ऐप्लिकेशन सर्वर या भरोसेमंद एनवायरमेंट से Firebase सर्वर एपीआई को कॉल किया जा सकता है. अगर आपको कोड को स्थानीय तौर पर डेवलप करना है या ऐप्लिकेशन को ऑन-प्रिमाइसेस पर डिप्लॉय करना है, तो सर्वर के अनुरोधों को अनुमति देने के लिए, इस सेवा खाते से मिले क्रेडेंशियल का इस्तेमाल किया जा सकता है.

किसी सेवा खाते को प्रमाणित करने और उसे Firebase की सेवाओं को ऐक्सेस करने की अनुमति देने के लिए, आपको JSON फ़ॉर्मैट में एक निजी कुंजी फ़ाइल जनरेट करनी होगी.

अपने सेवा खाते के लिए निजी पासकोड फ़ाइल जनरेट करने के लिए:

  1. Firebase कंसोल में, सेटिंग > सेवा खाते खोलें.

  2. नई निजी कुंजी जनरेट करें पर क्लिक करें. इसके बाद, कुंजी जनरेट करें पर क्लिक करके पुष्टि करें.

  3. कुंजी वाली JSON फ़ाइल को सुरक्षित तरीके से सेव करें.

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

एनवायरमेंट वैरिएबल सेट करने के लिए:

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

Linux या macOS

export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"

खिड़कियां

PowerShell का इस्तेमाल करके:

$env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\Downloads\service-account-file.json"

ऊपर दिए गए चरणों को पूरा करने के बाद, ऐप्लिकेशन डिफ़ॉल्ट क्रेडेंशियल (एडीसी) आपके क्रेडेंशियल का पता लगा सकता है. इससे आपको Google से बाहर के एनवायरमेंट में टेस्टिंग या चलाने के दौरान, सेवा खाते के क्रेडेंशियल इस्तेमाल करने की अनुमति मिलती है.

कम समय के लिए मान्य OAuth 2.0 ऐक्सेस टोकन पाने के लिए, अपनी पसंद की भाषा के लिए Google Auth Library के साथ-साथ अपने Firebase क्रेडेंशियल का इस्तेमाल करें:

node.js

 function getAccessToken() {
  return admin.credential.applicationDefault().getAccessToken()
      .then(accessToken => {
        return accessToken.access_token;
      })
      .catch(err => {
        console.error('Unable to get access token');
        console.error(err);
      });
}

इस उदाहरण में, Google API क्लाइंट लाइब्रेरी, JSON वेब टोकन या JWT की मदद से अनुरोध की पुष्टि करती है. ज़्यादा जानकारी के लिए, JSON वेब टोकन देखें.

Python

def _get_access_token():
  """Retrieve a valid access token that can be used to authorize requests.

  :return: Access token.
  """
  credentials = ServiceAccountCredentials.from_json_keyfile_name(
      'service-account.json', SCOPES)
  access_token_info = credentials.get_access_token()
  return access_token_info.access_token

Java

public static String getAccessToken() throws IOException {
  GoogleCredentials googleCredentials = GoogleCredentials
          .fromStream(new FileInputStream("service-account.json"))
          .createScoped(Arrays.asList(SCOPES));
  googleCredentials.refreshAccessToken();
  return googleCredentials.getAccessToken().getTokenValue();
}

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

Remote Config को ऐक्सेस करने की अनुमति देने के लिए, स्कोप https://www.googleapis.com/auth/firebase.remoteconfig का अनुरोध करें.

रिमोट कॉन्फ़िगरेशन टेंप्लेट में बदलाव करना

Remote Config टेंप्लेट का इस्तेमाल करते समय ध्यान रखें कि इनके वर्शन होते हैं. साथ ही, हर वर्शन की लाइफ़टाइम सीमित होती है. यह लाइफ़टाइम, वर्शन बनने के समय से लेकर उसे अपडेट किए जाने तक होती है. यह 90 दिनों की होती है. साथ ही, सेव किए गए वर्शन की कुल सीमा 300 होती है. ज़्यादा जानकारी के लिए, टेंप्लेट और वर्शन देखें.

मौजूदा रिमोट कॉन्फ़िगरेशन टेंप्लेट पाएं

बैकएंड एपीआई का इस्तेमाल करके, Remote Config टेंप्लेट का मौजूदा वर्शन JSON फ़ॉर्मैट में पाया जा सकता है.

A/B Testing एक्सपेरिमेंट में खास तौर पर वैरिएंट के तौर पर बनाए गए पैरामीटर और पैरामीटर वैल्यू, एक्सपोर्ट किए गए टेंप्लेट में शामिल नहीं होती हैं.

इन कमांड का इस्तेमाल करें:

cURL

curl --compressed -D headers -H "Authorization: Bearer token" -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig -o filename

यह कमांड, JSON पेलोड को एक फ़ाइल में और हेडर (इसमें ETag भी शामिल है) को दूसरी फ़ाइल में आउटपुट करती है.

रॉ एचटीटीपी अनुरोध

Host: firebaseremoteconfig.googleapis.com

GET /v1/projects/my-project-id/remoteConfig HTTP/1.1
Authorization: Bearer token
Accept-Encoding: gzip

इस एपीआई कॉल से, यहां दिया गया JSON मिलता है. साथ ही, एक अलग हेडर मिलता है, जिसमें ETag शामिल होता है. इसका इस्तेमाल, अगले अनुरोध के लिए किया जाता है.

Remote Config टेंप्लेट की पुष्टि करना

आपके पास अपडेट को पब्लिश करने से पहले, उनकी पुष्टि करने का विकल्प होता है. ?validate_only=true यूआरएल पैरामीटर को पब्लिश करने के अनुरोध में जोड़कर, टेंप्लेट के अपडेट की पुष्टि करें. जवाब में, स्टेटस कोड 200 और -0 सफ़िक्स वाला अपडेट किया गया ईटैग मिलने का मतलब है कि आपके अपडेट की पुष्टि हो गई है. 200 के अलावा कोई भी रिस्पॉन्स मिलने का मतलब है कि JSON डेटा में ऐसी गड़बड़ियां हैं जिन्हें पब्लिश करने से पहले ठीक करना ज़रूरी है.

Remote Config टेंप्लेट अपडेट करना

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

अगर ज़रूरी हो, तो REST API का इस्तेमाल करके, पिछले वर्शन पर वापस जाएं. अपडेट में गड़बड़ियों के जोखिम को कम करने के लिए, पब्लिश करने से पहले पुष्टि करें.

Remote Config निजीकरण और शर्तें, डाउनलोड किए गए टेंप्लेट में शामिल होती हैं. इसलिए, किसी दूसरे प्रोजेक्ट में पब्लिश करने की कोशिश करते समय, इन सीमाओं के बारे में जानना ज़रूरी है:

  • मनमुताबिक बनाने की सुविधा को एक प्रोजेक्ट से दूसरे प्रोजेक्ट में इंपोर्ट नहीं किया जा सकता.

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

  • शर्तों को एक प्रोजेक्ट से दूसरे प्रोजेक्ट में इंपोर्ट किया जा सकता है. हालांकि, ध्यान दें कि किसी खास शर्त वाली वैल्यू (जैसे, ऐप्लिकेशन आईडी या ऑडियंस) को पब्लिश करने से पहले, टारगेट प्रोजेक्ट में मौजूद होना चाहिए.

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

  • अगर आपको ऐसा टेंप्लेट पब्लिश करना है जिसमें Google Analytics पर निर्भर रहने वाली शर्तें शामिल हैं, तो टारगेट प्रोजेक्ट में Analytics चालू होना चाहिए.

cURL

curl --compressed -H "Content-Type: application/json; UTF8" -H "If-Match: last-returned-etag" -H "Authorization: Bearer token" -X PUT https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig -d @filename

इस curl कमांड के लिए, कॉन्टेंट को "@" वर्ण का इस्तेमाल करके तय किया जा सकता है. इसके बाद, फ़ाइल का नाम लिखें.

रॉ एचटीटीपी अनुरोध

Host: firebaseremoteconfig.googleapis.com
PUT /v1/projects/my-project-id/remoteConfig HTTP/1.1
Content-Length: size
Content-Type: application/json; UTF8
Authorization: Bearer token
If-Match: expected ETag
Accept-Encoding: gzip
JSON_HERE

यह एक राइट अनुरोध है. इसलिए, इस कमांड से ETag में बदलाव होता है. साथ ही, अगली PUT कमांड के जवाब के हेडर में अपडेट किया गया ETag दिया जाता है.

रिमोट कॉन्फ़िगरेशन की शर्तों में बदलाव करना

प्रोग्राम के हिसाब से, Remote Config की शर्तों और शर्तों के हिसाब से तय की गई वैल्यू में बदलाव किया जा सकता है. REST API की मदद से, टेंप्लेट को पब्लिश करने से पहले, शर्तों में बदलाव करने के लिए आपको टेंप्लेट में सीधे तौर पर बदलाव करना होगा.

{
  "conditions": [{
    "name": "android_english",
    "expression": "device.os == 'android' && device.country in ['us', 'uk']",
    "tagColor": "BLUE"
  }, {
    "name": "tenPercent",
    "expression": "percent <= 10",
    "tagColor": "BROWN"
  }],
  "parameters": {
    "welcome_message": {
      "defaultValue": {
        "value": "Welcome to this sample app"
      },
      "conditionalValues": {
        "tenPercent": {
          "value": "Welcome to this new sample app"
        }
      },
      "description": "The sample app's welcome message"
    },
    "welcome_message_caps": {
      "defaultValue": {
        "value": "false"
      },
      "conditionalValues": {
        "android_english": {
          "value": "true"
        }
      },
      "description": "Whether the welcome message should be displayed in all capital letters."
    }
  }
}

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

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

एचटीटीपी गड़बड़ी के कोड

स्थिति कोड मतलब
200 अपडेट हो गया
400 पुष्टि करने में कोई गड़बड़ी हुई. उदाहरण के लिए, अगर किसी अनुरोध में तय सीमा से ज़्यादा कुंजियां (2,000) शामिल हैं, तो गड़बड़ी का मैसेज Param count too large के साथ 400 (खराब अनुरोध) दिखेगा. साथ ही, एचटीटीपीएस स्टेटस कोड इन दो स्थितियों में भी दिख सकता है:
  • वर्शन के मेल न खाने की गड़बड़ी हुई है. ऐसा इसलिए हुआ है, क्योंकि आपने पिछली बार जब ईटैग वैल्यू वापस पाई थी, तब से वैल्यू और शर्तों के सेट को अपडेट कर दिया गया है. इस समस्या को हल करने के लिए, आपको GET कमांड का इस्तेमाल करना चाहिए. इससे आपको नया टेंप्लेट और ईटैग वैल्यू मिलेगी. इसके बाद, टेंप्लेट को अपडेट करें. फिर, उस टेंप्लेट और नई ईटैग वैल्यू का इस्तेमाल करके सबमिट करें.
  • If-Match हेडर तय किए बिना, PUT कमांड (Remote Config टेंप्लेट अपडेट करने का अनुरोध) का इस्तेमाल किया गया.
401 अनुमति से जुड़ी गड़बड़ी हुई है. जैसे, ऐक्सेस टोकन नहीं दिया गया है या Cloud Developer Console में, आपके प्रोजेक्ट में Firebase Remote Config REST API नहीं जोड़ा गया है
403 पुष्टि करने के दौरान कोई गड़बड़ी हुई (गलत ऐक्सेस टोकन दिया गया था)
500 एक आंतरिक गड़बड़ी हुई. अगर यह गड़बड़ी होती है, तो Firebase सहायता टिकट फ़ाइल करें

स्टेटस कोड 200 का मतलब है कि Remote Config टेंप्लेट (प्रोजेक्ट के लिए पैरामीटर, वैल्यू, और शर्तें) अपडेट कर दिया गया है. साथ ही, अब यह उन ऐप्लिकेशन के लिए उपलब्ध है जो इस प्रोजेक्ट का इस्तेमाल करते हैं. अन्य स्टेटस कोड से पता चलता है कि पहले से मौजूद Remote Config टेंप्लेट अब भी लागू है.

अपने टेंप्लेट में अपडेट सबमिट करने के बाद, Firebase कंसोल पर जाएं. यहां यह पुष्टि करें कि आपके बदलाव, उम्मीद के मुताबिक दिख रहे हैं या नहीं. यह इसलिए ज़रूरी है, क्योंकि शर्तों के क्रम से यह तय होता है कि उनका आकलन कैसे किया जाएगा. जो शर्त सबसे पहले true के तौर पर तय की जाती है उसे लागू किया जाता है.

ETag का इस्तेमाल और फ़ोर्स अपडेट

Remote Config REST API, रेस कंडीशन और संसाधनों के अपडेट ओवरलैप होने से रोकने के लिए, इकाई टैग (ईटैग) का इस्तेमाल करता है. ETag के बारे में ज़्यादा जानने के लिए, ETag - एचटीटीपी देखें.

REST API के लिए, Google का सुझाव है कि आप सबसे हाल ही की GET कमांड से मिले ETag को कैश मेमोरी में सेव करें. साथ ही, PUT कमांड जारी करते समय, If-Match अनुरोध हेडर में उस ETag वैल्यू का इस्तेमाल करें. अगर आपकी PUT कमांड से एचटीटीपीएस स्टेटस कोड 409 मिलता है, तो आपको नई GET कमांड जारी करनी चाहिए. इससे आपको नया ईटैग और टेंप्लेट मिलेगा, जिसका इस्तेमाल अगली PUT कमांड के साथ किया जा सकता है.

ईटैग और इससे मिलने वाली सुरक्षा को इन तरीकों से बायपास किया जा सकता है: Remote Config टेंप्लेट को इस तरह अपडेट करें: If-Match: * हालांकि, इस तरीके का इस्तेमाल करने का सुझाव नहीं दिया जाता है. ऐसा इसलिए, क्योंकि अगर कई क्लाइंट Remote Config टेंप्लेट को अपडेट कर रहे हैं, तो इससे आपके Remote Config टेंप्लेट के अपडेट मिट सकते हैं. इस तरह का टकराव, एपीआई का इस्तेमाल करने वाले कई क्लाइंट या एपीआई क्लाइंट और Firebase कंसोल उपयोगकर्ताओं के अपडेट के बीच हो सकता है.

Remote Config टेंप्लेट के वर्शन मैनेज करने के बारे में जानने के लिए, रिमोट कॉन्फ़िगरेशन टेंप्लेट और वर्शनिंग लेख पढ़ें.