Remote Config را با برنامه تغییر دهید

این سند توضیح می‌دهد که چگونه می‌توانید مجموعه‌ای از پارامترها و شرایط با قالب JSON را که به عنوان الگوی Remote Config شناخته می‌شوند، به‌صورت برنامه‌نویسی بخوانید و تغییر دهید. این به شما امکان می‌دهد تغییرات قالب را در باطن ایجاد کنید که برنامه مشتری می‌تواند با استفاده از کتابخانه مشتری واکشی کند.

با استفاده از Remote Config REST API یا Admin SDK توضیح داده شده در این راهنما، می توانید مدیریت الگو را در کنسول Firebase دور بزنید تا به طور مستقیم تغییرات Remote Config را در فرآیندهای خود ادغام کنید. به عنوان مثال، با Remote Config Backend API ها، می توانید:

  • زمان‌بندی به‌روزرسانی‌های Remote Config . با استفاده از فراخوانی های API در ارتباط با یک کار cron، می توانید مقادیر Remote Config در یک برنامه زمانی منظم تغییر دهید.
  • مقادیر پیکربندی دسته ای را وارد کنید تا به طور موثر از سیستم اختصاصی خود به Firebase Remote Config منتقل شوید.
  • از Remote Config با Cloud Functions for Firebase استفاده کنید و مقادیر را در برنامه خود بر اساس رویدادهایی که در سمت سرور رخ می دهند تغییر دهید. به عنوان مثال، می‌توانید از Remote Config برای تبلیغ یک ویژگی جدید در برنامه خود استفاده کنید و پس از اینکه متوجه شدید افراد کافی با ویژگی جدید تعامل داشته‌اند، آن تبلیغ را به‌طور خودکار خاموش کنید.

    نموداری که باطن Remote Config را در تعامل با ابزارها و سرورهای سفارشی نشان می دهد

بخش‌های زیر از این راهنما، عملیات‌هایی را که می‌توانید با Remote Config Backend API انجام دهید، شرح می‌دهد. برای مرور کدهایی که این وظایف را از طریق REST API انجام می‌دهند، یکی از این برنامه‌های نمونه را ببینید:

تنظیمات Remote را با استفاده از Firebase Admin SDK تغییر دهید

Admin SDK مجموعه ای از کتابخانه های سرور است که به شما امکان می دهد با Firebase از محیط های ممتاز تعامل داشته باشید. علاوه بر انجام به‌روزرسانی‌های Remote Config ، Admin SDK تولید و تأیید توکن‌های تأیید اعتبار Firebase، خواندن و نوشتن از Realtime Database و غیره را امکان‌پذیر می‌کند. برای کسب اطلاعات بیشتر در مورد پیش نیازها و تنظیمات Admin SDK ، به افزودن Firebase Admin SDK به سرور خود مراجعه کنید.

در یک جریان Remote Config معمولی، ممکن است الگوی فعلی را دریافت کنید، برخی از پارامترها یا گروه‌ها و شرایط پارامترها را تغییر دهید، الگو را اعتبارسنجی کنید و سپس آن را منتشر کنید. قبل از برقراری آن تماس‌های API، باید درخواست‌ها را از SDK تأیید کنید.

SDK را راه‌اندازی کنید و درخواست‌های API را مجاز کنید

هنگامی که Admin SDK را بدون هیچ پارامتری مقداردهی اولیه می‌کنید، SDK از اعتبارنامه پیش‌فرض برنامه Google استفاده می‌کند و گزینه‌ها را از متغیر محیطی FIREBASE_CONFIG می‌خواند. اگر محتوای متغیر FIREBASE_CONFIG با یک { شروع شود، به عنوان یک شی JSON تجزیه خواهد شد. در غیر این صورت SDK فرض می کند که رشته نام یک فایل 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);

الگوی پیکربندی از راه دور فعلی را دریافت کنید

هنگام کار با قالب‌های Remote Config ، به خاطر داشته باشید که آنها نسخه‌بندی شده‌اند و هر نسخه از زمان ایجاد تا زمانی که آن را با به‌روزرسانی جایگزین می‌کنید، عمر محدودی دارد: 90 روز، با محدودیت کل 300 نسخه ذخیره‌شده. برای اطلاعات بیشتر به الگوها و نسخه‌سازی مراجعه کنید.

برای دریافت نسخه فعال فعلی قالب Remote Config با فرمت JSON می توانید از API های Backend استفاده کنید.

پارامترها و مقادیر پارامتر ایجاد شده به‌طور خاص به‌عنوان انواع در آزمایش A/B Testing در قالب‌های صادر شده گنجانده نمی‌شوند.

برای دریافت قالب:

Node.js

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

جاوا

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

پارامترهای Remote Config را تغییر دهید

می‌توانید پارامترهای Remote Config و گروه‌های پارامتر را به صورت برنامه‌نویسی تغییر دهید و اضافه کنید. به عنوان مثال، به یک گروه پارامتر موجود به نام "new_menu" می توانید یک پارامتر برای کنترل نمایش اطلاعات فصلی اضافه کنید:

Node.js

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

جاوا

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

API به شما امکان می دهد پارامترها و گروه های پارامتر جدیدی ایجاد کنید یا مقادیر پیش فرض، مقادیر شرطی و توضیحات را تغییر دهید. در همه موارد، شما باید پس از انجام تغییرات، به صراحت قالب را منتشر کنید.

شرایط پیکربندی از راه دور را تغییر دهید

می‌توانید شرایط Remote Config و مقادیر شرطی را به‌صورت برنامه‌نویسی تغییر دهید و اضافه کنید. به عنوان مثال، برای اضافه کردن یک شرط جدید:

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

در همه موارد، شما باید پس از انجام تغییرات، به صراحت قالب را منتشر کنید.

Remote Config Backend API شرایط و عملگرهای مقایسه ای را ارائه می دهد که می توانید از آنها برای تغییر رفتار و ظاهر برنامه خود استفاده کنید. برای کسب اطلاعات بیشتر در مورد شرایط و عملگرهای پشتیبانی شده برای این شرایط، به مرجع عبارت شرطی مراجعه کنید.

الگوی Remote Config را اعتبارسنجی کنید

به صورت اختیاری، می‌توانید به‌روزرسانی‌های خود را قبل از انتشار اعتبارسنجی کنید، همانطور که نشان داده شده است:

Node.js

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

جاوا

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 .

قالب Remote Config را منتشر کنید

پس از بازیابی یک قالب و اصلاح آن با به روز رسانی های مورد نظر خود، می توانید آن را منتشر کنید. انتشار یک الگو همانطور که در این بخش توضیح داده شده است، کل قالب پیکربندی موجود را با فایل به روز شده جایگزین می کند و به الگوی فعال جدید یک نسخه شماره یک بزرگتر از قالبی که جایگزین کرده است اختصاص می یابد.

در صورت لزوم، می‌توانید از REST API برای بازگشت به نسخه قبلی استفاده کنید. برای کاهش خطر خطا در به‌روزرسانی، می‌توانید قبل از انتشار اعتبارسنجی کنید .

شخصی‌سازی‌ها و شرایط Remote Config در قالب‌های دانلود شده گنجانده شده‌اند، بنابراین هنگام تلاش برای انتشار در پروژه‌ای دیگر، مهم است که از محدودیت‌های زیر آگاه باشید:

  • شخصی سازی ها را نمی توان از پروژه ای به پروژه دیگر وارد کرد.

    برای مثال، اگر شخصی‌سازی‌ها را در پروژه خود فعال کرده‌اید و یک الگو را دانلود و ویرایش کنید، می‌توانید آن را در همان پروژه منتشر کنید، اما نمی‌توانید آن را در پروژه دیگری منتشر کنید، مگر اینکه شخصی‌سازی‌ها را از الگو حذف کنید.

  • شرایط را می توان از پروژه ای به پروژه دیگر وارد کرد، اما توجه داشته باشید که هر مقدار شرطی خاص (مانند شناسه های برنامه یا مخاطبان)، باید قبل از انتشار در پروژه هدف وجود داشته باشد.

    برای مثال، اگر یک پارامتر Remote Config دارید که از شرطی استفاده می‌کند که مقدار پلتفرم iOS را مشخص می‌کند، الگو را می‌توان در پروژه دیگری منتشر کرد، زیرا مقادیر پلتفرم برای هر پروژه یکسان است. با این حال، اگر دارای شرایطی باشد که متکی به شناسه برنامه خاص یا مخاطبان کاربر است که در پروژه هدف وجود ندارد، اعتبارسنجی ناموفق خواهد بود.

  • اگر قالبی که قصد انتشار آن را دارید دارای شرایطی باشد که به Google Analytics متکی است، Analytics باید در پروژه هدف فعال باشد.

Node.js

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

جاوا

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

تنظیمات Remote را با استفاده از REST API تغییر دهید

این بخش قابلیت‌های اصلی Remote Config REST API را در https://firebaseremoteconfig.googleapis.com شرح می‌دهد. برای جزئیات کامل، به مرجع API مراجعه کنید.

برای احراز هویت و تأیید درخواست‌های API یک نشانه دسترسی دریافت کنید

پروژه‌های Firebase از حساب‌های سرویس Google پشتیبانی می‌کنند که می‌توانید از آنها برای فراخوانی APIهای سرور Firebase از سرور برنامه یا محیط مورد اعتماد خود استفاده کنید. اگر در حال توسعه کد به صورت محلی یا نصب برنامه خود در محل هستید، می توانید از اعتبارنامه های به دست آمده از طریق این حساب سرویس برای تأیید درخواست های سرور استفاده کنید.

برای احراز هویت یک حساب سرویس و اجازه دسترسی به خدمات Firebase، باید یک فایل کلید خصوصی با فرمت JSON ایجاد کنید.

برای ایجاد یک فایل کلید خصوصی برای حساب سرویس خود:

  1. در کنسول Firebase ، تنظیمات > حساب‌های سرویس را باز کنید.

  2. روی Generate New Private Key کلیک کنید، سپس با کلیک روی Generate Key تأیید کنید.

  3. فایل JSON حاوی کلید را ایمن ذخیره کنید.

هنگام مجوز دادن از طریق یک حساب سرویس، دو انتخاب برای ارائه اعتبارنامه به برنامه خود دارید. می‌توانید متغیر محیطی GOOGLE_APPLICATION_CREDENTIALS را تنظیم کنید، یا می‌توانید مسیر کلید حساب سرویس را به صورت واضح در کد ارسال کنید. گزینه اول امن تر است و به شدت توصیه می شود.

برای تنظیم متغیر محیطی:

متغیر محیطی GOOGLE_APPLICATION_CREDENTIALS را روی مسیر فایل فایل JSON که حاوی کلید حساب سرویس شما است، تنظیم کنید. این متغیر فقط برای جلسه پوسته فعلی شما اعمال می شود، بنابراین اگر جلسه جدیدی را باز کردید، متغیر را دوباره تنظیم کنید.

لینوکس یا macOS

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

ویندوز

با PowerShell:

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

پس از تکمیل مراحل بالا، اعتبارنامه پیش‌فرض برنامه (ADC) می‌تواند به طور ضمنی اعتبار شما را تعیین کند و به شما این امکان را می‌دهد که از اعتبار حساب سرویس هنگام آزمایش یا اجرا در محیط‌های غیر Google استفاده کنید.

برای بازیابی رمز دسترسی کوتاه مدت OAuth 2.0، از اعتبارنامه Firebase خود به همراه کتابخانه Google Auth برای زبان دلخواه خود استفاده کنید:

node.js

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

در این مثال، کتابخانه سرویس گیرنده Google API درخواست را با یک توکن وب JSON یا JWT احراز هویت می کند. برای اطلاعات بیشتر، به نشانه‌های وب JSON مراجعه کنید.

پایتون

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 ، به خاطر داشته باشید که آنها نسخه‌بندی شده‌اند و هر نسخه از زمان ایجاد تا زمانی که آن را با به‌روزرسانی جایگزین می‌کنید، عمر محدودی دارد: 90 روز، با محدودیت کل 300 نسخه ذخیره‌شده. برای اطلاعات بیشتر به الگوها و نسخه‌سازی مراجعه کنید.

الگوی پیکربندی از راه دور فعلی را دریافت کنید

برای دریافت نسخه فعال فعلی قالب Remote Config با فرمت JSON می توانید از API های Backend استفاده کنید.

پارامترها و مقادیر پارامتر ایجاد شده به‌طور خاص به‌عنوان انواع در آزمایش 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

این دستور payload JSON را به یک فایل و هدرها (از جمله Etag) را به یک فایل جداگانه خروجی می دهد.

درخواست HTTP خام

Host: firebaseremoteconfig.googleapis.com

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

این فراخوانی API JSON زیر را به همراه یک هدر جداگانه که شامل یک ETag است که برای درخواست بعدی استفاده می‌کنید، برمی‌گرداند.

الگوی Remote Config را اعتبارسنجی کنید

به صورت اختیاری، می‌توانید به‌روزرسانی‌های خود را قبل از انتشار اعتبارسنجی کنید. به‌روزرسانی‌های الگو را با افزودن پارامتر URL ?validate_only=true به درخواست انتشار خود تأیید کنید. در پاسخ، کد وضعیت 200 و برچسب به روز شده با پسوند -0 به این معنی است که به روز رسانی شما با موفقیت تأیید شد. هر پاسخ غیر 200 نشان می‌دهد که داده‌های JSON حاوی خطاهایی هستند که باید قبل از انتشار تصحیح کنید.

قالب Remote Config را به روز کنید

پس از بازیابی یک الگو و اصلاح محتوای JSON با به روز رسانی های مورد نظر خود، می توانید آن را منتشر کنید. انتشار یک الگو همانطور که در این بخش توضیح داده شده است، کل قالب پیکربندی موجود را با فایل به روز شده جایگزین می کند و به الگوی فعال جدید یک نسخه شماره یک بزرگتر از قالبی که جایگزین کرده است اختصاص می یابد.

در صورت لزوم، می‌توانید از REST API برای بازگشت به نسخه قبلی استفاده کنید. برای کاهش خطر خطا در به‌روزرسانی، می‌توانید قبل از انتشار اعتبارسنجی کنید .

