Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

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

संग्रह की मदद से व्यवस्थित रहें अपनी प्राथमिकताओं के आधार पर, कॉन्टेंट को सेव करें और कैटगरी में बांटें.

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

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

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

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

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

Firebase व्यवस्थापक SDK का उपयोग करके दूरस्थ कॉन्फ़िगरेशन को संशोधित करें

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

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

SDK प्रारंभ करें और API अनुरोधों को अधिकृत करें

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

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

Node.js

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 प्रारूप में रिमोट कॉन्फिग टेम्पलेट के वर्तमान सक्रिय संस्करण को प्राप्त करने के लिए बैकएंड एपीआई का उपयोग कर सकते हैं।

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

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

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

जावा

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

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

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

Node.js

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.")
        );

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

दूरस्थ कॉन्फ़िग शर्तों को संशोधित करें

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

Node.js

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

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

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

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

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

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

जावा

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 सक्षम होना चाहिए।

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

जावा

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 पर रिमोट कॉन्फिग रेस्ट एपीआई की मुख्य क्षमताओं का वर्णन करता है। पूरी जानकारी के लिए, एपीआई संदर्भ देखें।

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

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

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

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

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

  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

जावा

private 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 पेलोड को एक फ़ाइल में और हेडर (Etag सहित) को एक अलग फ़ाइल में आउटपुट करता है।

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

Host: firebaseremoteconfig.googleapis.com

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

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

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

वैकल्पिक रूप से, आप अपने अपडेट को प्रकाशित करने से पहले सत्यापित कर सकते हैं। अपने प्रकाशन अनुरोध में 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 को इस कमांड द्वारा संशोधित किया जाता है और एक अद्यतन ETag अगले PUT कमांड के प्रतिक्रिया हेडर में प्रदान किया जाता है।

दूरस्थ कॉन्फ़िग शर्तों को संशोधित करें

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

{
  "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 मान प्राप्त करने के लिए GET कमांड का उपयोग करना चाहिए, टेम्प्लेट को अपडेट करना चाहिए, और फिर उस टेम्प्लेट और ताज़ा ETag मान का उपयोग करके सबमिट करना चाहिए।
  • एक If-Match हेडर निर्दिष्ट किए बिना एक PUT कमांड (रिमोट कॉन्फिग टेम्प्लेट अनुरोध अपडेट करें) बनाया गया था।
401 एक प्राधिकरण त्रुटि हुई (कोई एक्सेस टोकन प्रदान नहीं किया गया था या Firebase Remote Config REST API को Cloud Developer Console में आपके प्रोजेक्ट में नहीं जोड़ा गया है)
403 एक प्रमाणीकरण त्रुटि हुई (गलत पहुंच टोकन प्रदान किया गया था)
500 एक आंतरिक त्रुटि हुई। अगर यह त्रुटि होती है, तो फायरबेस समर्थन टिकट फाइल करें

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

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

ETag उपयोग और जबरन अद्यतन

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

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

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

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

,

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

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

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

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

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

Firebase व्यवस्थापक SDK का उपयोग करके दूरस्थ कॉन्फ़िगरेशन को संशोधित करें

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

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

SDK प्रारंभ करें और API अनुरोधों को अधिकृत करें

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

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

Node.js

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 प्रारूप में रिमोट कॉन्फिग टेम्पलेट के वर्तमान सक्रिय संस्करण को प्राप्त करने के लिए बैकएंड एपीआई का उपयोग कर सकते हैं।

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

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

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

जावा

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

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

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

Node.js

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.")
        );

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

दूरस्थ कॉन्फ़िग शर्तों को संशोधित करें

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

Node.js

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

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

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

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

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

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

जावा

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 सक्षम होना चाहिए।

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

जावा

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 पर रिमोट कॉन्फिग रेस्ट एपीआई की मुख्य क्षमताओं का वर्णन करता है। पूरी जानकारी के लिए, एपीआई संदर्भ देखें।

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

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

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

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

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

  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

जावा

private 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 पेलोड को एक फ़ाइल में और हेडर (Etag सहित) को एक अलग फ़ाइल में आउटपुट करता है।

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

Host: firebaseremoteconfig.googleapis.com

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

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

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

वैकल्पिक रूप से, आप अपने अपडेट को प्रकाशित करने से पहले सत्यापित कर सकते हैं। अपने प्रकाशन अनुरोध में 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 को इस कमांड द्वारा संशोधित किया जाता है और एक अद्यतन ETag अगले PUT कमांड के प्रतिक्रिया हेडर में प्रदान किया जाता है।

दूरस्थ कॉन्फ़िग शर्तों को संशोधित करें

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

{
  "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."
    }
  }
}

The modifications above first define a set of conditions, and then defines default values and condition-based parameter ( conditional values ) values for each parameter. It also adds an optional description for each element; like code comments, these are for developer use and are not displayed in the app. An ETag is also provided for version control purposes.

The Remote Config backend APIs provide several conditions and comparison operators that you can use to change the behavior and appearance of your app. To learn more about conditions and the operators supported for these conditions, see the conditional expression reference .

HTTP Error codes

Status Code Meaning
200 Successfully Updated
400 A validation error occurred. For example, a request containing more than the allowed number of keys—2000—would return 400 (Bad Request) with the error message, Param count too large . Also, this HTTPS Status Code can occur in these two situations:
  • A version mismatch error occurred because the set of values and conditions have been updated since you last retrieved an ETag value. To resolve this, you should use a GET command to get a fresh template and ETag value, update the template, and then submit using that template and the fresh ETag value.
  • A PUT command (Update Remote Config template request) was made without specifying an If-Match header.
401 An authorization error occurred (no access token was provided or the Firebase Remote Config REST API has not been added to your project in the Cloud Developer Console)
403 An authentication error occurred (the wrong access token was provided)
500 An internal error occurred. If this error occurs, file a Firebase support ticket

A status code of 200 means that the Remote Config template (parameters, values and conditions for the project) has been updated and is now available to apps that use this project. Other status codes indicate that the Remote Config template that existed previously is still in effect.

After you submit updates to your template, go to the Firebase console to verify that your changes appear as expected. This is critical because the ordering of conditions affects how they are evaluated (the first condition that evaluates true takes effect).

ETag usage and forced updates

The Remote Config REST API uses an entity tag (ETag) to prevent race conditions and overlapping updates to resources. To learn more about ETags, see ETag - HTTP .

For the REST API, Google recommends that you cache the ETag provided by the most recent GET command, and use that ETag value in the If-Match request header when issuing PUT commands. If your PUT command results in an HTTPS Status Code 409, you should issue a fresh GET command to acquire a new ETag and template to use with your next PUT command.

You can circumvent the ETag, and the protection from that it provides, by forcing the Remote Config template to be updated as follows: If-Match: * However, this approach is not recommended because it risks causing the loss of updates to your Remote Config template if multiple clients are updating the Remote Config template. This kind of conflict could occur with multiple clients using the API, or with conflicting updates from API clients and Firebase console users.

For guidance on managing Remote Config template versions, see Remote Config templates and versioning .