Шаблоны Remote Config — это наборы параметров и условий в формате JSON, которые вы создали для своего проекта Firebase. Вы можете создавать шаблоны клиентов , из которых ваше приложение извлекает значения, и шаблоны серверов , из которых клиенты сервера могут получать значения.
В этом разделе обсуждаются шаблоны клиентов. Чтобы узнать о шаблонах, специфичных для сервера, нажмите Шаблоны серверов .Вы изменяете шаблон и управляете им с помощью консоли Firebase , которая отображает содержимое шаблона в графическом формате вВкладки «Параметры» и «Условия» .
Вы также можете использовать REST API Remote Config и Admin SDK или интерфейс командной строки 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 :
- Список всех сохраненных версий шаблона
- Получить конкретную версию
- Откат к определенной версии клиента
- Удаление шаблонов Remote Config со страницы истории изменений .
Вы также можете перечислять шаблоны, получать шаблоны и откатывать шаблоны с помощью интерфейса командной строки Firebase и API-интерфейсов Remote Config .
Общий лимит составляет 300 сохраненных версий для каждого типа шаблона (300 клиентских шаблонов и 300 серверных шаблонов), включая сохраненные номера версий для удаленных шаблонов. Если вы публикуете более 300 версий шаблонов каждого типа в течение срока существования проекта, самые ранние версии удаляются, оставляя максимум 300 версий этого типа.
Каждый раз, когда вы обновляете параметры, Remote Config создает новую версию шаблона Remote Config и сохраняет предыдущий шаблон как версию, которую вы можете получить или вернуться к ней при необходимости. Номера версий увеличиваются последовательно от начального значения, сохраненного в Remote Config . Все шаблоны включают поле version
, как показано, содержащее метаданные об этой конкретной версии.
При необходимости вы можете удалить шаблоны Remote Config изИстория измененийна консоли Remote Config .
Управление версиями шаблона Remote Config
В этом разделе описывается, как управлять версиями шаблона Remote Config .
Дополнительные сведения о том, как программно создавать, изменять и сохранять шаблоны, см. в разделе Программное изменение Remote Config .
Список всех сохраненных версий шаблона Remote Config .
Вы можете получить список всех сохраненных версий шаблона Remote Config . Для этого:
Консоль Firebase
На вкладке «Параметры » выберите значок «часы», отображаемый в правом верхнем углу. Откроется страница истории изменений со списком всех сохраненных версий шаблона в меню справа.
Подробности, отображаемые для каждой сохраненной версии, включают информацию о том, произошли ли изменения с помощью консоли, с помощью REST API, в результате отката или были ли они дополнительными изменениями в результате принудительного сохранения шаблона.
Интерфейс командной строки Firebase
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);
});
}
Ява
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
Список шаблонов включает метаданные для всех сохраненных версий, включая время обновления, пользователя, который его сделал, и способ его создания. Вот пример элемента версии:
```json
{
"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
По умолчанию в области сведений на вкладке История изменений отображается текущий активный шаблон. Чтобы просмотреть детали другой версии в списке, выберите ее в правом меню.
Вы можете просмотреть подробную разницу между выбранной в данный момент версией и любой другой сохраненной версией, наведя указатель мыши на контекстное меню любой невыбранной версии и выбрав «Сравнить с выбранной версией».
Интерфейс командной строки Firebase
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);
});
Ява
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
будет извлекать текущий активный шаблон.
Откат к определенной сохраненной версии шаблона Remote Config .
Вы можете вернуться к любой сохраненной версии шаблона. Чтобы откатить шаблон:
Консоль Firebase
Для предыдущих версий шаблона, для которых возможен откат, в правом верхнем углу страницы истории изменений отображается кнопка выбора для возврата к этой версии. Нажмите и подтвердите это, только если вы уверены, что хотите вернуться к этой версии и немедленно использовать эти значения для всех приложений и пользователей.
Интерфейс командной строки Firebase
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);
})
Ява
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}'
Ответ содержит содержимое активного сохраненного шаблона с метаданными его новой версии.
Обратите внимание, что эта операция отката фактически создает новую пронумерованную версию. Например, откат с версии 10 на версию 6 фактически создает новую копию версии 6, отличающуюся от оригинала только тем, что ее номер версии равен 11. Исходная версия 6 все еще сохраняется, если срок ее действия еще не истек, и версия 11 становится активным шаблоном.
Удаление шаблона Remote Config
Вы можете удалить шаблоны Remote Config из консоли Firebase . Чтобы удалить шаблон Remote Config :
1. На странице «Параметры Remote Config нажмите изменений» .Переключитесь на шаблон, который хотите удалить, нажмите
More , затем выберите «Удалить» .Когда будет предложено подтвердить удаление, нажмите «Удалить» .
Загрузите и опубликуйте шаблоны Remote Config
Загрузите и опубликуйте шаблоны Remote Config , чтобы интегрировать их в свои системы управления исходным кодом и системы сборки, автоматизировать обновления конфигурации и синхронизировать параметры и значения в нескольких проектах.
Вы можете скачать активный в данный момент шаблон Remote Configпрограммно илиЗатем вы можете обновить экспортированный файл JSON и опубликовать его в том же проекте или опубликовать в новом или существующем проекте.
Допустим, у вас есть несколько проектов, которые представляют разные этапы жизненного цикла разработки программного обеспечения, например, среды разработки, тестирования, промежуточной подготовки и производства. В этом случае вы можете перенести полностью протестированный шаблон из промежуточной среды в рабочую среду, загрузив его из промежуточного проекта и опубликовав в рабочем проекте.
Вы также можете использовать этот метод для переноса конфигураций из одного проекта в другой или для заполнения нового проекта параметрами и значениями из существующего проекта.
Параметры и значения параметров, созданные специально как варианты в эксперименте A/B Testing не включаются в экспортированные шаблоны.
Чтобы экспортировать и импортировать шаблоны Remote Config :
- Загрузите текущий шаблон конфигурации Remote Config .
- Проверьте шаблон Remote Config .
- Опубликуйте шаблон Remote Config .
Загрузите текущий шаблон удаленной конфигурации.
Используйте следующее, чтобы загрузить активный шаблон Remote Config в формате JSON:
Консоль Firebase
- На вкладке «Параметры Remote Config или «Условия» откройте меню и выберите «Загрузить текущий файл конфигурации» .
- При появлении запроса нажмите «Загрузить файл конфигурации» , выберите место, где вы хотите сохранить файл, затем нажмите «Сохранить» .
Интерфейс командной строки Firebase
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); }); }
Ява
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
Эта команда выводит полезные данные JSON в один файл, а заголовки (включая ETag) — в отдельный файл headers
.
Проверка шаблона удаленной конфигурации
Вы можете проверить обновления шаблонов перед их публикацией с помощью Firebase Admin SDK или REST API. Шаблоны также проверяются при попытке публикации из интерфейса командной строки 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); }); }
Ява
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 и опубликуете его, параметр будет удален с сервера и больше не будет доступен клиентам.
После публикации изменения параметров и значений сразу же становятся доступны вашим приложениям и пользователям. При необходимости вы можете вернуться к предыдущей версии .
Используйте следующие команды для публикации шаблона:
Консоль Firebase
- На вкладке «Параметры Remote Config или «Условия» откройте меню и выберите «Опубликовать из файла» .
- При появлении запроса нажмите «Обзор» , найдите и выберите файл Remote Config который вы хотите опубликовать, затем нажмите «Выбрать» .
- Файл будет проверен, и в случае успеха вы сможете нажать «Опубликовать» , чтобы сделать конфигурацию немедленно доступной для ваших приложений и пользователей.
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
вы можете указать содержимое, используя символ «@», за которым следует имя файла.
Персонализация и условия 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 .
Чтобы скачать файл, содержащий настройки шаблона по умолчанию:
ОТДЫХ
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
- На вкладке «Параметры » откройте меню и выберите «Загрузить значения по умолчанию» .
- При появлении запроса установите переключатель, соответствующий формату файла, который вы хотите загрузить, а затем нажмите «Загрузить файл» .
Дополнительные сведения об импорте значений по умолчанию Remote Config в ваше приложение см. в разделах:
Установите значения параметров по умолчанию в приложении для Android
Установите значения параметров по умолчанию в приложении для iOS
Установите значения параметров приложения по умолчанию для Интернета
Установите значения параметров по умолчанию в приложении для Unity
Установите значения параметров по умолчанию в приложении для C++