Управление шаблонами и версиями клиентов Remote Config

Выберите тип шаблона: Клиентские шаблоны Серверные шаблоны


Шаблоны Remote Config – это наборы параметров и условий в формате JSON, созданные для вашего проекта Firebase. Клиентские шаблоны передают конфигурации экземплярам приложений, в которых реализованы клиентские SDK Firebase для Remote Config, включая приложения Apple, Android, Web, Flutter, Unity и C++.

Вы можете использовать консоль Firebase, чтобы изменять шаблон клиента и управлять им. Чтобы посмотреть содержимое шаблона в графическом формате, выберите DevOps & Engagement (DevOps и вовлечение) > Remote Config (Удаленная конфигурация) и откройте страницу Parameters (Параметры) или Conditions (Условия).

Вы также можете использовать REST API Remote Config и Admin SDK или CLI Firebase, чтобы изменять шаблон клиента и управлять им.

Пример файла шаблона клиента:

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

В консоли Firebase (DevOps и вовлечение > Remote Config) можно выполнять следующие задачи по управлению версиями:

  • Список всех сохраненных версий шаблона
  • Как получить определенную версию
  • Как выполнить откат до определенной версии клиента
  • Удалите Remote Config шаблонов на странице История изменений.

Вы также можете просматривать список шаблонов, получать и откатывать их с помощью CLI Firebase и API бэкенда Remote Config.

Для каждого типа шаблонов можно сохранить не более 300 версий (300 клиентских и 300 серверных шаблонов), включая номера версий удаленных шаблонов. Если за время существования проекта вы опубликуете более 300 версий шаблонов одного типа, самые ранние версии будут удалены, чтобы сохранить максимальное количество версий этого типа (300).

При каждом обновлении параметров Remote Config создает новую версию шаблона Remote Config и сохраняет предыдущий шаблон как версию, которую вы можете получить или к которой можете вернуться при необходимости. Номера версий увеличиваются последовательно, начиная с исходного значения, которое хранится в Remote Config. Все шаблоны содержат поле version, в котором указаны метаданные о конкретной версии.

При необходимости вы можете удалить шаблоны Remote Config на странице DevOps & Engagement (DevOps и вовлечение) > Remote Config (Удаленная конфигурация) > Change history (История изменений) в консоли Firebase.

Управление версиями шаблона "Remote Config"

В этом разделе описывается, как управлять версиями шаблона Remote Config.

Подробные сведения о том, как создавать, изменять и сохранять шаблоны программным способом, приведены в статье Как программно изменять Remote Config.

Список всех сохраненных версий шаблона Remote Config

Вы можете получить список всех сохраненных версий шаблона Remote Config. Вот как это сделать:

Консоль Firebase

  1. В консоли Firebase перейдите на страницу DevOps & Engagement (DevOps и взаимодействие) > Remote Config (Удаленная конфигурация) > Parameters (Параметры).

  2. Нажмите на значок часов в правом верхнем углу.

    Откроется страница История изменений, на которой в меню справа перечислены все сохраненные версии шаблона.

    Для каждой сохраненной версии указывается, как были внесены изменения: в консоли Firebase, с помощью REST API, в результате отката или принудительного сохранения шаблона.

Firebase CLI

firebase remoteconfig:versions:list

Чтобы ограничить количество возвращаемых версий, используйте параметр --limit. Чтобы получить все версии, передайте значение 0.

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

Java

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

REST

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

Список шаблонов содержит метаданные для всех сохраненных версий, включая время обновления, пользователя, который его выполнил, и способ обновления. Пример элемента version:

