रिमोट कॉन्फ़िगरेशन को प्रोग्रामेटिक रूप से संशोधित करें

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

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

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

    रिमोट कॉन्फिग बैकएंड को कस्टम टूल और सर्वर के साथ इंटरैक्ट करते हुए दिखाने वाला आरेख

इस गाइड के निम्नलिखित अनुभाग उन कार्यों का वर्णन करते हैं जो आप रिमोट कॉन्फिग बैकएंड एपीआई के साथ कर सकते हैं। REST API के माध्यम से इन कार्यों को करने वाले कुछ कोड की समीक्षा करने के लिए, इन नमूना ऐप्स में से एक देखें:

फायरबेस एडमिन एसडीके का उपयोग करके रिमोट कॉन्फ़िगरेशन को संशोधित करें

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

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

एसडीके आरंभ करें और एपीआई अनुरोधों को अधिकृत करें

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

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

नोड.जे.एस

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

जावा

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

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

रिमोट कॉन्फिग टेम्प्लेट के साथ काम करते समय, ध्यान रखें कि वे संस्करणबद्ध हैं, और प्रत्येक संस्करण का जीवनकाल उसके निर्माण के समय से लेकर आपके अपडेट के साथ बदलने तक सीमित होता है: 90 दिन, 300 संग्रहीत संस्करणों की कुल सीमा के साथ। अधिक जानकारी के लिए टेम्प्लेट और संस्करण देखें।

आप JSON प्रारूप में रिमोट कॉन्फिग टेम्पलेट का वर्तमान सक्रिय संस्करण प्राप्त करने के लिए बैकएंड एपीआई का उपयोग कर सकते हैं।

ए/बी परीक्षण प्रयोग में वेरिएंट के रूप में विशेष रूप से बनाए गए पैरामीटर और पैरामीटर मान निर्यात किए गए टेम्पलेट में शामिल नहीं हैं।

टेम्पलेट प्राप्त करने के लिए:

नोड.जे.एस

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);
      });
}

जावा

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

रिमोट कॉन्फ़िगरेशन पैरामीटर संशोधित करें

आप रिमोट कॉन्फिग पैरामीटर और पैरामीटर समूहों को प्रोग्रामेटिक रूप से संशोधित और जोड़ सकते हैं। उदाहरण के लिए, "new_menu" नामक मौजूदा पैरामीटर समूह में आप मौसमी जानकारी के प्रदर्शन को नियंत्रित करने के लिए एक पैरामीटर जोड़ सकते हैं:

नोड.जे.एस

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

जावा

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

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

रिमोट कॉन्फ़िगरेशन शर्तों को संशोधित करें

आप रिमोट कॉन्फ़िगरेशन शर्तों और सशर्त मानों को प्रोग्रामेटिक रूप से संशोधित और जोड़ सकते हैं। उदाहरण के लिए, एक नई शर्त जोड़ने के लिए:

नोड.जे.एस

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

जावा

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

सभी मामलों में, आपको संशोधन करने के बाद टेम्पलेट को स्पष्ट रूप से प्रकाशित करना होगा।

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

रिमोट कॉन्फिग टेम्पलेट को मान्य करें

वैकल्पिक रूप से, आप अपने अपडेट को प्रकाशित करने से पहले सत्यापित कर सकते हैं, जैसा कि दिखाया गया है:

नोड.जे.एस

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);
      });
}

जावा

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());
  }
}

यह सत्यापन प्रक्रिया मापदंडों और शर्तों के लिए डुप्लिकेट कुंजी, अमान्य स्थिति नाम या गैर-मौजूद स्थितियों, या गलत स्वरूपित ईटैग जैसी त्रुटियों की जांच करती है। उदाहरण के लिए, कुंजियों की अनुमत संख्या - 2000 - से अधिक वाला अनुरोध त्रुटि संदेश लौटाएगा, Param count too large

रिमोट कॉन्फिग टेम्पलेट प्रकाशित करें

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