شخصی‌سازی‌ها و شرایط Remote Config در قالب‌های دانلود شده گنجانده شده‌اند، بنابراین هنگام تلاش برای انتشار در پروژه‌ای دیگر، مهم است که از محدودیت‌های زیر آگاه باشید:

  • شخصی سازی ها را نمی توان از پروژه ای به پروژه دیگر وارد کرد.

    برای مثال، اگر شخصی‌سازی‌ها را در پروژه خود فعال کرده‌اید و یک الگو را دانلود و ویرایش کنید، می‌توانید آن را در همان پروژه منتشر کنید، اما نمی‌توانید آن را در پروژه دیگری منتشر کنید، مگر اینکه شخصی‌سازی‌ها را از الگو حذف کنید.

  • شرایط را می توان از پروژه ای به پروژه دیگر وارد کرد، اما توجه داشته باشید که هر مقدار شرطی خاص (مانند شناسه های برنامه یا مخاطبان)، باید قبل از انتشار در پروژه هدف وجود داشته باشد.

    برای مثال، اگر یک پارامتر Remote Config دارید که از شرطی استفاده می‌کند که مقدار پلتفرم iOS را مشخص می‌کند، الگو را می‌توان در پروژه دیگری منتشر کرد، زیرا مقادیر پلتفرم برای هر پروژه یکسان است. با این حال، اگر دارای شرایطی باشد که متکی به شناسه برنامه خاص یا مخاطبان کاربر است که در پروژه هدف وجود ندارد، اعتبارسنجی ناموفق خواهد بود.

  • اگر قالبی که قصد انتشار آن را دارید دارای شرایطی باشد که به Google Analytics متکی است، Analytics باید در پروژه هدف فعال باشد.

CURL

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

برای این دستور curl ، می توانید با استفاده از کاراکتر "@" و به دنبال آن نام فایل، محتوا را مشخص کنید.

درخواست 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 بعدی ارائه می شود.

شرایط پیکربندی از راه دور را تغییر دهید

شما می توانید شرایط Remote Config و مقادیر شرطی را به صورت برنامه نویسی تغییر دهید. با REST API، باید قالب را مستقیماً ویرایش کنید تا قبل از انتشار الگو، شرایط را تغییر دهید.

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

تغییرات بالا ابتدا مجموعه ای از شرایط را تعریف می کنند و سپس مقادیر پیش فرض و مقادیر پارامتر مبتنی بر شرط ( مقادیر شرطی ) را برای هر پارامتر تعریف می کنند. همچنین یک توضیح اختیاری برای هر عنصر اضافه می کند. مانند نظرات کد، اینها برای استفاده توسعه دهندگان هستند و در برنامه نمایش داده نمی شوند. یک ETag نیز برای اهداف کنترل نسخه ارائه شده است.

Remote Config Backend API شرایط و عملگرهای مقایسه ای را ارائه می دهد که می توانید از آنها برای تغییر رفتار و ظاهر برنامه خود استفاده کنید. برای کسب اطلاعات بیشتر در مورد شرایط و عملگرهای پشتیبانی شده برای این شرایط، به مرجع عبارت شرطی مراجعه کنید.

کدهای خطای HTTP

کد وضعیت معنی
200 با موفقیت به روز شد
400 یک خطای اعتبار سنجی رخ داد. به عنوان مثال، درخواستی حاوی بیش از تعداد مجاز کلیدها - 2000 - 400 (درخواست بد) Param count too large با پیام خطا برمی گرداند. همچنین، این کد وضعیت HTTPS می تواند در این دو موقعیت رخ دهد:
  • یک خطای عدم تطابق نسخه رخ داد زیرا مجموعه مقادیر و شرایط از آخرین باری که مقدار ETag را بازیابی کردید به روز شده است. برای حل این مشکل، باید از دستور GET استفاده کنید تا یک الگو و مقدار ETag تازه دریافت کنید، الگو را به روز کنید و سپس با استفاده از آن الگو و مقدار تازه ETag ارسال کنید.
  • یک دستور PUT (درخواست الگوی Remote Config ) بدون تعیین سرصفحه If-Match انجام شد.
401 یک خطای مجوز روی داد (هیچ نشانه دسترسی ارائه نشد یا Firebase Remote Config REST API به پروژه شما در کنسول برنامه‌نویس Cloud اضافه نشده است)
403 یک خطای احراز هویت روی داد (توکن دسترسی اشتباه ارائه شد)
500 یک خطای داخلی رخ داد. اگر این خطا رخ داد، یک تیکت پشتیبانی Firebase را ثبت کنید

کد وضعیت 200 به این معنی است که الگوی Remote Config (پارامترها، مقادیر و شرایط پروژه) به روز شده است و اکنون برای برنامه هایی که از این پروژه استفاده می کنند در دسترس است. سایر کدهای وضعیت نشان می دهد که الگوی Remote Config که قبلاً وجود داشت هنوز در حال اجرا است.

پس از ارسال به‌روزرسانی‌ها برای الگو، به کنسول Firebase بروید تا تأیید کنید که تغییرات شما مطابق انتظار ظاهر می‌شوند. این بسیار مهم است زیرا ترتیب شرایط بر نحوه ارزیابی آنها تأثیر می گذارد (اولین شرطی که true را ارزیابی می کند تأثیر می گذارد).

استفاده از ETag و به روز رسانی های اجباری

Remote Config REST API از یک تگ موجودیت (ETag) برای جلوگیری از شرایط مسابقه و به‌روزرسانی‌های همپوشانی منابع استفاده می‌کند. برای کسب اطلاعات بیشتر در مورد ETags، به ETag - HTTP مراجعه کنید.

برای REST API، Google توصیه می‌کند که ETag ارائه شده توسط جدیدترین دستور GET را در حافظه پنهان نگه دارید و هنگام صدور دستورات PUT از آن مقدار ETag در سرصفحه درخواست If-Match استفاده کنید. اگر دستور PUT شما منجر به کد وضعیت HTTPS 409 شود، باید یک دستور GET جدید برای به دست آوردن یک ETag و الگوی جدید برای استفاده با دستور PUT بعدی خود صادر کنید.

می‌توانید ETag و محافظت از آن را با مجبور کردن الگوی Remote Config به‌روزرسانی به‌صورت زیر دور بزنید: If-Match: * با این حال، این روش توصیه نمی‌شود زیرا خطر از بین رفتن به‌روزرسانی‌های Remote Config را دارد. اگر چندین مشتری در حال به‌روزرسانی الگوی Remote Config هستند، الگو را انتخاب کنید. این نوع تداخل ممکن است با چندین کلاینت با استفاده از API یا با به‌روزرسانی‌های متناقض از مشتریان API و کاربران کنسول Firebase رخ دهد.

برای راهنمایی در مورد مدیریت نسخه‌های الگوی Remote Config ، به الگوهای پیکربندی از راه دور و نسخه‌سازی مراجعه کنید.

،

این سند توضیح می‌دهد که چگونه می‌توانید مجموعه‌ای از پارامترها و شرایط با قالب JSON را که به عنوان الگوی Remote Config شناخته می‌شوند، به‌صورت برنامه‌نویسی بخوانید و تغییر دهید. این به شما امکان می‌دهد تغییرات قالب را در باطن ایجاد کنید که برنامه مشتری می‌تواند با استفاده از کتابخانه مشتری واکشی کند.

با استفاده از Remote Config REST API یا Admin SDK توضیح داده شده در این راهنما، می توانید مدیریت الگو را در کنسول Firebase دور بزنید تا به طور مستقیم تغییرات Remote Config را در فرآیندهای خود ادغام کنید. به عنوان مثال، با Remote Config Backend API ها، می توانید:

  • زمان‌بندی به‌روزرسانی‌های Remote Config . با استفاده از فراخوانی های API در ارتباط با یک کار cron، می توانید مقادیر Remote Config در یک برنامه زمانی منظم تغییر دهید.
  • مقادیر پیکربندی دسته ای را وارد کنید تا به طور موثر از سیستم اختصاصی خود به Firebase Remote Config منتقل شوید.
  • از Remote Config با Cloud Functions for Firebase استفاده کنید و مقادیر را در برنامه خود بر اساس رویدادهایی که در سمت سرور رخ می دهند تغییر دهید. به عنوان مثال، می‌توانید از Remote Config برای تبلیغ یک ویژگی جدید در برنامه خود استفاده کنید و پس از اینکه متوجه شدید افراد کافی با ویژگی جدید تعامل داشته‌اند، آن تبلیغ را به‌طور خودکار خاموش کنید.

    نموداری که باطن Remote Config را در تعامل با ابزارها و سرورهای سفارشی نشان می دهد

بخش‌های زیر از این راهنما، عملیات‌هایی را که می‌توانید با Remote Config Backend API انجام دهید، شرح می‌دهد. برای مرور کدهایی که این وظایف را از طریق REST API انجام می‌دهند، یکی از این برنامه‌های نمونه را ببینید:

تنظیمات Remote را با استفاده از Firebase Admin SDK تغییر دهید

Admin SDK مجموعه ای از کتابخانه های سرور است که به شما امکان می دهد با Firebase از محیط های ممتاز تعامل داشته باشید. علاوه بر انجام به‌روزرسانی‌های Remote Config ، Admin SDK تولید و تأیید توکن‌های تأیید اعتبار Firebase، خواندن و نوشتن از Realtime Database و غیره را امکان‌پذیر می‌کند. برای کسب اطلاعات بیشتر در مورد پیش نیازها و تنظیمات Admin SDK ، به افزودن Firebase Admin SDK به سرور خود مراجعه کنید.

در یک جریان Remote Config معمولی، ممکن است الگوی فعلی را دریافت کنید، برخی از پارامترها یا گروه‌ها و شرایط پارامترها را تغییر دهید، الگو را اعتبارسنجی کنید و سپس آن را منتشر کنید. قبل از برقراری آن تماس‌های API، باید درخواست‌ها را از SDK تأیید کنید.

SDK را راه‌اندازی کنید و درخواست‌های API را مجاز کنید

هنگامی که Admin SDK را بدون هیچ پارامتری مقداردهی اولیه می‌کنید، SDK از اعتبارنامه پیش‌فرض برنامه Google استفاده می‌کند و گزینه‌ها را از متغیر محیطی FIREBASE_CONFIG می‌خواند. اگر محتوای متغیر FIREBASE_CONFIG با یک { شروع شود، به عنوان یک شی JSON تجزیه خواهد شد. در غیر این صورت SDK فرض می کند که رشته نام یک فایل 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);

الگوی پیکربندی از راه دور فعلی را دریافت کنید

هنگام کار با قالب‌های Remote Config ، به خاطر داشته باشید که آنها نسخه‌بندی شده‌اند و هر نسخه از زمان ایجاد تا زمانی که آن را با به‌روزرسانی جایگزین می‌کنید، عمر محدودی دارد: 90 روز، با محدودیت کل 300 نسخه ذخیره‌شده. برای اطلاعات بیشتر به الگوها و نسخه‌سازی مراجعه کنید.

برای دریافت نسخه فعال فعلی قالب Remote Config با فرمت JSON می توانید از API های Backend استفاده کنید.

پارامترها و مقادیر پارامتر ایجاد شده به‌طور خاص به‌عنوان انواع در آزمایش A/B Testing در قالب‌های صادر شده گنجانده نمی‌شوند.

برای دریافت قالب:

Node.js

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

جاوا

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

پارامترهای Remote Config را تغییر دهید

می‌توانید پارامترهای Remote Config و گروه‌های پارامتر را به صورت برنامه‌نویسی تغییر دهید و اضافه کنید. به عنوان مثال، به یک گروه پارامتر موجود به نام "new_menu" می توانید یک پارامتر برای کنترل نمایش اطلاعات فصلی اضافه کنید:

Node.js

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

جاوا

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

API به شما امکان می دهد پارامترها و گروه های پارامتر جدیدی ایجاد کنید یا مقادیر پیش فرض، مقادیر شرطی و توضیحات را تغییر دهید. در همه موارد، شما باید پس از انجام تغییرات، به صراحت قالب را منتشر کنید.

شرایط پیکربندی از راه دور را تغییر دهید

می‌توانید شرایط Remote Config و مقادیر شرطی را به‌صورت برنامه‌نویسی تغییر دهید و اضافه کنید. به عنوان مثال، برای اضافه کردن یک شرط جدید:

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

در همه موارد، شما باید پس از انجام تغییرات، به صراحت قالب را منتشر کنید.

Remote Config Backend API شرایط و عملگرهای مقایسه ای را ارائه می دهد که می توانید از آنها برای تغییر رفتار و ظاهر برنامه خود استفاده کنید. برای کسب اطلاعات بیشتر در مورد شرایط و عملگرهای پشتیبانی شده برای این شرایط، به مرجع عبارت شرطی مراجعه کنید.

الگوی Remote Config را اعتبارسنجی کنید

به صورت اختیاری، می‌توانید به‌روزرسانی‌های خود را قبل از انتشار اعتبارسنجی کنید، همانطور که نشان داده شده است:

Node.js

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

جاوا

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 .

قالب Remote Config را منتشر کنید

پس از بازیابی یک قالب و اصلاح آن با به روز رسانی های مورد نظر خود، می توانید آن را منتشر کنید. انتشار یک الگو همانطور که در این بخش توضیح داده شده است، کل قالب پیکربندی موجود را با فایل به روز شده جایگزین می کند و به الگوی فعال جدید یک نسخه شماره یک بزرگتر از قالبی که جایگزین کرده است اختصاص می یابد.

در صورت لزوم، می‌توانید از REST API برای بازگشت به نسخه قبلی استفاده کنید. برای کاهش خطر خطا در به‌روزرسانی، می‌توانید قبل از انتشار اعتبارسنجی کنید .

شخصی‌سازی‌ها و شرایط Remote Config در قالب‌های دانلود شده گنجانده شده‌اند، بنابراین هنگام تلاش برای انتشار در پروژه‌ای دیگر، مهم است که از محدودیت‌های زیر آگاه باشید:

  • شخصی سازی ها را نمی توان از پروژه ای به پروژه دیگر وارد کرد.

    برای مثال، اگر شخصی‌سازی‌ها را در پروژه خود فعال کرده‌اید و یک الگو را دانلود و ویرایش کنید، می‌توانید آن را در همان پروژه منتشر کنید، اما نمی‌توانید آن را در پروژه دیگری منتشر کنید، مگر اینکه شخصی‌سازی‌ها را از الگو حذف کنید.

  • شرایط را می توان از پروژه ای به پروژه دیگر وارد کرد، اما توجه داشته باشید که هر مقدار شرطی خاص (مانند شناسه های برنامه یا مخاطبان)، باید قبل از انتشار در پروژه هدف وجود داشته باشد.

    برای مثال، اگر یک پارامتر Remote Config دارید که از شرطی استفاده می‌کند که مقدار پلتفرم iOS را مشخص می‌کند، الگو را می‌توان در پروژه دیگری منتشر کرد، زیرا مقادیر پلتفرم برای هر پروژه یکسان است. با این حال، اگر دارای شرایطی باشد که متکی به شناسه برنامه خاص یا مخاطبان کاربر است که در پروژه هدف وجود ندارد، اعتبارسنجی ناموفق خواهد بود.

  • اگر قالبی که قصد انتشار آن را دارید دارای شرایطی باشد که به Google Analytics متکی است، Analytics باید در پروژه هدف فعال باشد.

Node.js

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

جاوا

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

تنظیمات Remote را با استفاده از REST API تغییر دهید

این بخش قابلیت‌های اصلی Remote Config REST API را در https://firebaseremoteconfig.googleapis.com شرح می‌دهد. برای جزئیات کامل، به مرجع API مراجعه کنید.

برای احراز هویت و تأیید درخواست‌های API یک نشانه دسترسی دریافت کنید

پروژه‌های Firebase از حساب‌های سرویس Google پشتیبانی می‌کنند که می‌توانید از آنها برای فراخوانی APIهای سرور Firebase از سرور برنامه یا محیط مورد اعتماد خود استفاده کنید. اگر در حال توسعه کد به صورت محلی یا نصب برنامه خود در محل هستید، می توانید از اعتبارنامه های به دست آمده از طریق این حساب سرویس برای تأیید درخواست های سرور استفاده کنید.

برای احراز هویت یک حساب سرویس و اجازه دسترسی به خدمات Firebase، باید یک فایل کلید خصوصی با فرمت JSON ایجاد کنید.

برای ایجاد یک فایل کلید خصوصی برای حساب سرویس خود:

  1. در کنسول Firebase ، تنظیمات > حساب‌های سرویس را باز کنید.

  2. روی Generate New Private Key کلیک کنید، سپس با کلیک روی Generate Key تأیید کنید.

  3. فایل JSON حاوی کلید را ایمن ذخیره کنید.

هنگام مجوز دادن از طریق یک حساب سرویس، دو انتخاب برای ارائه اعتبارنامه به برنامه خود دارید. می‌توانید متغیر محیطی GOOGLE_APPLICATION_CREDENTIALS را تنظیم کنید، یا می‌توانید مسیر کلید حساب سرویس را به صورت واضح در کد ارسال کنید. گزینه اول امن تر است و به شدت توصیه می شود.

برای تنظیم متغیر محیطی:

متغیر محیطی GOOGLE_APPLICATION_CREDENTIALS را روی مسیر فایل فایل JSON که حاوی کلید حساب سرویس شما است، تنظیم کنید. این متغیر فقط برای جلسه پوسته فعلی شما اعمال می شود، بنابراین اگر جلسه جدیدی را باز کردید، متغیر را دوباره تنظیم کنید.

لینوکس یا macOS

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

ویندوز

با PowerShell:

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

پس از تکمیل مراحل بالا، اعتبارنامه پیش‌فرض برنامه (ADC) می‌تواند به طور ضمنی اعتبار شما را تعیین کند و به شما این امکان را می‌دهد که از اعتبار حساب سرویس هنگام آزمایش یا اجرا در محیط‌های غیر Google استفاده کنید.

برای بازیابی رمز دسترسی کوتاه مدت OAuth 2.0، از اعتبارنامه Firebase خود به همراه کتابخانه Google Auth برای زبان دلخواه خود استفاده کنید:

node.js

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

در این مثال، کتابخانه سرویس گیرنده Google API درخواست را با یک توکن وب JSON یا JWT احراز هویت می کند. برای اطلاعات بیشتر، به نشانه‌های وب JSON مراجعه کنید.

پایتون

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 ، به خاطر داشته باشید که آنها نسخه‌بندی شده‌اند و هر نسخه از زمان ایجاد تا زمانی که آن را با به‌روزرسانی جایگزین می‌کنید، عمر محدودی دارد: 90 روز، با محدودیت کل 300 نسخه ذخیره‌شده. برای اطلاعات بیشتر به الگوها و نسخه‌سازی مراجعه کنید.

الگوی پیکربندی از راه دور فعلی را دریافت کنید

برای دریافت نسخه فعال فعلی قالب Remote Config با فرمت JSON می توانید از API های Backend استفاده کنید.

پارامترها و مقادیر پارامتر ایجاد شده به‌طور خاص به‌عنوان انواع در آزمایش 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

این دستور payload JSON را به یک فایل و هدرها (از جمله Etag) را به یک فایل جداگانه خروجی می دهد.

درخواست HTTP خام

Host: firebaseremoteconfig.googleapis.com

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

این فراخوانی API JSON زیر را به همراه یک هدر جداگانه که شامل یک ETag است که برای درخواست بعدی استفاده می‌کنید، برمی‌گرداند.

الگوی Remote Config را اعتبارسنجی کنید

به صورت اختیاری، می‌توانید به‌روزرسانی‌های خود را قبل از انتشار اعتبارسنجی کنید. به‌روزرسانی‌های الگو را با افزودن پارامتر URL ?validate_only=true به درخواست انتشار خود تأیید کنید. در پاسخ، کد وضعیت 200 و برچسب به روز شده با پسوند -0 به این معنی است که به روز رسانی شما با موفقیت تأیید شد. هر پاسخ غیر 200 نشان می‌دهد که داده‌های JSON حاوی خطاهایی هستند که باید قبل از انتشار تصحیح کنید.

قالب Remote Config را به روز کنید

پس از بازیابی یک الگو و اصلاح محتوای JSON با به روز رسانی های مورد نظر خود، می توانید آن را منتشر کنید. انتشار یک الگو همانطور که در این بخش توضیح داده شده است، کل قالب پیکربندی موجود را با فایل به روز شده جایگزین می کند و به الگوی فعال جدید یک نسخه شماره یک بزرگتر از قالبی که جایگزین کرده است اختصاص می یابد.

در صورت لزوم، می‌توانید از REST API برای بازگشت به نسخه قبلی استفاده کنید. برای کاهش خطر خطا در به‌روزرسانی، می‌توانید قبل از انتشار اعتبارسنجی کنید .

شخصی‌سازی‌ها و شرایط Remote Config در قالب‌های دانلود شده گنجانده شده‌اند، بنابراین هنگام تلاش برای انتشار در پروژه‌ای دیگر، مهم است که از محدودیت‌های زیر آگاه باشید:

  • شخصی سازی ها را نمی توان از پروژه ای به پروژه دیگر وارد کرد.

    برای مثال، اگر شخصی‌سازی‌ها را در پروژه خود فعال کرده‌اید و یک الگو را دانلود و ویرایش کنید، می‌توانید آن را در همان پروژه منتشر کنید، اما نمی‌توانید آن را در پروژه دیگری منتشر کنید، مگر اینکه شخصی‌سازی‌ها را از الگو حذف کنید.

  • شرایط را می توان از پروژه ای به پروژه دیگر وارد کرد، اما توجه داشته باشید که هر مقدار شرطی خاص (مانند شناسه های برنامه یا مخاطبان)، باید قبل از انتشار در پروژه هدف وجود داشته باشد.

    برای مثال، اگر یک پارامتر Remote Config دارید که از شرطی استفاده می‌کند که مقدار پلتفرم iOS را مشخص می‌کند، الگو را می‌توان در پروژه دیگری منتشر کرد، زیرا مقادیر پلتفرم برای هر پروژه یکسان است. با این حال، اگر دارای شرایطی باشد که متکی به شناسه برنامه خاص یا مخاطبان کاربر است که در پروژه هدف وجود ندارد، اعتبارسنجی ناموفق خواهد بود.

  • اگر قالبی که قصد انتشار آن را دارید دارای شرایطی باشد که به Google Analytics متکی است، Analytics باید در پروژه هدف فعال باشد.

CURL

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

برای این دستور curl ، می توانید با استفاده از کاراکتر "@" و به دنبال آن نام فایل، محتوا را مشخص کنید.

درخواست 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 بعدی ارائه می شود.

شرایط پیکربندی از راه دور را تغییر دهید

شما می توانید شرایط Remote Config و مقادیر شرطی را به صورت برنامه نویسی تغییر دهید. با REST API، باید قالب را مستقیماً ویرایش کنید تا قبل از انتشار الگو، شرایط را تغییر دهید.

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

تغییرات بالا ابتدا مجموعه ای از شرایط را تعریف می کنند و سپس مقادیر پیش فرض و مقادیر پارامتر مبتنی بر شرط ( مقادیر شرطی ) را برای هر پارامتر تعریف می کنند. همچنین یک توضیح اختیاری برای هر عنصر اضافه می کند. مانند نظرات کد، اینها برای استفاده توسعه دهندگان هستند و در برنامه نمایش داده نمی شوند. یک ETag نیز برای اهداف کنترل نسخه ارائه شده است.

API های باکد Remote Config شرایط و اپراتورهای مقایسه ای را ارائه می دهند که می توانید از آنها برای تغییر رفتار و ظاهر برنامه خود استفاده کنید. برای کسب اطلاعات بیشتر در مورد شرایط و اپراتورهای پشتیبانی شده برای این شرایط ، به مرجع بیان شرطی مراجعه کنید.

کدهای خطای HTTP

کد وضعیت معنی
200 با موفقیت به روز شد
400 یک خطای اعتبار سنجی رخ داد. به عنوان مثال ، درخواستی حاوی بیش از تعداد مجاز کلیدها - 2000 - 400 (درخواست بد) را با پیام خطا بازگرداند ، Param count too large . همچنین ، این کد وضعیت HTTPS می تواند در این دو حالت رخ دهد:
  • یک خطای عدم تطابق نسخه رخ داده است زیرا مجموعه ای از مقادیر و شرایط از زمان آخرین بازیابی مقدار ETAG به روز شده است. برای حل این مسئله ، شما باید از یک دستور GET برای به دست آوردن یک الگوی تازه و مقدار ETAG استفاده کنید ، الگوی را به روز کنید و سپس با استفاده از آن الگوی و مقدار ETAG تازه ارسال کنید.
  • یک دستور PUT (درخواست الگوی Remote Config به روزرسانی) بدون مشخص کردن یک هدر If-Match ساخته شده است.
401 یک خطای مجوز رخ داده است (هیچ نشانه دسترسی ارائه نشده است یا API Remote Config REST در کنسول توسعه دهنده ابر به پروژه شما اضافه نشده است)
403 خطای احراز هویت رخ داد (نشانه دسترسی اشتباه ارائه شده است)
500 یک خطای داخلی رخ داد. اگر این خطا رخ داد ، بلیط پشتیبانی Firebase را ثبت کنید

کد وضعیت 200 به این معنی است که الگوی Remote Config (پارامترها ، مقادیر و شرایط پروژه) به روز شده است و اکنون در دسترس برنامه هایی است که از این پروژه استفاده می کنند. سایر کدهای وضعیت نشان می دهد که الگوی Remote Config که قبلاً وجود داشته است ، هنوز در حال اجرا است.

پس از ارسال به روزرسانی به الگوی خود ، به کنسول Firebase بروید تا تأیید کنید که تغییرات شما مطابق انتظار ظاهر می شود. این امر بسیار مهم است زیرا ترتیب شرایط بر نحوه ارزیابی آنها تأثیر می گذارد (اولین شرایطی که true ارزیابی می کند ، تأثیر می گذارد).

استفاده از ETAG و به روزرسانی های اجباری

API Remote Config REST از یک برچسب Entity (ETAG) برای جلوگیری از شرایط مسابقه و به روزرسانی های همپوشانی منابع استفاده می کند. برای کسب اطلاعات بیشتر در مورد ETAG ، به Etag - Http مراجعه کنید.

برای API REST ، Google توصیه می کند ETAG را که توسط جدیدترین دستور GET ارائه شده است ، ذخیره کنید و هنگام صدور دستورات PUT ، از آن مقدار ETAG در عنوان درخواست If-Match استفاده کنید. اگر دستور PUT شما منجر به وضعیت وضعیت HTTPS 409 شود ، باید یک دستور تازه GET کنید تا یک ETAG و الگوی جدید را بدست آورید تا با PUT بعدی خود استفاده کنید.

شما می Remote Config با مجبور کردن الگوی Remote Config به شرح زیر ، Etag را دور بزنید و از If-Match: * محافظت کنید. الگوی اگر چندین مشتری در حال به روزرسانی الگوی Remote Config هستند. این نوع درگیری می تواند با چندین مشتری با استفاده از API یا به روزرسانی های متناقض از مشتریان API و کاربران کنسول Firebase رخ دهد.

برای راهنمایی در مورد مدیریت نسخه های الگوی Remote Config ، به الگوهای پیکربندی از راه دور و نسخه سازی مراجعه کنید.

،

این سند توضیح می دهد که چگونه می توانید به صورت برنامه ای مجموعه ای از پارامترهای فرمت JSON و شرایط شناخته شده به عنوان الگوی Remote Config را بخوانید و اصلاح کنید. این امر به شما امکان می دهد تا تغییرات الگوی را در پس زمینه ایجاد کنید که برنامه مشتری بتواند با استفاده از کتابخانه مشتری واکشی کند.

با استفاده از API Remote Config REST یا Admin SDK S که در این راهنما توضیح داده شده است ، می توانید مدیریت الگوی موجود در کنسول Firebase را دور بزنید تا مستقیماً تغییرات Remote Config در فرآیندهای شخصی خود ادغام کنید. به عنوان مثال ، با API های باکنه Remote Config ، می توانید:

  • برنامه ریزی به روزرسانی های Remote Config . با استفاده از تماس های API در رابطه با کار CRON ، می توانید مقادیر Remote Config در یک برنامه منظم تغییر دهید.
  • مقادیر پیکربندی واردات دسته ای به منظور انتقال کارآمد از سیستم اختصاصی خود به Firebase Remote Config .
  • از Remote Config با Cloud Functions for Firebase استفاده کنید و مقادیر موجود در برنامه خود را بر اساس رویدادهایی که در سمت سرور اتفاق می افتد تغییر دهید. به عنوان مثال ، می توانید از Remote Config برای تبلیغ یک ویژگی جدید در برنامه خود استفاده کنید و پس از تشخیص کافی افراد با ویژگی جدید ، آن تبلیغ را به طور خودکار خاموش کنید.

    نمودار نشان دهنده تعامل با پس زمینه پیکربندی از راه دور با ابزارها و سرورهای سفارشی

بخش های زیر این راهنما عملیاتی را که می توانید با API های باکنه Remote Config انجام دهید ، شرح می دهد. برای مرور برخی از کدهایی که این کارها را از طریق API REST انجام می دهد ، به یکی از این برنامه های نمونه مراجعه کنید:

پیکربندی از راه دور را با استفاده از Firebase Admin SDK اصلاح کنید

Admin SDK مجموعه ای از کتابخانه های سرور است که به شما امکان می دهد با Firebase از محیط های ممتاز تعامل داشته باشید. علاوه بر انجام به روزرسانی ها در Remote Config ، Admin SDK تولید و تأیید نشانه های Auth Firebase ، خواندن و نوشتن از Realtime Database و غیره را امکان پذیر می کند. برای کسب اطلاعات بیشتر در مورد پیش نیازها و راه اندازی Admin SDK ، به Firebase Admin SDK به سرور خود اضافه کنید .

در یک جریان Remote Config معمولی ، ممکن است الگوی فعلی را بدست آورید ، برخی از پارامترها یا گروههای پارامتر و شرایط را اصلاح کنید ، الگوی را تأیید کرده و سپس آن را منتشر کنید. قبل از برقراری تماس های API ، باید درخواست های SDK را مجاز کنید.

SDK را اولیه کنید و درخواست های API را مجاز کنید

هنگامی که Admin SDK را بدون هیچ پارامتر تنظیم می کنید ، SDK از اعتبار پیش فرض برنامه Google استفاده می کند و گزینه هایی را از متغیر محیط FIREBASE_CONFIG می خواند. اگر محتوای متغیر FIREBASE_CONFIG با یک { شروع شود ، به عنوان یک شیء JSON تجزیه می شود. در غیر این صورت SDK فرض می کند که رشته نام یک فایل 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);

الگوی پیکربندی از راه دور فعلی را دریافت کنید

هنگام کار با الگوهای Remote Config ، به خاطر داشته باشید که آنها نسخه شده اند و هر نسخه از زمان ایجاد خود تا زمانی که آن را با یک بروزرسانی جایگزین کنید ، دارای یک عمر محدود است. برای اطلاعات بیشتر به قالب ها و نسخه ها مراجعه کنید.

برای به دست آوردن نسخه فعال فعلی الگوی Remote Config با فرمت JSON می توانید از API های پس زمینه استفاده کنید.

پارامترها و مقادیر پارامتری که به طور خاص به عنوان انواع در آزمایش A/B Testing ایجاد شده اند در قالب های صادر شده گنجانده نشده اند.

برای به دست آوردن الگوی:

Node.js

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

جاوا

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" می توانید یک پارامتر برای کنترل نمایش اطلاعات فصلی اضافه کنید:

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

API به شما امکان می دهد پارامترهای جدید و گروه های پارامتر ایجاد کنید ، یا مقادیر پیش فرض ، مقادیر شرطی و توضیحات را تغییر دهید. در همه موارد ، شما باید پس از ایجاد اصلاحات ، الگوی را صریحاً منتشر کنید.

شرایط پیکربندی از راه دور را اصلاح کنید

می توانید به صورت برنامه ای شرایط Remote Config و مقادیر شرطی را اصلاح و اضافه کنید. به عنوان مثال ، برای اضافه کردن یک شرط جدید:

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

در همه موارد ، شما باید پس از ایجاد اصلاحات ، الگوی را صریحاً منتشر کنید.

API های باکد Remote Config شرایط و اپراتورهای مقایسه ای را ارائه می دهند که می توانید از آنها برای تغییر رفتار و ظاهر برنامه خود استفاده کنید. برای کسب اطلاعات بیشتر در مورد شرایط و اپراتورهای پشتیبانی شده برای این شرایط ، به مرجع بیان شرطی مراجعه کنید.

الگوی پیکربندی از راه دور را تأیید کنید

به صورت اختیاری ، می توانید به روزرسانی های خود را قبل از انتشار آنها تأیید کنید ، همانطور که نشان داده شده است:

Node.js

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

جاوا

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

این فرآیند اعتبار سنجی خطاهایی مانند کلیدهای تکراری برای پارامترها و شرایط ، نام وضعیت نامعتبر یا شرایط غیر موجود یا ETAG های اشتباه را بررسی می کند. به عنوان مثال ، درخواستی حاوی بیش از تعداد مجاز کلیدها - 2000 - پیام خطا را برمی گرداند ، Param count too large .

الگوی پیکربندی از راه دور را منتشر کنید

با بازیابی یک الگوی و تجدید نظر در مورد به روزرسانی های مورد نظر خود ، می توانید آن را منتشر کنید. انتشار یک الگوی همانطور که در این بخش توضیح داده شده است ، کل الگوی پیکربندی موجود را با پرونده به روز شده جایگزین می کند و الگوی فعال جدید نسخه شماره یک شماره بزرگتر از الگوی جایگزین شده را اختصاص می دهد.

در صورت لزوم ، می توانید از API REST استفاده کنید تا به نسخه قبلی برگردید . برای کاهش خطر خطاها در بروزرسانی ، می توانید قبل از انتشار اعتبارسنجی کنید .

شخصی سازی و شرایط Remote Config در الگوهای بارگیری شده گنجانده شده است ، بنابراین مهم است که هنگام تلاش برای انتشار به یک پروژه متفاوت ، از محدودیت های زیر آگاه باشید:

  • شخصی سازی ها را نمی توان از پروژه به پروژه دیگر وارد کرد.

    به عنوان مثال ، اگر شخصی سازی شده در پروژه خود فعال شده و یک الگوی را بارگیری و ویرایش کنید ، می توانید آن را به همان پروژه منتشر کنید ، اما نمی توانید آن را به یک پروژه متفاوت منتشر کنید ، مگر اینکه شخصی سازی را از این الگو حذف کنید.

  • شرایط را می توان از پروژه به پروژه دیگر وارد کرد ، اما توجه داشته باشید که هر مقدار مشروط خاص (مانند شناسه برنامه یا مخاطبان) باید قبل از انتشار در پروژه هدف وجود داشته باشد.

    به عنوان مثال ، اگر شما یک پارامتر Remote Config دارید که از شرایطی استفاده می کند که مقدار پلتفرم iOS را مشخص می کند ، این الگوی را می توان به یک پروژه دیگر منتشر کرد ، زیرا مقادیر پلتفرم برای هر پروژه یکسان است. با این حال ، اگر حاوی شرایطی باشد که به شناسه برنامه خاص یا مخاطبان کاربر متکی باشد که در پروژه هدف وجود ندارد ، اعتبار سنجی با شکست روبرو می شود.

  • اگر الگویی که شما قصد انتشار آن را دارید شامل شرایطی است که به Google Analytics متکی است ، Analytics باید در پروژه هدف فعال شود.

Node.js

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

جاوا

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

پیکربندی از راه دور را با استفاده از API REST اصلاح کنید

در این بخش قابلیت های اصلی API REST Remote Config REST در https://firebaseremoteconfig.googleapis.com شرح داده شده است. برای جزئیات کامل ، به مرجع API مراجعه کنید.

برای تأیید اعتبار و مجوز درخواست های API یک نشانه دسترسی پیدا کنید

پروژه های Firebase از حساب های خدمات Google پشتیبانی می کنند ، که می توانید از آنها برای تماس با API های سرور Firebase از سرور برنامه یا محیط مورد اعتماد استفاده کنید. اگر در حال تهیه کد به صورت محلی یا استقرار برنامه خود در محل هستید ، می توانید از اعتبارنامه های به دست آمده از طریق این حساب سرویس برای مجوز درخواست های سرور استفاده کنید.

برای تأیید اعتبار یک حساب کاربری و اجازه دسترسی به خدمات Firebase ، باید یک پرونده کلید خصوصی را با فرمت JSON تولید کنید.

برای تولید یک پرونده کلید خصوصی برای حساب خدمات خود:

  1. در کنسول Firebase ، تنظیمات > حساب‌های سرویس را باز کنید.

  2. بر روی تولید کلید خصوصی جدید کلیک کنید ، سپس با کلیک روی کلید Generate تأیید کنید.

  3. فایل JSON حاوی کلید را ایمن ذخیره کنید.

هنگام مجوز از طریق یک حساب کاربری ، شما دو گزینه برای ارائه اعتبار به درخواست خود دارید. می توانید متغیر محیط GOOGLE_APPLICATION_CREDENTIALS را تنظیم کنید ، یا می توانید صریحاً مسیر را به کلید حساب سرویس در کد منتقل کنید. گزینه اول امن تر است و به شدت توصیه می شود.

برای تنظیم متغیر محیط:

متغیر محیط زیست GOOGLE_APPLICATION_CREDENTIALS را در مسیر پرونده پرونده JSON که حاوی کلید حساب خدمات شما است ، تنظیم کنید. این متغیر فقط مربوط به جلسه پوسته فعلی شما است ، بنابراین اگر جلسه جدیدی را باز کردید ، دوباره متغیر را تنظیم کنید.

لینوکس یا مکوس

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

ویندوز

با PowerShell:

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

پس از اتمام مراحل فوق ، اعتبار پیش فرض برنامه (ADC) قادر به تعیین ضمنی اعتبار خود است و به شما امکان می دهد هنگام آزمایش یا اجرای در محیط های غیر Google از اعتبار حساب خدمات استفاده کنید.

برای بازیابی یک نشانه دسترسی کوتاه مدت OAUTH 2.0 از اعتبارنامه Firebase خود به همراه کتابخانه Google Auth خود استفاده کنید:

node.js

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

در این مثال ، کتابخانه مشتری Google API درخواست را با یک توکن وب JSON یا JWT تأیید می کند. برای اطلاعات بیشتر ، به توکن های وب JSON مراجعه کنید.

پایتون

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 می توانید از API های پس زمینه استفاده کنید.

پارامترها و مقادیر پارامتری که به طور خاص به عنوان انواع در آزمایش 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

این تماس API JSON زیر را به همراه یک هدر جداگانه که شامل یک ETAG است که برای درخواست بعدی استفاده می کنید ، برمی گرداند.

الگوی پیکربندی از راه دور را تأیید کنید

به صورت اختیاری ، می توانید قبل از انتشار آنها به روزرسانی های خود را تأیید کنید. اعتبار به روزرسانی های الگوی را با افزودن درخواست انتشار خود پارامتر URL اعتبار دهید ?validate_only=true . در پاسخ ، یک کد وضعیت 200 و یک ETAG به روز شده با پسوند -0 به این معنی است که به روزرسانی شما با موفقیت تأیید شده است. هر پاسخ غیر 200 نشان می دهد که داده های JSON حاوی خطاهایی است که باید قبل از انتشار آن را تصحیح کنید.

الگوی پیکربندی از راه دور را به روز کنید

با بازیابی یک الگوی و تجدید نظر در محتوای JSON با به روزرسانی های مورد نظر خود ، می توانید آن را منتشر کنید. انتشار یک الگوی همانطور که در این بخش توضیح داده شده است ، کل الگوی پیکربندی موجود را با پرونده به روز شده جایگزین می کند و الگوی فعال جدید نسخه شماره یک شماره بزرگتر از الگوی جایگزین شده را اختصاص می دهد.

در صورت لزوم ، می توانید از API REST استفاده کنید تا به نسخه قبلی برگردید . برای کاهش خطر خطاها در بروزرسانی ، می توانید قبل از انتشار اعتبارسنجی کنید .

شخصی سازی و شرایط 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 توسط این دستور اصلاح می شود و یک ETAG به روز شده در هدر پاسخ دستور PUT Next ارائه می شود.

شرایط پیکربندی از راه دور را اصلاح کنید

شما می توانید به صورت برنامه ای شرایط Remote Config و مقادیر شرطی را تغییر دهید. با استفاده از API REST ، شما باید قبل از انتشار الگوی ، الگوی را مستقیماً ویرایش کنید تا شرایط را اصلاح کنید.

{
  "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 همچنین برای اهداف کنترل نسخه ارائه شده است.

API های باکد Remote Config شرایط و اپراتورهای مقایسه ای را ارائه می دهند که می توانید از آنها برای تغییر رفتار و ظاهر برنامه خود استفاده کنید. برای کسب اطلاعات بیشتر در مورد شرایط و اپراتورهای پشتیبانی شده برای این شرایط ، به مرجع بیان شرطی مراجعه کنید.

کدهای خطای HTTP

کد وضعیت معنی
200 با موفقیت به روز شد
400 یک خطای اعتبار سنجی رخ داد. به عنوان مثال ، درخواستی حاوی بیش از تعداد مجاز کلیدها - 2000 - 400 (درخواست بد) را با پیام خطا بازگرداند ، Param count too large . همچنین ، این کد وضعیت HTTPS می تواند در این دو حالت رخ دهد:
  • یک خطای عدم تطابق نسخه رخ داده است زیرا مجموعه ای از مقادیر و شرایط از زمان آخرین بازیابی مقدار ETAG به روز شده است. برای حل این مسئله ، شما باید از یک دستور GET برای به دست آوردن یک الگوی تازه و مقدار ETAG استفاده کنید ، الگوی را به روز کنید و سپس با استفاده از آن الگوی و مقدار ETAG تازه ارسال کنید.
  • یک دستور PUT (درخواست الگوی Remote Config به روزرسانی) بدون مشخص کردن یک هدر If-Match ساخته شده است.
401 یک خطای مجوز رخ داده است (هیچ نشانه دسترسی ارائه نشده است یا API Remote Config REST در کنسول توسعه دهنده ابر به پروژه شما اضافه نشده است)
403 خطای احراز هویت رخ داد (نشانه دسترسی اشتباه ارائه شده است)
500 یک خطای داخلی رخ داد. اگر این خطا رخ داد ، بلیط پشتیبانی Firebase را ثبت کنید

کد وضعیت 200 به این معنی است که الگوی Remote Config (پارامترها ، مقادیر و شرایط پروژه) به روز شده است و اکنون در دسترس برنامه هایی است که از این پروژه استفاده می کنند. سایر کدهای وضعیت نشان می دهد که الگوی Remote Config که قبلاً وجود داشته است ، هنوز در حال اجرا است.

پس از ارسال به روزرسانی به الگوی خود ، به کنسول Firebase بروید تا تأیید کنید که تغییرات شما مطابق انتظار ظاهر می شود. این امر بسیار مهم است زیرا ترتیب شرایط بر نحوه ارزیابی آنها تأثیر می گذارد (اولین شرایطی که true ارزیابی می کند ، تأثیر می گذارد).

استفاده از ETAG و به روزرسانی های اجباری

API Remote Config REST از یک برچسب Entity (ETAG) برای جلوگیری از شرایط مسابقه و به روزرسانی های همپوشانی منابع استفاده می کند. برای کسب اطلاعات بیشتر در مورد ETAG ، به Etag - Http مراجعه کنید.

برای API REST ، Google توصیه می کند ETAG را که توسط جدیدترین دستور GET ارائه شده است ، ذخیره کنید و هنگام صدور دستورات PUT ، از آن مقدار ETAG در عنوان درخواست If-Match استفاده کنید. اگر دستور PUT شما منجر به وضعیت وضعیت HTTPS 409 شود ، باید یک دستور تازه GET کنید تا یک ETAG و الگوی جدید را بدست آورید تا با PUT بعدی خود استفاده کنید.

شما می Remote Config با مجبور کردن الگوی Remote Config به شرح زیر ، Etag را دور بزنید و از If-Match: * محافظت کنید. الگوی اگر چندین مشتری در حال به روزرسانی الگوی Remote Config هستند. این نوع درگیری می تواند با چندین مشتری با استفاده از API یا به روزرسانی های متناقض از مشتریان API و کاربران کنسول Firebase رخ دهد.

برای راهنمایی در مورد مدیریت نسخه های الگوی Remote Config ، به الگوهای پیکربندی از راه دور و نسخه سازی مراجعه کنید.