{
  "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. Чтобы получить сохраненную версию шаблона, выполните следующие действия:

Консоль Firebase

  1. В консоли Firebase перейдите на страницу DevOps & Engagement (DevOps и вовлечение) > Remote Config (Удаленная конфигурация) > Change history (История изменений).

  2. По умолчанию на странице показывается текущий активный шаблон. Чтобы посмотреть другую версию, выберите ее на панели подробностей справа.

  3. Чтобы посмотреть подробные различия между активным шаблоном и любой другой сохраненной версией, наведите указатель мыши на контекстное меню для любой невыбранной версии и выберите Сравнить с выбранной версией.

Firebase CLI

firebase remoteconfig:get -v VERSION_NUMBER

При необходимости вы можете записать выходные данные в указанный файл с помощью -o, FILENAME.

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

Java

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

REST

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

Параметр URL ?version_number действителен только для операций GET. Его нельзя использовать для указания номеров версий при обновлении. Аналогичный GET-запрос без параметра ?version_number вернет текущий активный шаблон.

Как выполнить откат к определенной сохраненной версии шаблона Remote Config

Вы можете вернуться к любой сохраненной версии шаблона. Чтобы выполнить откат шаблона, сделайте следующее:

Консоль Firebase

  1. В консоли Firebase перейдите на страницу DevOps & Engagement (DevOps и вовлечение) > Remote Config (Удаленная конфигурация) > Change history (История изменений).

  2. Найдите кнопку в правом верхнем углу страницы, чтобы посмотреть предыдущие версии шаблона, к которым можно вернуться.

  3. Нажмите и подтвердите это действие, только если вы уверены, что хотите вернуться к этой версии и немедленно использовать эти значения для всех приложений и пользователей.

Firebase CLI

firebase remoteconfig:rollback -v VERSION_NUMBER

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

Java

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

REST

Чтобы выполнить откат к сохраненному шаблону Remote Config, отправьте запрос HTTP POST с пользовательским методом :rollback и укажите в теле запроса версию, которую нужно применить. Пример:

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

Ответ содержит контент активного сохраненного шаблона с метаданными новой версии.

Обратите внимание, что при откате создается новая версия с номером. Например, если вы откатитесь с версии 10 до версии 6, будет создана копия версии 6, которая будет отличаться от оригинала только номером версии (11). Исходная версия 6 по-прежнему хранится, если не истек срок ее действия, а версия 11 становится активным шаблоном.

Удалить шаблон Remote Config

Шаблоны Remote Config можно удалить в консоли Firebase. Чтобы удалить шаблон, выполните следующие действия:

  1. В консоли Firebase перейдите на страницу DevOps & Engagement (DevOps и взаимодействие) > Remote Config (Удаленная конфигурация) > Parameters (Параметры).

  2. Нажмите История изменений.

  3. Перейдите к шаблону, который нужно удалить, нажмите Ещё и выберите Удалить.

  4. Подтвердите удаление, нажав Удалить.

Скачайте и опубликуйте Remote Config шаблонов

Скачивайте и публикуйте шаблоны Remote Config, чтобы интегрировать их в системы контроля версий и сборки, автоматизировать обновление конфигураций и синхронизировать параметры и значения в нескольких проектах.

Вы можете скачать активный шаблон Remote Config программно или в консоли Firebase. Затем вы можете обновить экспортированный JSON-файл и опубликовать его в том же проекте или опубликовать его в новом или существующем проекте.

Например, у вас может быть несколько проектов, представляющих разные этапы жизненного цикла разработки ПО, такие как разработка, тестирование, промежуточная и рабочая среды. В этом случае вы можете перенести полностью протестированный шаблон из тестовой среды в рабочую, скачав его из тестового проекта и опубликовав в рабочем.

Этот метод также можно использовать для переноса конфигураций из одного проекта в другой или для заполнения нового проекта параметрами и значениями из существующего проекта.

Параметры и значения параметров, созданные специально как варианты в эксперименте A/B Testing, не включаются в экспортируемые шаблоны.

Чтобы экспортировать и импортировать шаблоны Remote Config, выполните следующие действия:

  1. Скачайте текущий шаблон Remote Config.
  2. Проверьте шаблон Remote Config.
  3. Опубликуйте шаблон Remote Config.

Скачайте текущий шаблон Remote Config

Чтобы скачать активный шаблон Remote Config в формате JSON, используйте следующий код:

Консоль Firebase

  1. В консоли Firebase перейдите на страницу DevOps & Engagement (DevOps и вовлечение) > Remote Config (Удаленная конфигурация) > Parameters or Conditions (Параметры или условия).

  2. Откройте меню и выберите Скачать текущий файл конфигурации.

  3. Когда появится запрос, нажмите Скачать файл конфигурации, выберите место для сохранения файла и нажмите Сохранить.

Firebase CLI

firebase remoteconfig:get -o filename

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

Java

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

REST

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

Эта команда выводит полезную нагрузку JSON в один файл, а заголовки (включая ETag) – в отдельный файл headers.

Проверка шаблона Remote Config

Вы можете проверить изменения в шаблоне перед публикацией с помощью Firebase Admin SDK или REST API. Шаблоны также проверяются, когда вы пытаетесь опубликовать их из CLI Firebase или консоли 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);
      });
}

