প্রোগ্রামগতভাবে দূরবর্তী কনফিগারেশন পরিবর্তন করুন

এই ডকুমেন্টটিতে বর্ণনা করা হয়েছে কিভাবে আপনি প্রোগ্রাম্যাটিকভাবে Remote Config টেমপ্লেট’ নামে পরিচিত JSON-ফরম্যাটের প্যারামিটার এবং শর্তাবলীর সেটটি পড়তে ও পরিবর্তন করতে পারেন। এর মাধ্যমে আপনি ব্যাকএন্ডে টেমপ্লেটে এমন পরিবর্তন করতে পারবেন যা ক্লায়েন্ট অ্যাপ ক্লায়েন্ট লাইব্রেরি ব্যবহার করে ফেচ করতে পারে।

এই নির্দেশিকায় বর্ণিত Remote Config REST API বা Admin SDK ব্যবহার করে, আপনি Firebase কনসোলে টেমপ্লেট পরিচালনার ঝামেলা এড়িয়ে সরাসরি আপনার নিজস্ব প্রক্রিয়ায় Remote Config পরিবর্তনগুলিকে একীভূত করতে পারেন। উদাহরণস্বরূপ, Remote Config ব্যাকএন্ড API ব্যবহার করে, আপনি যা করতে পারেন:

  • Remote Config আপডেটের সময়সূচী নির্ধারণ । ক্রন জবের সাথে এপিআই কল ব্যবহার করে, আপনি একটি নিয়মিত সময়সূচী অনুযায়ী Remote Config মান পরিবর্তন করতে পারেন।
  • আপনার নিজস্ব সিস্টেম থেকে Firebase Remote Config এ দক্ষতার সাথে স্থানান্তরের জন্য কনফিগারেশন ভ্যালুগুলো ব্যাচ আকারে ইম্পোর্ট করুন
  • সার্ভার-সাইডে ঘটা ইভেন্টের উপর ভিত্তি করে আপনার অ্যাপের ভ্যালু পরিবর্তন করতে Cloud Functions for Firebase সাথে Remote Config ব্যবহার করুন । উদাহরণস্বরূপ, আপনি আপনার অ্যাপের একটি নতুন ফিচার প্রমোট করতে Remote Config ব্যবহার করতে পারেন, এবং যথেষ্ট সংখ্যক মানুষ নতুন ফিচারটির সাথে ইন্টারঅ্যাক্ট করলে সেই প্রমোশনটি স্বয়ংক্রিয়ভাবে বন্ধ করে দিতে পারেন।

    কাস্টম টুল এবং সার্ভারগুলির সাথে রিমোট কনফিগ ব্যাকএন্ডের মিথস্ক্রিয়া দেখানো ডায়াগ্রাম।

এই গাইডের পরবর্তী অংশগুলোতে Remote Config ব্যাকএন্ড এপিআই (API) ব্যবহার করে করা যায় এমন অপারেশনগুলো বর্ণনা করা হয়েছে। REST API-এর মাধ্যমে এই কাজগুলো সম্পাদনকারী কিছু কোড পর্যালোচনা করতে, এই নমুনা অ্যাপগুলোর মধ্যে একটি দেখুন:

Firebase অ্যাডমিন SDK ব্যবহার করে রিমোট কনফিগ পরিবর্তন করুন

The Admin SDK is a set of server libraries that let you interact with Firebase from privileged environments. In addition to performing updates to Remote Config , the Admin SDK enables generation and verification of Firebase auth tokens, reading and writing from Realtime Database , and so on. To learn more about Admin SDK prerequisites and setup, see Add the Firebase Admin SDK to your server .

একটি সাধারণ Remote Config ফ্লো-তে, আপনি বর্তমান টেমপ্লেটটি পেতে পারেন, কিছু প্যারামিটার বা প্যারামিটার গ্রুপ ও শর্তাবলী পরিবর্তন করতে পারেন, টেমপ্লেটটি যাচাই করতে পারেন এবং তারপরে এটি প্রকাশ করতে পারেন। এই API কলগুলি করার আগে, আপনাকে অবশ্যই SDK থেকে অনুরোধগুলির অনুমোদন দিতে হবে।

SDK চালু করুন এবং API অনুরোধগুলি অনুমোদন করুন

যখন আপনি কোনো প্যারামিটার ছাড়া Admin SDK চালু করেন, তখন SDK গুগল অ্যাপ্লিকেশনের ডিফল্ট ক্রেডেনশিয়াল ব্যবহার করে এবং 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);

বর্তমান রিমোট কনফিগারেশন টেমপ্লেটটি পান

Remote Config টেমপ্লেট নিয়ে কাজ করার সময় মনে রাখবেন যে, এগুলি ভার্সনযুক্ত এবং প্রতিটি ভার্সনের তৈরির সময় থেকে আপডেট দিয়ে প্রতিস্থাপন করার সময় পর্যন্ত একটি সীমিত মেয়াদ থাকে: ৯০ দিন, এবং মোট ৩০০টি ভার্সন সংরক্ষণ করা যায়। আরও তথ্যের জন্য টেমপ্লেট এবং ভার্সনিং দেখুন।

আপনি ব্যাকএন্ড এপিআই ব্যবহার করে Remote Config টেমপ্লেটের বর্তমান সক্রিয় সংস্করণটি JSON ফরম্যাটে পেতে পারেন।

A/B Testing এক্সপেরিমেন্টে ভ্যারিয়েন্ট হিসেবে বিশেষভাবে তৈরি করা প্যারামিটার এবং প্যারামিটার ভ্যালুগুলো এক্সপোর্ট করা টেমপ্লেটে অন্তর্ভুক্ত করা হয় না।

টেমপ্লেটটি পেতে:

নোড.জেএস

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

রিমোট কনফিগ প্যারামিটার পরিবর্তন করুন

আপনি প্রোগ্রাম্যাটিকভাবে Remote Config প্যারামিটার এবং প্যারামিটার গ্রুপ পরিবর্তন ও যোগ করতে পারেন। উদাহরণস্বরূপ, "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.")
        );

এই এপিআই আপনাকে নতুন প্যারামিটার ও প্যারামিটার গ্রুপ তৈরি করতে, অথবা ডিফল্ট মান, শর্তাধীন মান এবং বিবরণ পরিবর্তন করতে দেয়। সকল ক্ষেত্রে, পরিবর্তন করার পর আপনাকে অবশ্যই টেমপ্লেটটি সুস্পষ্টভাবে প্রকাশ করতে হবে।

রিমোট কনফিগের শর্তাবলী পরিবর্তন করুন

আপনি প্রোগ্রাম্যাটিকভাবে Remote Config শর্তাবলী এবং শর্তাধীন মান পরিবর্তন ও যোগ করতে পারেন। উদাহরণস্বরূপ, একটি নতুন শর্ত যোগ করতে:

নোড.জেএস

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

সকল ক্ষেত্রে, পরিবর্তন করার পর আপনাকে অবশ্যই টেমপ্লেটটি প্রকাশ করতে হবে।

Remote Config ব্যাকএন্ড এপিআইগুলো বিভিন্ন কন্ডিশন এবং কম্প্যারিসন অপারেটর প্রদান করে, যা ব্যবহার করে আপনি আপনার অ্যাপের আচরণ ও চেহারা পরিবর্তন করতে পারেন। কন্ডিশন এবং সেগুলোর জন্য সমর্থিত অপারেটরগুলো সম্পর্কে আরও জানতে, কন্ডিশনাল এক্সপ্রেশন রেফারেন্স দেখুন।

রিমোট কনফিগ টেমপ্লেটটি যাচাই করুন

ঐচ্ছিকভাবে, আপনি আপনার আপডেটগুলি প্রকাশ করার আগে যাচাই করতে পারেন, যেমনটি দেখানো হয়েছে:

নোড.জেএস

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

এই যাচাইকরণ প্রক্রিয়াটি প্যারামিটার এবং শর্তের জন্য ডুপ্লিকেট কী, অবৈধ শর্তের নাম বা অস্তিত্বহীন শর্ত, অথবা ভুলভাবে ফরম্যাট করা ই-ট্যাগের মতো ত্রুটিগুলি পরীক্ষা করে। উদাহরণস্বরূপ, অনুমোদিত সংখ্যার (২০০০) চেয়ে বেশি কী সম্বলিত একটি অনুরোধ " Param count too large ত্রুটি বার্তাটি ফেরত দেবে।

রিমোট কনফিগ টেমপ্লেটটি প্রকাশ করুন

একটি টেমপ্লেট সংগ্রহ করে এবং আপনার পছন্দসই আপডেট দিয়ে তা সংশোধন করার পর, আপনি সেটি প্রকাশ করতে পারেন। এই বিভাগে বর্ণিত পদ্ধতিতে একটি টেমপ্লেট প্রকাশ করলে, বিদ্যমান সম্পূর্ণ কনফিগারেশন টেমপ্লেটটি আপডেট করা ফাইল দ্বারা প্রতিস্থাপিত হয় এবং নতুন সক্রিয় টেমপ্লেটটিকে তার প্রতিস্থাপিত টেমপ্লেটের চেয়ে এক সংখ্যা বেশি একটি সংস্করণ নম্বর দেওয়া হয়।

প্রয়োজনে, আপনি REST API ব্যবহার করে পূর্ববর্তী সংস্করণে ফিরে যেতে পারেন। আপডেটে ত্রুটির ঝুঁকি কমাতে, আপনি প্রকাশ করার আগে যাচাই করে নিতে পারেন।

ডাউনলোড করা টেমপ্লেটগুলোতে Remote Config ব্যক্তিগতকরণ এবং শর্তাবলী অন্তর্ভুক্ত থাকে, তাই অন্য কোনো প্রজেক্টে এটি প্রকাশ করার চেষ্টা করার সময় নিম্নলিখিত সীমাবদ্ধতাগুলো সম্পর্কে সচেতন থাকা জরুরি:

  • এক প্রজেক্ট থেকে অন্য প্রজেক্টে ব্যক্তিগতকরণ আমদানি করা যায় না।

    উদাহরণস্বরূপ, যদি আপনার প্রজেক্টে পার্সোনালাইজেশন চালু করা থাকে এবং আপনি একটি টেমপ্লেট ডাউনলোড ও এডিট করেন, তাহলে আপনি সেটি একই প্রজেক্টে পাবলিশ করতে পারবেন, কিন্তু টেমপ্লেটটি থেকে পার্সোনালাইজেশনগুলো মুছে না ফেলা পর্যন্ত অন্য কোনো প্রজেক্টে পাবলিশ করতে পারবেন না।

  • শর্তাবলী এক প্রজেক্ট থেকে অন্য প্রজেক্টে ইম্পোর্ট করা যায়, কিন্তু মনে রাখবেন যে পাবলিশ করার আগে যেকোনো নির্দিষ্ট শর্তাধীন ভ্যালু (যেমন অ্যাপ আইডি বা অডিয়েন্স) টার্গেট প্রজেক্টে অবশ্যই বিদ্যমান থাকতে হবে।

    উদাহরণস্বরূপ, যদি আপনার একটি Remote Config প্যারামিটার থাকে যা এমন একটি শর্ত ব্যবহার করে যেখানে প্ল্যাটফর্ম ভ্যালু হিসেবে 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 এ অবস্থিত Remote Config REST API-এর প্রধান বৈশিষ্ট্যগুলো বর্ণনা করা হয়েছে। সম্পূর্ণ বিবরণের জন্য, API রেফারেন্স দেখুন।

এপিআই অনুরোধগুলি প্রমাণীকরণ ও অনুমোদন করতে একটি অ্যাক্সেস টোকেন নিন।

ফায়ারবেস প্রজেক্টগুলো গুগল সার্ভিস অ্যাকাউন্ট সমর্থন করে, যা ব্যবহার করে আপনি আপনার অ্যাপ সার্ভার বা বিশ্বস্ত পরিবেশ থেকে ফায়ারবেস সার্ভার এপিআই কল করতে পারেন। আপনি যদি স্থানীয়ভাবে কোড ডেভেলপ করেন বা আপনার অ্যাপ্লিকেশনটি অন-প্রিমিসেস-এ ডেপ্লয় করেন, তবে এই সার্ভিস অ্যাকাউন্ট থেকে প্রাপ্ত ক্রেডেনশিয়াল ব্যবহার করে সার্ভার রিকোয়েস্ট অনুমোদন করতে পারেন।

আপনি আপনার Firebase প্রোজেক্টের সমস্ত সার্ভিস অ্যাকাউন্ট দেখতে পারেন এখানে। > পরিষেবা অ্যাকাউন্ট ট্যাব

একটি সার্ভিস অ্যাকাউন্টকে প্রমাণীকরণ করতে এবং ফায়ারবেস সার্ভিসগুলো অ্যাক্সেস করার জন্য অনুমোদন দিতে, আপনাকে অবশ্যই JSON ফরম্যাটে একটি প্রাইভেট কী ফাইল তৈরি করতে হবে।

আপনার পরিষেবা অ্যাকাউন্টের জন্য একটি ব্যক্তিগত কী ফাইল তৈরি করতে:

  1. Firebase কনসোলে, এখানে যান > পরিষেবা অ্যাকাউন্ট ট্যাব

  2. Generate New Private Key-তে ক্লিক করুন, তারপর Generate Key-তে ক্লিক করে নিশ্চিত করুন।

  3. কী-টি ধারণকারী JSON ফাইলটি নিরাপদে সংরক্ষণ করুন।

সার্ভিস অ্যাকাউন্টের মাধ্যমে অনুমোদন করার সময়, আপনার অ্যাপ্লিকেশনে ক্রেডেনশিয়াল সরবরাহ করার জন্য দুটি বিকল্প রয়েছে। আপনি হয় GOOGLE_APPLICATION_CREDENTIALS এনভায়রনমেন্ট ভেরিয়েবলটি সেট করতে পারেন, অথবা কোডের মধ্যে সার্ভিস অ্যাকাউন্ট কী-এর পাথটি স্পষ্টভাবে পাস করতে পারেন। প্রথম বিকল্পটি অধিক নিরাপদ এবং এটি ব্যবহারের জন্য জোরালোভাবে সুপারিশ করা হয়।

এনভায়রনমেন্ট ভেরিয়েবল সেট করতে:

আপনার সার্ভিস অ্যাকাউন্ট কী ধারণকারী JSON ফাইলের ফাইল পাথে GOOGLE_APPLICATION_CREDENTIALS এনভায়রনমেন্ট ভেরিয়েবলটি সেট করুন। এই ভেরিয়েবলটি শুধুমাত্র আপনার বর্তমান শেল সেশনের জন্য প্রযোজ্য, তাই আপনি যদি একটি নতুন সেশন খোলেন, তাহলে ভেরিয়েবলটি আবার সেট করুন।

লিনাক্স বা ম্যাকওএস

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

উইন্ডোজ

পাওয়ারশেলের সাথে:

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

উপরের ধাপগুলো সম্পন্ন করার পর, অ্যাপ্লিকেশন ডিফল্ট ক্রেডেনশিয়ালস (ADC) আপনার ক্রেডেনশিয়ালগুলো স্বয়ংক্রিয়ভাবে নির্ধারণ করতে সক্ষম হয়, যার ফলে আপনি গুগল-বহির্ভূত পরিবেশে পরীক্ষা বা চালানোর সময় সার্ভিস অ্যাকাউন্টের ক্রেডেনশিয়াল ব্যবহার করতে পারেন।

আপনার পছন্দের ভাষার জন্য গুগল অথ লাইব্রেরির সাথে আপনার ফায়ারবেস ক্রেডেনশিয়াল ব্যবহার করে একটি স্বল্পস্থায়ী OAuth 2.0 অ্যাক্সেস টোকেন পুনরুদ্ধার করুন:

নোড.জেএস

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

এই উদাহরণে, গুগল এপিআই ক্লায়েন্ট লাইব্রেরি একটি 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();
}

আপনার অ্যাক্সেস টোকেনের মেয়াদ শেষ হয়ে গেলে, একটি হালনাগাদ অ্যাক্সেস টোকেন পাওয়ার জন্য টোকেন রিফ্রেশ মেথডটি স্বয়ংক্রিয়ভাবে কল করা হয়।

Remote Config এ অ্যাক্সেস অনুমোদন করতে, https://www.googleapis.com/auth/firebase.remoteconfig স্কোপটির জন্য অনুরোধ করুন।

রিমোট কনফিগ টেমপ্লেটটি পরিবর্তন করুন

Remote Config টেমপ্লেট নিয়ে কাজ করার সময় মনে রাখবেন যে, এগুলি ভার্সনযুক্ত এবং প্রতিটি ভার্সনের তৈরির সময় থেকে আপডেট দিয়ে প্রতিস্থাপন করার সময় পর্যন্ত একটি সীমিত মেয়াদ থাকে: ৯০ দিন, এবং মোট ৩০০টি ভার্সন সংরক্ষণ করা যায়। আরও তথ্যের জন্য টেমপ্লেট এবং ভার্সনিং দেখুন।

বর্তমান রিমোট কনফিগারেশন টেমপ্লেটটি পান

আপনি ব্যাকএন্ড এপিআই ব্যবহার করে 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 সহ) একটি আলাদা ফাইলে আউটপুট করে।

কাঁচা HTTP অনুরোধ

Host: firebaseremoteconfig.googleapis.com

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

এই এপিআই কলটি নিম্নলিখিত JSON ফেরত দেয়, সাথে একটি আলাদা হেডারও থাকে যাতে একটি ETag অন্তর্ভুক্ত থাকে, যা আপনি পরবর্তী অনুরোধের জন্য ব্যবহার করেন।

রিমোট কনফিগ টেমপ্লেটটি যাচাই করুন

Optionally, you can validate your updates before publishing them. Validate template updates by appending to your publish request the URL parameter ?validate_only=true . In the response, a status code 200 and an updated etag with the suffix -0 means that your update was successfully validated. Any non-200 response indicates that the JSON data contains errors that you must correct before publishing.

রিমোট কনফিগ টেমপ্লেট আপডেট করুন

একটি টেমপ্লেট সংগ্রহ করে এবং আপনার পছন্দসই আপডেট দিয়ে 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 কমান্ডের জন্য, আপনি "@" চিহ্নের পরে ফাইলের নামটি লিখে কন্টেন্ট নির্দিষ্ট করতে পারেন।

কাঁচা 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 প্রদান করা হয়।

রিমোট কনফিগের শর্তাবলী পরিবর্তন করুন

আপনি প্রোগ্রাম্যাটিকভাবে 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."
    }
  }
}

উপরের পরিবর্তনগুলো প্রথমে একগুচ্ছ শর্ত নির্ধারণ করে, এবং তারপর প্রতিটি প্যারামিটারের জন্য ডিফল্ট মান ও শর্ত-ভিত্তিক প্যারামিটার ( শর্তাধীন মান ) নির্ধারণ করে। এটি প্রতিটি উপাদানের জন্য একটি ঐচ্ছিক বিবরণও যোগ করে; কোড কমেন্টের মতো, এগুলো ডেভেলপারদের ব্যবহারের জন্য এবং অ্যাপে প্রদর্শিত হয় না। ভার্সন নিয়ন্ত্রণের উদ্দেশ্যে একটি ই-ট্যাগও প্রদান করা হয়।

Remote Config ব্যাকএন্ড এপিআইগুলো বিভিন্ন কন্ডিশন এবং কম্প্যারিসন অপারেটর প্রদান করে, যা ব্যবহার করে আপনি আপনার অ্যাপের আচরণ ও চেহারা পরিবর্তন করতে পারেন। কন্ডিশন এবং সেগুলোর জন্য সমর্থিত অপারেটরগুলো সম্পর্কে আরও জানতে, কন্ডিশনাল এক্সপ্রেশন রেফারেন্স দেখুন।

HTTP ত্রুটি কোড

স্ট্যাটাস কোড অর্থ
২০০ সফলভাবে আপডেট করা হয়েছে
৪০০ একটি যাচাইকরণ ত্রুটি ঘটেছে। উদাহরণস্বরূপ, কোনো অনুরোধে অনুমোদিত সংখ্যার (২০০০) চেয়ে বেশি কী থাকলে Param count too large " ত্রুটি বার্তাসহ ৪০০ (Bad Request) কোড ফেরত দেবে। এছাড়াও, এই HTTPS স্ট্যাটাস কোডটি নিম্নলিখিত দুটি পরিস্থিতিতে দেখা দিতে পারে:
  • আপনি শেষবার ETag ভ্যালুটি নেওয়ার পর থেকে ভ্যালু এবং কন্ডিশনগুলোর সেট আপডেট হওয়ায় একটি ভার্সন মিসম্যাচ এরর ঘটেছে। এটি সমাধান করার জন্য, আপনার একটি GET কমান্ড ব্যবহার করে একটি নতুন টেমপ্লেট ও ​​ETag ভ্যালু নেওয়া, টেমপ্লেটটি আপডেট করা এবং তারপর সেই টেমপ্লেট ও ​​নতুন ETag ভ্যালুটি ব্যবহার করে সাবমিট করা উচিত।
  • If-Match হেডার উল্লেখ না করেই একটি PUT কমান্ড ( Remote Config টেমপ্লেট আপডেট করার অনুরোধ) পাঠানো হয়েছিল।
৪০১ অনুমোদনে একটি ত্রুটি ঘটেছে (কোনো অ্যাক্সেস টোকেন প্রদান করা হয়নি অথবা ক্লাউড ডেভেলপার কনসোলে আপনার প্রোজেক্টে Firebase Remote Config REST API যোগ করা হয়নি)।
৪০৩ প্রমাণীকরণে ত্রুটি ঘটেছে (ভুল অ্যাক্সেস টোকেন প্রদান করা হয়েছে)।
৫০০ একটি অভ্যন্তরীণ ত্রুটি ঘটেছে। এই ত্রুটি ঘটলে, একটি Firebase সাপোর্ট টিকেট ফাইল করুন।

২০০ স্ট্যাটাস কোডের অর্থ হলো, Remote Config টেমপ্লেট (প্রজেক্টের প্যারামিটার, ভ্যালু এবং শর্তাবলী) আপডেট করা হয়েছে এবং এখন এই প্রজেক্ট ব্যবহারকারী অ্যাপগুলোর জন্য উপলব্ধ। অন্যান্য স্ট্যাটাস কোডগুলো নির্দেশ করে যে, পূর্বে বিদ্যমান Remote Config টেমপ্লেটটি এখনও কার্যকর রয়েছে।

আপনার টেমপ্লেটে আপডেট জমা দেওয়ার পরে, আপনার পরিবর্তনগুলি প্রত্যাশিতভাবে দেখা যাচ্ছে কিনা তা যাচাই করতে Firebase কনসোলে যান। এটি অত্যন্ত গুরুত্বপূর্ণ, কারণ শর্তগুলির ক্রম তাদের মূল্যায়নের পদ্ধতিকে প্রভাবিত করে (যে শর্তটি প্রথমে true বলে প্রমাণিত হয়, সেটিই কার্যকর হয়)।

ই-ট্যাগ ব্যবহার এবং বাধ্যতামূলক আপডেট

Remote Config REST API, রেস কন্ডিশন এবং রিসোর্সের ওভারল্যাপিং আপডেট প্রতিরোধ করতে একটি এনটিটি ট্যাগ (ETag) ব্যবহার করে। ETag সম্পর্কে আরও জানতে, ETag - HTTP দেখুন।

REST API-এর জন্য, গুগল পরামর্শ দেয় যে আপনি সর্বশেষ GET কমান্ড দ্বারা প্রদত্ত ETag-টি ক্যাশ করে রাখুন এবং PUT কমান্ড দেওয়ার সময় If-Match রিকোয়েস্ট হেডারে সেই ETag ভ্যালুটি ব্যবহার করুন। যদি আপনার PUT কমান্ডের ফলে HTTPS স্ট্যাটাস কোড 409 আসে, তাহলে আপনার পরবর্তী PUT কমান্ডের জন্য একটি নতুন ETag ও টেমপ্লেট পেতে একটি নতুন GET কমান্ড দেওয়া উচিত।

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.

Remote Config টেমপ্লেট ভার্সনগুলো পরিচালনা করার নির্দেশনার জন্য, রিমোট কনফিগ টেমপ্লেট এবং ভার্সনিং দেখুন।

,

এই ডকুমেন্টটিতে বর্ণনা করা হয়েছে কিভাবে আপনি প্রোগ্রাম্যাটিকভাবে Remote Config টেমপ্লেট’ নামে পরিচিত JSON-ফরম্যাটের প্যারামিটার এবং শর্তাবলীর সেটটি পড়তে ও পরিবর্তন করতে পারেন। এর মাধ্যমে আপনি ব্যাকএন্ডে টেমপ্লেটে এমন পরিবর্তন করতে পারবেন যা ক্লায়েন্ট অ্যাপ ক্লায়েন্ট লাইব্রেরি ব্যবহার করে ফেচ করতে পারে।

এই নির্দেশিকায় বর্ণিত Remote Config REST API বা Admin SDK ব্যবহার করে, আপনি Firebase কনসোলে টেমপ্লেট পরিচালনার ঝামেলা এড়িয়ে সরাসরি আপনার নিজস্ব প্রক্রিয়ায় Remote Config পরিবর্তনগুলিকে একীভূত করতে পারেন। উদাহরণস্বরূপ, Remote Config ব্যাকএন্ড API ব্যবহার করে, আপনি যা করতে পারেন:

  • Remote Config আপডেটের সময়সূচী নির্ধারণ । ক্রন জবের সাথে এপিআই কল ব্যবহার করে, আপনি একটি নিয়মিত সময়সূচী অনুযায়ী Remote Config মান পরিবর্তন করতে পারেন।
  • আপনার নিজস্ব সিস্টেম থেকে Firebase Remote Config এ দক্ষতার সাথে স্থানান্তরের জন্য কনফিগারেশন ভ্যালুগুলো ব্যাচ আকারে ইম্পোর্ট করুন
  • সার্ভার-সাইডে ঘটা ইভেন্টের উপর ভিত্তি করে আপনার অ্যাপের ভ্যালু পরিবর্তন করতে Cloud Functions for Firebase সাথে Remote Config ব্যবহার করুন । উদাহরণস্বরূপ, আপনি আপনার অ্যাপের একটি নতুন ফিচার প্রমোট করতে Remote Config ব্যবহার করতে পারেন, এবং যথেষ্ট সংখ্যক মানুষ নতুন ফিচারটির সাথে ইন্টারঅ্যাক্ট করলে সেই প্রমোশনটি স্বয়ংক্রিয়ভাবে বন্ধ করে দিতে পারেন।

    কাস্টম টুল এবং সার্ভারগুলির সাথে রিমোট কনফিগ ব্যাকএন্ডের মিথস্ক্রিয়া দেখানো ডায়াগ্রাম।

এই গাইডের পরবর্তী অংশগুলোতে Remote Config ব্যাকএন্ড এপিআই (API) ব্যবহার করে করা যায় এমন অপারেশনগুলো বর্ণনা করা হয়েছে। REST API-এর মাধ্যমে এই কাজগুলো সম্পাদনকারী কিছু কোড পর্যালোচনা করতে, এই নমুনা অ্যাপগুলোর মধ্যে একটি দেখুন:

Firebase অ্যাডমিন SDK ব্যবহার করে রিমোট কনফিগ পরিবর্তন করুন

The Admin SDK is a set of server libraries that let you interact with Firebase from privileged environments. In addition to performing updates to Remote Config , the Admin SDK enables generation and verification of Firebase auth tokens, reading and writing from Realtime Database , and so on. To learn more about Admin SDK prerequisites and setup, see Add the Firebase Admin SDK to your server .

একটি সাধারণ Remote Config ফ্লো-তে, আপনি বর্তমান টেমপ্লেটটি পেতে পারেন, কিছু প্যারামিটার বা প্যারামিটার গ্রুপ ও শর্তাবলী পরিবর্তন করতে পারেন, টেমপ্লেটটি যাচাই করতে পারেন এবং তারপরে এটি প্রকাশ করতে পারেন। এই API কলগুলি করার আগে, আপনাকে অবশ্যই SDK থেকে অনুরোধগুলির অনুমোদন দিতে হবে।

SDK চালু করুন এবং API অনুরোধগুলি অনুমোদন করুন

যখন আপনি কোনো প্যারামিটার ছাড়া Admin SDK চালু করেন, তখন SDK গুগল অ্যাপ্লিকেশনের ডিফল্ট ক্রেডেনশিয়াল ব্যবহার করে এবং 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);

বর্তমান রিমোট কনফিগারেশন টেমপ্লেটটি পান

Remote Config টেমপ্লেট নিয়ে কাজ করার সময় মনে রাখবেন যে, এগুলি ভার্সনযুক্ত এবং প্রতিটি ভার্সনের তৈরির সময় থেকে আপডেট দিয়ে প্রতিস্থাপন করার সময় পর্যন্ত একটি সীমিত মেয়াদ থাকে: ৯০ দিন, এবং মোট ৩০০টি ভার্সন সংরক্ষণ করা যায়। আরও তথ্যের জন্য টেমপ্লেট এবং ভার্সনিং দেখুন।

আপনি ব্যাকএন্ড এপিআই ব্যবহার করে Remote Config টেমপ্লেটের বর্তমান সক্রিয় সংস্করণটি JSON ফরম্যাটে পেতে পারেন।

A/B Testing এক্সপেরিমেন্টে ভ্যারিয়েন্ট হিসেবে বিশেষভাবে তৈরি করা প্যারামিটার এবং প্যারামিটার ভ্যালুগুলো এক্সপোর্ট করা টেমপ্লেটে অন্তর্ভুক্ত করা হয় না।

টেমপ্লেটটি পেতে:

নোড.জেএস

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

রিমোট কনফিগ প্যারামিটার পরিবর্তন করুন

আপনি প্রোগ্রাম্যাটিকভাবে Remote Config প্যারামিটার এবং প্যারামিটার গ্রুপ পরিবর্তন ও যোগ করতে পারেন। উদাহরণস্বরূপ, "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.")
        );

এই এপিআই আপনাকে নতুন প্যারামিটার ও প্যারামিটার গ্রুপ তৈরি করতে, অথবা ডিফল্ট মান, শর্তাধীন মান এবং বিবরণ পরিবর্তন করতে দেয়। সকল ক্ষেত্রে, পরিবর্তন করার পর আপনাকে অবশ্যই টেমপ্লেটটি সুস্পষ্টভাবে প্রকাশ করতে হবে।

রিমোট কনফিগের শর্তাবলী পরিবর্তন করুন

আপনি প্রোগ্রাম্যাটিকভাবে Remote Config শর্তাবলী এবং শর্তাধীন মান পরিবর্তন ও যোগ করতে পারেন। উদাহরণস্বরূপ, একটি নতুন শর্ত যোগ করতে:

নোড.জেএস

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

সকল ক্ষেত্রে, পরিবর্তন করার পর আপনাকে অবশ্যই টেমপ্লেটটি প্রকাশ করতে হবে।

Remote Config ব্যাকএন্ড এপিআইগুলো বিভিন্ন কন্ডিশন এবং কম্প্যারিসন অপারেটর প্রদান করে, যা ব্যবহার করে আপনি আপনার অ্যাপের আচরণ ও চেহারা পরিবর্তন করতে পারেন। কন্ডিশন এবং সেগুলোর জন্য সমর্থিত অপারেটরগুলো সম্পর্কে আরও জানতে, কন্ডিশনাল এক্সপ্রেশন রেফারেন্স দেখুন।

রিমোট কনফিগ টেমপ্লেটটি যাচাই করুন

ঐচ্ছিকভাবে, আপনি আপনার আপডেটগুলি প্রকাশ করার আগে যাচাই করতে পারেন, যেমনটি দেখানো হয়েছে:

নোড.জেএস

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

এই যাচাইকরণ প্রক্রিয়াটি প্যারামিটার এবং শর্তের জন্য ডুপ্লিকেট কী, অবৈধ শর্তের নাম বা অস্তিত্বহীন শর্ত, অথবা ভুলভাবে ফরম্যাট করা ই-ট্যাগের মতো ত্রুটিগুলি পরীক্ষা করে। উদাহরণস্বরূপ, অনুমোদিত সংখ্যার (২০০০) চেয়ে বেশি কী সম্বলিত একটি অনুরোধ " Param count too large ত্রুটি বার্তাটি ফেরত দেবে।

রিমোট কনফিগ টেমপ্লেটটি প্রকাশ করুন

একটি টেমপ্লেট সংগ্রহ করে এবং আপনার পছন্দসই আপডেট দিয়ে তা সংশোধন করার পর, আপনি সেটি প্রকাশ করতে পারেন। এই বিভাগে বর্ণিত পদ্ধতিতে একটি টেমপ্লেট প্রকাশ করলে, বিদ্যমান সম্পূর্ণ কনফিগারেশন টেমপ্লেটটি আপডেট করা ফাইল দ্বারা প্রতিস্থাপিত হয় এবং নতুন সক্রিয় টেমপ্লেটটিকে তার প্রতিস্থাপিত টেমপ্লেটের চেয়ে এক সংখ্যা বেশি একটি সংস্করণ নম্বর দেওয়া হয়।

প্রয়োজনে, আপনি REST API ব্যবহার করে পূর্ববর্তী সংস্করণে ফিরে যেতে পারেন। আপডেটে ত্রুটির ঝুঁকি কমাতে, আপনি প্রকাশ করার আগে যাচাই করে নিতে পারেন।

ডাউনলোড করা টেমপ্লেটগুলোতে Remote Config ব্যক্তিগতকরণ এবং শর্তাবলী অন্তর্ভুক্ত থাকে, তাই অন্য কোনো প্রজেক্টে এটি প্রকাশ করার চেষ্টা করার সময় নিম্নলিখিত সীমাবদ্ধতাগুলো সম্পর্কে সচেতন থাকা জরুরি:

  • এক প্রজেক্ট থেকে অন্য প্রজেক্টে ব্যক্তিগতকরণ আমদানি করা যায় না।

    উদাহরণস্বরূপ, যদি আপনার প্রজেক্টে পার্সোনালাইজেশন চালু করা থাকে এবং আপনি একটি টেমপ্লেট ডাউনলোড ও এডিট করেন, তাহলে আপনি সেটি একই প্রজেক্টে পাবলিশ করতে পারবেন, কিন্তু টেমপ্লেটটি থেকে পার্সোনালাইজেশনগুলো মুছে না ফেলা পর্যন্ত অন্য কোনো প্রজেক্টে পাবলিশ করতে পারবেন না।

  • শর্তাবলী এক প্রজেক্ট থেকে অন্য প্রজেক্টে ইম্পোর্ট করা যায়, কিন্তু মনে রাখবেন যে পাবলিশ করার আগে যেকোনো নির্দিষ্ট শর্তাধীন ভ্যালু (যেমন অ্যাপ আইডি বা অডিয়েন্স) টার্গেট প্রজেক্টে অবশ্যই বিদ্যমান থাকতে হবে।

    উদাহরণস্বরূপ, যদি আপনার একটি Remote Config প্যারামিটার থাকে যা এমন একটি শর্ত ব্যবহার করে যেখানে প্ল্যাটফর্ম ভ্যালু হিসেবে 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 এ অবস্থিত Remote Config REST API-এর প্রধান বৈশিষ্ট্যগুলো বর্ণনা করা হয়েছে। সম্পূর্ণ বিবরণের জন্য, API রেফারেন্স দেখুন।

এপিআই অনুরোধগুলি প্রমাণীকরণ ও অনুমোদন করতে একটি অ্যাক্সেস টোকেন নিন।

ফায়ারবেস প্রজেক্টগুলো গুগল সার্ভিস অ্যাকাউন্ট সমর্থন করে, যা ব্যবহার করে আপনি আপনার অ্যাপ সার্ভার বা বিশ্বস্ত পরিবেশ থেকে ফায়ারবেস সার্ভার এপিআই কল করতে পারেন। আপনি যদি স্থানীয়ভাবে কোড ডেভেলপ করেন বা আপনার অ্যাপ্লিকেশনটি অন-প্রিমিসেস-এ ডেপ্লয় করেন, তবে এই সার্ভিস অ্যাকাউন্ট থেকে প্রাপ্ত ক্রেডেনশিয়াল ব্যবহার করে সার্ভার রিকোয়েস্ট অনুমোদন করতে পারেন।

আপনি আপনার Firebase প্রোজেক্টের সমস্ত সার্ভিস অ্যাকাউন্ট দেখতে পারেন এখানে। > পরিষেবা অ্যাকাউন্ট ট্যাব

একটি সার্ভিস অ্যাকাউন্টকে প্রমাণীকরণ করতে এবং ফায়ারবেস সার্ভিসগুলো অ্যাক্সেস করার জন্য অনুমোদন দিতে, আপনাকে অবশ্যই JSON ফরম্যাটে একটি প্রাইভেট কী ফাইল তৈরি করতে হবে।

আপনার পরিষেবা অ্যাকাউন্টের জন্য একটি ব্যক্তিগত কী ফাইল তৈরি করতে:

  1. Firebase কনসোলে, এখানে যান > পরিষেবা অ্যাকাউন্ট ট্যাব

  2. Generate New Private Key-তে ক্লিক করুন, তারপর Generate Key-তে ক্লিক করে নিশ্চিত করুন।

  3. কী-টি ধারণকারী JSON ফাইলটি নিরাপদে সংরক্ষণ করুন।

সার্ভিস অ্যাকাউন্টের মাধ্যমে অনুমোদন করার সময়, আপনার অ্যাপ্লিকেশনে ক্রেডেনশিয়াল সরবরাহ করার জন্য দুটি বিকল্প রয়েছে। আপনি হয় GOOGLE_APPLICATION_CREDENTIALS এনভায়রনমেন্ট ভেরিয়েবলটি সেট করতে পারেন, অথবা কোডের মধ্যে সার্ভিস অ্যাকাউন্ট কী-এর পাথটি স্পষ্টভাবে পাস করতে পারেন। প্রথম বিকল্পটি অধিক নিরাপদ এবং এটি ব্যবহারের জন্য জোরালোভাবে সুপারিশ করা হয়।

এনভায়রনমেন্ট ভেরিয়েবল সেট করতে:

আপনার সার্ভিস অ্যাকাউন্ট কী ধারণকারী JSON ফাইলের ফাইল পাথে GOOGLE_APPLICATION_CREDENTIALS এনভায়রনমেন্ট ভেরিয়েবলটি সেট করুন। এই ভেরিয়েবলটি শুধুমাত্র আপনার বর্তমান শেল সেশনের জন্য প্রযোজ্য, তাই আপনি যদি একটি নতুন সেশন খোলেন, তাহলে ভেরিয়েবলটি আবার সেট করুন।

লিনাক্স বা ম্যাকওএস

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

উইন্ডোজ

পাওয়ারশেলের সাথে:

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

উপরের ধাপগুলো সম্পন্ন করার পর, অ্যাপ্লিকেশন ডিফল্ট ক্রেডেনশিয়ালস (ADC) আপনার ক্রেডেনশিয়ালগুলো স্বয়ংক্রিয়ভাবে নির্ধারণ করতে সক্ষম হয়, যার ফলে আপনি গুগল-বহির্ভূত পরিবেশে পরীক্ষা বা চালানোর সময় সার্ভিস অ্যাকাউন্টের ক্রেডেনশিয়াল ব্যবহার করতে পারেন।

আপনার পছন্দের ভাষার জন্য গুগল অথ লাইব্রেরির সাথে আপনার ফায়ারবেস ক্রেডেনশিয়াল ব্যবহার করে একটি স্বল্পস্থায়ী OAuth 2.0 অ্যাক্সেস টোকেন পুনরুদ্ধার করুন:

নোড.জেএস

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

এই উদাহরণে, গুগল এপিআই ক্লায়েন্ট লাইব্রেরি একটি 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();
}

আপনার অ্যাক্সেস টোকেনের মেয়াদ শেষ হয়ে গেলে, একটি হালনাগাদ অ্যাক্সেস টোকেন পাওয়ার জন্য টোকেন রিফ্রেশ মেথডটি স্বয়ংক্রিয়ভাবে কল করা হয়।

Remote Config এ অ্যাক্সেস অনুমোদন করতে, https://www.googleapis.com/auth/firebase.remoteconfig স্কোপটির জন্য অনুরোধ করুন।

রিমোট কনফিগ টেমপ্লেটটি পরিবর্তন করুন

Remote Config টেমপ্লেট নিয়ে কাজ করার সময় মনে রাখবেন যে, এগুলি ভার্সনযুক্ত এবং প্রতিটি ভার্সনের তৈরির সময় থেকে আপডেট দিয়ে প্রতিস্থাপন করার সময় পর্যন্ত একটি সীমিত মেয়াদ থাকে: ৯০ দিন, এবং মোট ৩০০টি ভার্সন সংরক্ষণ করা যায়। আরও তথ্যের জন্য টেমপ্লেট এবং ভার্সনিং দেখুন।

বর্তমান রিমোট কনফিগারেশন টেমপ্লেটটি পান

আপনি ব্যাকএন্ড এপিআই ব্যবহার করে 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 সহ) একটি আলাদা ফাইলে আউটপুট করে।

কাঁচা HTTP অনুরোধ

Host: firebaseremoteconfig.googleapis.com

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

এই এপিআই কলটি নিম্নলিখিত JSON ফেরত দেয়, সাথে একটি আলাদা হেডারও থাকে যাতে একটি ETag অন্তর্ভুক্ত থাকে, যা আপনি পরবর্তী অনুরোধের জন্য ব্যবহার করেন।

রিমোট কনফিগ টেমপ্লেটটি যাচাই করুন

Optionally, you can validate your updates before publishing them. Validate template updates by appending to your publish request the URL parameter ?validate_only=true . In the response, a status code 200 and an updated etag with the suffix -0 means that your update was successfully validated. Any non-200 response indicates that the JSON data contains errors that you must correct before publishing.

রিমোট কনফিগ টেমপ্লেট আপডেট করুন

একটি টেমপ্লেট সংগ্রহ করে এবং আপনার পছন্দসই আপডেট দিয়ে 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 কমান্ডের জন্য, আপনি "@" চিহ্নের পরে ফাইলের নামটি লিখে কন্টেন্ট নির্দিষ্ট করতে পারেন।

কাঁচা 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 প্রদান করা হয়।

রিমোট কনফিগের শর্তাবলী পরিবর্তন করুন

আপনি প্রোগ্রাম্যাটিকভাবে 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."
    }
  }
}

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

স্ট্যাটাস কোড অর্থ
২০০ সফলভাবে আপডেট করা হয়েছে
৪০০ 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.
৪০১ 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)
৪০৩ An authentication error occurred (the wrong access token was provided)
৫০০ 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 .