यदि आवश्यक हो, तो आप पिछले संस्करण पर वापस जाने के लिए REST API का उपयोग कर सकते हैं। किसी अपडेट में त्रुटियों के जोखिम को कम करने के लिए, आप प्रकाशन से पहले सत्यापित कर सकते हैं।

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

  • निजीकरण को एक परियोजना से दूसरे परियोजना में आयात नहीं किया जा सकता।

    उदाहरण के लिए, यदि आपने अपने प्रोजेक्ट में वैयक्तिकरण सक्षम किया है और टेम्पलेट डाउनलोड और संपादित करते हैं, तो आप इसे उसी प्रोजेक्ट में प्रकाशित कर सकते हैं, लेकिन जब तक आप टेम्पलेट से वैयक्तिकरण नहीं हटाते, तब तक आप इसे किसी भिन्न प्रोजेक्ट में प्रकाशित नहीं कर सकते।

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

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

  • यदि आप जिस टेम्पलेट को प्रकाशित करने की योजना बना रहे हैं उसमें ऐसी स्थितियाँ हैं जो Google Analytics पर निर्भर हैं, तो लक्ष्य प्रोजेक्ट में Analytics सक्षम होना चाहिए।

नोड.जे.एस

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);
      });
}

जावा

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

यह अनुभाग https://firebaseremoteconfig.googleapis.com पर रिमोट कॉन्फिग REST API की मुख्य क्षमताओं का वर्णन करता है। पूर्ण विवरण के लिए, एपीआई संदर्भ देखें।

एपीआई अनुरोधों को प्रमाणित और अधिकृत करने के लिए एक्सेस टोकन प्राप्त करें

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

किसी सेवा खाते को प्रमाणित करने और उसे फायरबेस सेवाओं तक पहुंचने के लिए अधिकृत करने के लिए, आपको JSON प्रारूप में एक निजी कुंजी फ़ाइल उत्पन्न करनी होगी।

अपने सेवा खाते के लिए एक निजी कुंजी फ़ाइल बनाने के लिए:

  1. फायरबेस कंसोल में, सेटिंग्स > सेवा खाते खोलें।

  2. नई निजी कुंजी जनरेट करें पर क्लिक करें, फिर कुंजी जेनरेट करें पर क्लिक करके पुष्टि करें।

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

सेवा खाते के माध्यम से अधिकृत करते समय, आपके पास अपने आवेदन में क्रेडेंशियल प्रदान करने के लिए दो विकल्प होते हैं। आप या तो GOOGLE_APPLICATION_CREDENTIALS पर्यावरण चर सेट कर सकते हैं, या आप कोड में सेवा खाता कुंजी का पथ स्पष्ट रूप से पास कर सकते हैं। पहला विकल्प अधिक सुरक्षित है और इसकी पुरजोर अनुशंसा की जाती है।

पर्यावरण चर सेट करने के लिए:

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

लिनक्स या macOS

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

खिड़कियाँ

पॉवरशेल के साथ:

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

आपके द्वारा उपरोक्त चरणों को पूरा करने के बाद, एप्लिकेशन डिफॉल्ट क्रेडेंशियल्स (एडीसी) आपके क्रेडेंशियल्स को अंतर्निहित रूप से निर्धारित करने में सक्षम है, जो आपको गैर-Google वातावरण में परीक्षण या चलाने के दौरान सेवा खाता क्रेडेंशियल्स का उपयोग करने की अनुमति देता है।

अल्पकालिक OAuth 2.0 एक्सेस टोकन प्राप्त करने के लिए अपनी पसंदीदा भाषा के लिए Google Auth लाइब्रेरी के साथ अपने Firebase क्रेडेंशियल का उपयोग करें:

नोड.जे.एस

 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 वेब टोकन देखें।

अजगर

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

जावा

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();
}

आपके एक्सेस टोकन की समय सीमा समाप्त होने के बाद, अपडेटेड एक्सेस टोकन को पुनः प्राप्त करने के लिए टोकन रिफ्रेश विधि को स्वचालित रूप से कॉल किया जाता है।

रिमोट कॉन्फ़िगरेशन तक पहुंच को अधिकृत करने के लिए, स्कोप https://www.googleapis.com/auth/firebase.remoteconfig का अनुरोध करें।

रिमोट कॉन्फिग टेम्पलेट को संशोधित करें

रिमोट कॉन्फिग टेम्प्लेट के साथ काम करते समय, ध्यान रखें कि वे संस्करणबद्ध हैं, और प्रत्येक संस्करण का जीवनकाल उसके निर्माण के समय से लेकर आपके अपडेट के साथ बदलने तक सीमित होता है: 90 दिन, 300 संग्रहीत संस्करणों की कुल सीमा के साथ। अधिक जानकारी के लिए टेम्प्लेट और संस्करण देखें।

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

आप JSON प्रारूप में रिमोट कॉन्फिग टेम्पलेट का वर्तमान सक्रिय संस्करण प्राप्त करने के लिए बैकएंड एपीआई का उपयोग कर सकते हैं।

ए/बी परीक्षण प्रयोग में वेरिएंट के रूप में विशेष रूप से बनाए गए पैरामीटर और पैरामीटर मान निर्यात किए गए टेम्पलेट में शामिल नहीं हैं।

निम्नलिखित आदेशों का प्रयोग करें:

कर्ल

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

यह कमांड JSON पेलोड को एक फ़ाइल में और हेडर (ईटैग सहित) को एक अलग फ़ाइल में आउटपुट करता है।

कच्चा HTTP अनुरोध

Host: firebaseremoteconfig.googleapis.com

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

यह एपीआई कॉल एक अलग हेडर के साथ निम्नलिखित JSON लौटाता है जिसमें एक ईटैग शामिल होता है जिसे आप बाद के अनुरोध के लिए उपयोग करते हैं।

रिमोट कॉन्फिग टेम्पलेट को मान्य करें

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

रिमोट कॉन्फिग टेम्पलेट को अपडेट करें

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

यदि आवश्यक हो, तो आप पिछले संस्करण पर वापस जाने के लिए REST API का उपयोग कर सकते हैं। किसी अपडेट में त्रुटियों के जोखिम को कम करने के लिए, आप प्रकाशन से पहले सत्यापित कर सकते हैं।

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

  • निजीकरण को एक परियोजना से दूसरे परियोजना में आयात नहीं किया जा सकता।

    उदाहरण के लिए, यदि आपने अपने प्रोजेक्ट में वैयक्तिकरण सक्षम किया है और टेम्पलेट डाउनलोड और संपादित करते हैं, तो आप इसे उसी प्रोजेक्ट में प्रकाशित कर सकते हैं, लेकिन जब तक आप टेम्पलेट से वैयक्तिकरण नहीं हटाते, तब तक आप इसे किसी भिन्न प्रोजेक्ट में प्रकाशित नहीं कर सकते।

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

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

  • यदि आप जिस टेम्पलेट को प्रकाशित करने की योजना बना रहे हैं उसमें ऐसी स्थितियाँ हैं जो Google Analytics पर निर्भर हैं, तो लक्ष्य प्रोजेक्ट में Analytics सक्षम होना चाहिए।

कर्ल

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 कमांड के लिए, आप फ़ाइल नाम के बाद "@" वर्ण का उपयोग करके सामग्री निर्दिष्ट कर सकते हैं।

कच्चा HTTP अनुरोध

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 प्रदान किया गया है।

रिमोट कॉन्फ़िगरेशन शर्तों को संशोधित करें

आप दूरस्थ कॉन्फ़िगरेशन स्थितियों और सशर्त मानों को प्रोग्रामेटिक रूप से संशोधित कर सकते हैं। 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 भी प्रदान किया गया है।

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

HTTP त्रुटि कोड

स्थिति का कोड अर्थ
200 सफलतापूर्वक उत्परिवर्तित
400 एक सत्यापन त्रुटि उत्पन्न हुई. उदाहरण के लिए, एक अनुरोध जिसमें कुंजियों की अनुमत संख्या - 2000 - से अधिक है, त्रुटि संदेश के साथ 400 (खराब अनुरोध) लौटाएगा, Param count too large । साथ ही, यह HTTPS स्टेटस कोड इन दो स्थितियों में हो सकता है:
  • एक संस्करण बेमेल त्रुटि उत्पन्न हुई क्योंकि आपके द्वारा पिछली बार ETag मान पुनर्प्राप्त करने के बाद से मानों और शर्तों का सेट अद्यतन किया गया है। इसे हल करने के लिए, आपको एक ताज़ा टेम्प्लेट और ETag मान प्राप्त करने, टेम्प्लेट को अपडेट करने और फिर उस टेम्प्लेट और ताज़ा ETag मान का उपयोग करके सबमिट करने के लिए GET कमांड का उपयोग करना चाहिए।
  • एक PUT कमांड (अपडेट रिमोट कॉन्फिग टेम्प्लेट रिक्वेस्ट) एक If-Match हेडर निर्दिष्ट किए बिना बनाया गया था।
401 एक प्राधिकरण त्रुटि उत्पन्न हुई (कोई एक्सेस टोकन प्रदान नहीं किया गया था या क्लाउड डेवलपर कंसोल में आपके प्रोजेक्ट में फायरबेस रिमोट कॉन्फिग आरईएसटी एपीआई नहीं जोड़ा गया है)
403 प्रमाणीकरण त्रुटि उत्पन्न हुई (गलत एक्सेस टोकन प्रदान किया गया था)
500 एक आंतरिक त्रुटि हुई। यदि यह त्रुटि होती है, तो फायरबेस समर्थन टिकट दाखिल करें

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

अपने टेम्प्लेट में अपडेट सबमिट करने के बाद, यह सत्यापित करने के लिए फायरबेस कंसोल पर जाएं कि आपके परिवर्तन अपेक्षा के अनुरूप दिखाई दे रहे हैं। यह महत्वपूर्ण है क्योंकि स्थितियों का क्रम प्रभावित करता है कि उनका मूल्यांकन कैसे किया जाता है (पहली शर्त जो true मूल्यांकन करती है वह प्रभावी होती है)।

ईटैग का उपयोग और जबरन अपडेट

रिमोट कॉन्फिग आरईएसटी एपीआई दौड़ की स्थिति और संसाधनों के ओवरलैपिंग अपडेट को रोकने के लिए एक इकाई टैग (ईटैग) का उपयोग करता है। ETags के बारे में अधिक जानने के लिए, ETag - HTTP देखें।

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

आप रिमोट कॉन्फिग टेम्पलेट को निम्नानुसार अपडेट करने के लिए मजबूर करके ईटैग और उससे मिलने वाली सुरक्षा से बच सकते हैं: If-Match: * हालाँकि, इस दृष्टिकोण की अनुशंसा नहीं की जाती है क्योंकि इससे आपके रिमोट कॉन्फिगरेशन के अपडेट के नुकसान का जोखिम होता है। यदि एकाधिक क्लाइंट रिमोट कॉन्फ़िगरेशन टेम्पलेट को अपडेट कर रहे हैं तो टेम्पलेट। इस प्रकार का विरोध एपीआई का उपयोग करने वाले एकाधिक क्लाइंट के साथ, या एपीआई क्लाइंट और फायरबेस कंसोल उपयोगकर्ताओं के परस्पर विरोधी अपडेट के साथ हो सकता है।

रिमोट कॉन्फिग टेम्प्लेट संस्करणों को प्रबंधित करने पर मार्गदर्शन के लिए, रिमोट कॉन्फिग टेम्प्लेट और वर्जनिंग देखें।