Java

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

REST

Чтобы проверить изменения в шаблоне, добавьте параметр 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 и опубликуете его, параметр будет удален с сервера и станет недоступен для клиентов.

После публикации изменения параметров и значений сразу же становятся доступны приложениям и пользователям. При необходимости вы можете выполнить откат к предыдущей версии.

Чтобы опубликовать шаблон, используйте следующие команды:

Консоль Firebase

  1. В консоли Firebase перейдите на страницу DevOps & Engagement (DevOps и вовлечение) > Remote Config (Удаленная конфигурация) > Parameters or Conditions (Параметры или условия).

  2. Откройте меню и выберите Опубликовать из файла.

  3. В окне подтверждения нажмите Обзор, выберите файл Remote Config, который хотите опубликовать, и нажмите Выбрать.

  4. Firebase проверит файл. Если проверка прошла успешно, нажмите Опубликовать, чтобы конфигурация сразу стала доступна для приложений и пользователей.

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

Java

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

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 можно указать контент, используя символ @, за которым следует название файла.

В скачанные шаблоны включены персонализации и условия Remote Config, поэтому при попытке опубликовать их в другом проекте важно учитывать следующие ограничения:

  • Персонализации нельзя импортировать из одного проекта в другой.

    Например, если в вашем проекте включена персонализация, а вы скачали и отредактировали шаблон, то сможете опубликовать его в том же проекте. Однако вы не сможете опубликовать его в другом проекте, пока не удалите персонализацию из шаблона.

  • Условия можно импортировать из одного проекта в другой, но учтите, что все значения условий (например, идентификаторы приложений или аудитории) должны существовать в целевом проекте до публикации.

    Например, если у вас есть параметр Remote Config, который использует условие, указывающее значение платформы iOS, шаблон можно опубликовать в другом проекте, поскольку значения платформы одинаковы для любого проекта. Однако если в нем есть условие, которое зависит от определенного идентификатора приложения или аудитории пользователей, которых нет в целевом проекте, проверка не будет пройдена.

  • Если шаблон, который вы планируете опубликовать, содержит условия, зависящие от Google Analytics, в целевом проекте должен быть включен Analytics.

Скачать шаблоны по умолчанию для Remote Config

Поскольку приложение не всегда подключено к интернету, необходимо настроить клиентские значения по умолчанию для всех параметров Remote Config. Также рекомендуется периодически синхронизировать значения по умолчанию в клиенте приложения и значения параметров по умолчанию в серверной части Remote Config, поскольку со временем они могут меняться.

Как описано в ссылках для конкретных платформ в конце этого раздела, вы можете вручную задать эти значения по умолчанию в своем приложении или упростить этот процесс, скачав файлы, содержащие только пары "ключ-значение" для всех параметров и их значения по умолчанию в активном шаблоне Remote Config. Затем вы можете включить этот файл в свой проект и настроить приложение для импорта этих значений.

Вы можете скачать эти файлы в формате XML для приложений Android, в формате списка свойств (plist) для приложений iOS и в формате JSON для веб-приложений.

Периодически скачивайте значения по умолчанию для Remote Config перед выпуском новых версий приложения, чтобы обеспечить синхронизацию приложения и серверной части Remote Config.

Чтобы скачать файл, содержащий значения по умолчанию для шаблона, выполните следующие действия:

REST

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

В качестве значения format укажите XML, PLIST или JSON в зависимости от того, в каком формате вы хотите скачать файл.

Консоль Firebase

  1. В консоли Firebase перейдите на страницу DevOps & Engagement (DevOps и взаимодействие) > Remote Config (Удаленная конфигурация) > Parameters (Параметры).

  2. Откройте меню и выберите Скачать значения по умолчанию.

  3. В появившемся окне выберите нужный формат файла и нажмите Скачать файл.

Подробную информацию об импорте значений по умолчанию Remote Config в приложение можно найти в следующих статьях: