欢迎参加我们将于 2022 年 10 月 18 日举办的 Firebase 峰会(线上线下同时进行),了解 Firebase 如何帮助您加快应用开发速度、满怀信心地发布应用,并在之后根据需要轻松地扩大应用规模。立即报名

قالب های پیکربندی از راه دور و نسخه سازی

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

در اینجا یک نمونه از یک فایل قالب آورده شده است:

  {
    "conditions": [
      {
        "name": "ios",
        "expression": "device.os == 'ios'"
      }
    ],
    "parameters": {
      "welcome_message": {
        "defaultValue": {
          "value": "Welcome to this sample app"
        },
        "conditionalValues": {
          "ios": {
            "value": "Welcome to this sample iOS app"
          }
        }
      },
      "welcome_message_caps": {
        "defaultValue": {
          "value": "false"
        }
      },
      "header_text": {
        "defaultValue": {
          "useInAppDefault": true
        }
      }
    },
    "version": {
      "versionNumber": "28",
      "updateTime": "2020-05-14T18:39:38.994Z",
      "updateUser": {
        "email": "user@google.com"
      },
      "updateOrigin": "CONSOLE",
      "updateType": "INCREMENTAL_UPDATE"
    }
  }

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

با کنسول Firebase، Firebase CLI، یا Remote Config Backend API ها، می توانید این وظایف مدیریت نسخه را انجام دهید:

  • لیست تمام نسخه های قالب ذخیره شده
  • یک نسخه خاص را بازیابی کنید
  • به یک نسخه خاص برگردید

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

نسخه های قالب Remote Config را مدیریت کنید

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

تمام نسخه های ذخیره شده قالب Remote Config را فهرست کنید

می توانید لیستی از تمام نسخه های ذخیره شده قالب Remote Config را بازیابی کنید. مثلا:

Node.js

function listAllVersions() {
  admin.remoteConfig().listVersions()
    .then((listVersionsResult) => {
      console.log("Successfully fetched the list of versions");
      listVersionsResult.versions.forEach((version) => {
        console.log('version', JSON.stringify(version));
      });
    })
    .catch((error) => {
      console.log(error);
    });
}

جاوا

ListVersionsPage page = FirebaseRemoteConfig.getInstance().listVersionsAsync().get();
while (page != null) {
  for (Version version : page.getValues()) {
    System.out.println("Version: " + version.getVersionNumber());
  }
  page = page.getNextPage();
}

// Iterate through all versions. This will still retrieve versions in batches.
page = FirebaseRemoteConfig.getInstance().listVersionsAsync().get();
for (Version version : page.iterateAll()) {
  System.out.println("Version: " + version.getVersionNumber());
}

باقی مانده

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

کنسول Firebase

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

جزئیات نمایش داده شده برای هر نسخه ذخیره شده شامل اطلاعاتی در مورد این است که آیا تغییرات از کنسول، با REST API، از یک بازگشت، یا تغییرات تدریجی ناشی از ذخیره اجباری الگو بوده است.

Firebase CLI

firebase remoteconfig:versions:list

از گزینه --limit برای محدود کردن تعداد نسخه های بازگردانده شده استفاده کنید. برای واکشی همه نسخه‌ها، «0» را پاس کنید.

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

{
  "versions": [{
    "version_number": "6",
    "update_time": "2022-05-12T02:38:54Z",
    "update_user": {
      "name": "Jane Smith",
      "email": "jane@developer.org",
      "imageUrl": "https://lh3.googleusercontent.com/a-/..."
    },
    "description": "One small change on the console",
    "origin": "CONSOLE",
    "update_type": "INCREMENTAL_UPDATE"
  }]

یک نسخه خاص از الگوی Remote Config را بازیابی کنید

می توانید هر نسخه ذخیره شده خاصی از الگوی Remote Config را بازیابی کنید. مثلا:

Node.js

getTemplate() را بدون هیچ گونه آرگومان برای بازیابی آخرین نسخه قالب یا برای بازیابی نسخه خاصی از getTemplateAtVersion() استفاده کنید.

// Get template version: 6
admin.remoteConfig().getTemplateAtVersion('6')
  .then((template) => {
    console.log("Successfully fetched the template with ETag: " + template.etag);
  })
  .catch((error) => {
    console.log(error);
  });

جاوا

Template template = FirebaseRemoteConfig.getInstance().getTemplateAtVersionAsync(versionNumber).get();
// See the ETag of the fetched template.
System.out.println("Successfully fetched the template with ETag: " + template.getETag());

باقی مانده

curl --compressed -D headers -H "Authorization: Bearer <var>token</var>" -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/<var>my-project-id</var>/remoteConfig?version_number=6

پارامتر URL ?version_number فقط برای عملیات GET معتبر است. شما نمی توانید از آن برای تعیین شماره نسخه برای به روز رسانی استفاده کنید. یک درخواست دریافت مشابه بدون پارامتر ?version_number می تواند الگوی فعال فعلی را بازیابی کند.

کنسول Firebase

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

می‌توانید با نگه داشتن ماوس بر روی منوی زمینه برای هر نسخه انتخاب‌نشده و انتخاب مقایسه با نسخه انتخاب‌شده، تفاوت دقیق نسخه انتخاب‌شده فعلی و هر نسخه ذخیره‌شده دیگری را مشاهده کنید.

Firebase CLI

firebase remoteconfig:get -v VERSION_NUMBER

به صورت اختیاری، می توانید خروجی را با -o, FILENAME در یک فایل مشخص شده بنویسید.

به یک نسخه ذخیره شده خاص از الگوی Remote Config برگردید

می توانید به هر نسخه ذخیره شده الگو برگردید. مثلا:

Node.js

// Roll back to template version: 6
admin.remoteConfig().rollback('6')
  .then((template) => {
    console.log("Successfully rolled back to template version 6.");
    console.log("New ETag: " + template.etag);
  })
  .catch((error) => {
    console.log('Error trying to rollback:', e);
  })

جاوا

try {
  Template template = FirebaseRemoteConfig.getInstance().rollbackAsync(versionNumber).get();
  System.out.println("Successfully rolled back to template version: " + versionNumber);
  System.out.println("New ETag: " + template.getETag());
} catch (ExecutionException e) {
  if (e.getCause() instanceof FirebaseRemoteConfigException) {
    FirebaseRemoteConfigException rcError = (FirebaseRemoteConfigException) e.getCause();
    System.out.println("Error trying to rollback template.");
    System.out.println(rcError.getMessage());
  }
}

باقی مانده

برای بازگشت به یک الگوی Remote Config ذخیره شده، یک HTTP POST با روش سفارشی :rollback و در متن درخواست، نسخه خاصی را که باید اعمال شود، صادر کنید. مثلا:

curl --compressed -D headers -H "Authorization: Bearer <var>token</var>" -H "Content-Type: application/json" -X POST https://firebaseremoteconfig.googleapis.com/v1/projects/<var>my-project-id</var>/remoteConfig:rollback -d '{"version_number": 6}'

پاسخ حاوی محتویات قالب ذخیره شده فعال است، همراه با ابرداده نسخه جدید آن.

کنسول Firebase

برای نسخه‌های قالب قبلی واجد شرایط برای بازگشت، یک دکمه گزینه برای بازگشت به آن نسخه در سمت راست بالای صفحه تاریخچه تغییر نمایش داده می‌شود. فقط اگر مطمئن هستید که می‌خواهید به آن نسخه برگردید و فوراً از آن مقادیر برای همه برنامه‌ها و کاربران استفاده کنید، روی آن کلیک کرده و تأیید کنید.

Firebase CLI

firebase remoteconfig:rollback -v VERSION_NUMBER

توجه داشته باشید که این عملیات بازگشت به طور موثر یک نسخه شماره گذاری شده جدید ایجاد می کند. به عنوان مثال، بازگشت از نسخه 10 به نسخه 6 به طور موثر یک نسخه جدید از نسخه 6 ایجاد می کند، که تنها با نسخه اصلی تفاوت دارد که شماره نسخه آن 11 است. نسخه اصلی 6 هنوز ذخیره می شود، با این فرض که منقضی نشده است، و نسخه 11 به قالب فعال تبدیل می شود.

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

قالب‌های Remote Config را دانلود و منتشر کنید تا آنها را در سیستم‌های کنترل منبع خود ادغام کنید، به‌روزرسانی‌های پیکربندی را خودکار کنید، و پارامترها و مقادیر را در چندین پروژه همگام کنید.

می توانید الگوی Remote Config فعال کنونی را به صورت برنامه نویسی یا از کنسول Firebase دانلود کنید. سپس می توانید فایل JSON صادر شده را به روز کنید و آن را در همان پروژه منتشر کنید، یا آن را در یک پروژه جدید یا موجود منتشر کنید.

فرض کنید چندین پروژه دارید که نشان دهنده مراحل مختلف چرخه عمر توسعه نرم افزار شما هستند، مانند محیط های توسعه، آزمایش، مرحله بندی و تولید. در این صورت، می توانید یک قالب کاملاً آزمایش شده را از محیط صحنه سازی خود به محیط تولید خود با دانلود آن از پروژه صحنه سازی خود و انتشار آن در پروژه تولید خود تبلیغ کنید.

همچنین می‌توانید از این روش برای انتقال پیکربندی‌ها از یک پروژه به پروژه دیگر یا پر کردن یک پروژه جدید با پارامترها و مقادیر از یک پروژه دیگر استفاده کنید.

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

برای صادرات و وارد کردن الگوهای Remote Config:

  1. قالب کنونی Remote Config Config را دانلود کنید .
  2. الگوی Remote Config را اعتبارسنجی کنید .
  3. قالب Remote Config را منتشر کنید .

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

می توانید قالب فعلی و فعال Remote Config را به صورت برنامه ریزی شده یا با استفاده از کنسول Firebase دانلود کنید.

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

Node.js

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

جاوا

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

باقی مانده

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) را به یک فایل headers جداگانه خروجی می دهد.

کنسول Firebase

  1. از تب Remote Config Parameters یا Conditions ، منوی را باز کرده و دانلود فایل پیکربندی فعلی را انتخاب کنید.
  2. هنگامی که از شما خواسته شد، روی دانلود فایل پیکربندی کلیک کنید، مکانی را که می‌خواهید فایل را در آن ذخیره کنید انتخاب کنید، سپس روی ذخیره کلیک کنید.

Firebase CLI

firebase remoteconfig:get -o filename

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

می‌توانید به‌روزرسانی‌های الگوی خود را قبل از انتشار با استفاده از Firebase Admin SDK یا REST API تأیید کنید. همچنین زمانی که می‌خواهید از Firebase CLI یا Firebase کنسول منتشر کنید، الگوها اعتبارسنجی می‌شوند.

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

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

باقی مانده

اعتبارسنجی به‌روزرسانی‌های الگو را با افزودن پارامتر URL ?validate_only=true به درخواست انتشار شما:

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?validate_only=true -d @filename

اگر الگوی شما با موفقیت تأیید شد، دستور curl الگوی JSON را که ارسال کرده‌اید برمی‌گرداند و در فایل headers ذخیره‌شده، یک وضعیت HTTP/2 200 و یک ETag به‌روز شده با پسوند -0 پیدا خواهید کرد. اگر الگوی شما اعتبارسنجی نشده است، خطای اعتبارسنجی را در پاسخ JSON دریافت خواهید کرد و فایل headers شما حاوی پاسخی غیر 200 (و بدون ETag) خواهد بود.

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

پس از دانلود یک الگو، ایجاد هرگونه تغییر مورد نیاز در محتوای JSON و اعتبارسنجی آن، می توانید آن را در یک پروژه منتشر کنید.

انتشار یک الگو، کل قالب پیکربندی موجود را با فایل به روز شده جایگزین می کند و نسخه قالب را یک به یک افزایش می دهد. از آنجایی که کل پیکربندی جایگزین شده است، اگر پارامتری را از فایل JSON حذف کنید و آن را منتشر کنید، پارامتر از سرور حذف می‌شود و دیگر در دسترس مشتریان نیست.

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

برای انتشار قالب خود از دستورات زیر استفاده کنید:

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

باقی مانده

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 ، می توانید با استفاده از کاراکتر "@" و به دنبال آن نام فایل، محتوا را مشخص کنید.

کنسول Firebase

  1. از تب Remote Config Parameters یا Conditions ، منوی را باز کرده و گزینه Publish from a file را انتخاب کنید.
  2. هنگامی که از شما خواسته شد، روی Browse کلیک کنید، به آن بروید و فایل Remote Config را که می خواهید منتشر کنید انتخاب کنید، سپس روی Select کلیک کنید.
  3. فایل تأیید می‌شود و در صورت موفقیت‌آمیز، می‌توانید روی انتشار کلیک کنید تا پیکربندی فوراً در دسترس برنامه‌ها و کاربران خود قرار گیرد.

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

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

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

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

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

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

دانلود پیش فرض قالب Remote Config

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

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

می‌توانید این فایل‌ها را با فرمت XML برای برنامه‌های اندروید، فرمت فهرست اموال (plist) برای برنامه‌های iOS و JSON برای برنامه‌های وب دانلود کنید.

توصیه می‌کنیم پیش‌فرض‌های Remote Config را به‌طور دوره‌ای قبل از انتشار برنامه جدید دانلود کنید تا مطمئن شوید که برنامه شما و Remote Config با هم همگام هستند.

برای دانلود فایلی که دارای پیش فرض های قالب است:

باقی مانده

curl --compressed -D headers -H "Authorization: Bearer token -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig:downloadDefaults?format=file_format'

بسته به فرمت فایلی که می خواهید دانلود کنید، از XML ، PLIST یا JSON به عنوان مقدار format استفاده کنید.

کنسول Firebase

  1. در برگه پارامترها ، منوی را باز کنید و مقادیر پیش‌فرض را دانلود کنید.
  2. وقتی از شما خواسته شد، روی دکمه رادیویی مطابق با فرمت فایلی که می‌خواهید دانلود کنید کلیک کنید و سپس روی دانلود فایل کلیک کنید.

برای اطلاعات بیشتر در مورد وارد کردن مقادیر پیش‌فرض Remote Config به برنامه خود، ببینید: