В этом документе описывается, как программно читать и изменять набор параметров и условий в формате JSON, известный как шаблон Remote Config . Это позволяет вам вносить изменения в шаблоны на серверной стороне, которые клиентское приложение может получить с помощью клиентской библиотеки.
Используя REST API Remote Config или Admin SDK , описанные в этом руководстве, вы можете обойти управление шаблоном в консоли 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 . Чтобы просмотреть код, выполняющий эти задачи через REST API, посмотрите один из этих примеров приложений:
- Firebase Remote Config REST API Краткое руководство по Java
- Firebase Remote Config REST API Node.js Краткое руководство
- Firebase Remote Config REST API Краткое руководство по Python
Измените удаленную конфигурацию с помощью 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 сохраненных версий. Дополнительные сведения см. в разделе «Шаблоны и управление версиями» .
Вы можете использовать серверные API, чтобы получить текущую активную версию шаблона Remote Config в формате JSON.
Параметры и значения параметров, созданные специально как варианты в эксперименте 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()); } }
Этот процесс проверки проверяет наличие таких ошибок, как повторяющиеся ключи для параметров и условий, недопустимые имена условий или несуществующие условия, а также неверный формат etags. Например, запрос, содержащий больше разрешенного количества ключей (2000), вернет сообщение об ошибке: Param count too large
.
Публикация шаблона удаленной конфигурации
Получив шаблон и исправив его с необходимыми обновлениями, вы можете опубликовать его. При публикации шаблона, как описано в этом разделе, весь существующий шаблон конфигурации заменяется обновленным файлом, а новому активному шаблону присваивается номер версии, на один номер больше, чем у шаблона, который он заменил.
При необходимости вы можете использовать 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()); } }
Измените удаленную конфигурацию с помощью REST API.
В этом разделе описаны основные возможности REST API Remote Config на https://firebaseremoteconfig.googleapis.com
. Полную информацию см. в справочнике по API .
Получите токен доступа для аутентификации и авторизации запросов API.
Проекты Firebase поддерживают учетные записи служб Google, которые вы можете использовать для вызова API-интерфейсов сервера Firebase с вашего сервера приложений или доверенной среды. Если вы разрабатываете код локально или развертываете приложение локально, вы можете использовать учетные данные, полученные через эту учетную запись службы, для авторизации запросов к серверу.
Чтобы аутентифицировать учетную запись службы и разрешить ей доступ к службам Firebase, вам необходимо создать файл закрытого ключа в формате JSON.
Чтобы создать файл закрытого ключа для вашей учетной записи службы:
В консоли Firebase откройте «Настройки» > «Учетные записи служб» .
Нажмите «Создать новый закрытый ключ» , затем подтвердите действие, нажав «Создать ключ» .
Надежно сохраните файл 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.
Используйте свои учетные данные Firebase вместе с библиотекой Google Auth для предпочитаемого вами языка, чтобы получить недолговечный токен доступа OAuth 2.0:
узел.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 имейте в виду, что они имеют версии и что каждая версия имеет ограниченный срок действия с момента создания до момента замены ее обновлением: 90 дней с общим ограничением в 300 сохраненных версий. Дополнительные сведения см. в разделе «Шаблоны и управление версиями» .
Получите текущий шаблон удаленной конфигурации.
Вы можете использовать серверные API, чтобы получить текущую активную версию шаблона Remote Config в формате JSON.
Параметры и значения параметров, созданные специально как варианты в эксперименте A/B Testing не включаются в экспортированные шаблоны.
Используйте следующие команды:
КУЛЬ
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 с нужными обновлениями, вы можете опубликовать его. При публикации шаблона, как описано в этом разделе, весь существующий шаблон конфигурации заменяется обновленным файлом, а новому активному шаблону присваивается номер версии, на один номер больше, чем у шаблона, который он заменил.
При необходимости вы можете использовать REST API для отката к предыдущей версии . Чтобы снизить риск ошибок в обновлении, вы можете проверить его перед публикацией .
Персонализация и условия Remote Config включены в загруженные шаблоны, поэтому важно учитывать следующие ограничения при попытке публикации в другом проекте:
Персонализации нельзя импортировать из проекта в проект.
Например, если в вашем проекте включены персонализации и вы скачали и отредактировали шаблон, вы можете опубликовать его в том же проекте, но не сможете опубликовать его в другом проекте, пока не удалите персонализации из шаблона.
Условия можно импортировать из проекта в проект, но учтите, что любые конкретные условные значения (например, идентификаторы приложений или аудитории) должны существовать в целевом проекте перед публикацией.
Например, если у вас есть параметр Remote Config , который использует условие, определяющее значение платформы
iOS
, шаблон можно опубликовать в другом проекте, поскольку значения платформы одинаковы для любого проекта. Однако если оно содержит условие, зависящее от определенного идентификатора приложения или аудитории пользователей, которых нет в целевом проекте, проверка завершится неудачей.Если шаблон, который вы планируете опубликовать, содержит условия, основанные на Google Analytics , Analytics необходимо включить в целевом проекте.
КУЛЬ
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 может возникнуть в этих двух ситуациях:
|
401 | Произошла ошибка авторизации (токен доступа не был предоставлен или REST API Firebase Remote Config не был добавлен в ваш проект в консоли разработчика Cloud). |
403 | Произошла ошибка аутентификации (был предоставлен неправильный токен доступа) |
500 | Произошла внутренняя ошибка. Если возникает эта ошибка, отправьте запрос в службу поддержки Firebase. |
Код состояния 200 означает, что шаблон Remote Config (параметры, значения и условия для проекта) был обновлен и теперь доступен приложениям, использующим этот проект. Другие коды состояния указывают на то, что существовавший ранее шаблон Remote Config все еще действует.
После отправки обновлений в шаблон перейдите в консоль Firebase и убедитесь, что ваши изменения отображаются должным образом. Это очень важно, поскольку порядок условий влияет на то, как они оцениваются (вступает в силу первое условие, которое оценивает true
).
Использование ETag и принудительные обновления
REST API Remote Config использует тег объекта (ETag) для предотвращения состояний гонки и перекрытия обновлений ресурсов. Дополнительные сведения об ETag см. в разделе ETag — HTTP .
Для REST API Google рекомендует кэшировать ETag, предоставленный самой последней командой GET
, и использовать это значение ETag в заголовке запроса If-Match
при выдаче команд PUT
. Если ваша команда PUT
приводит к коду состояния HTTPS 409, вам следует ввести новую команду GET
, чтобы получить новый ETag и шаблон для использования со следующей командой PUT
.
Вы можете обойти ETag и защиту, которую он обеспечивает, принудительно обновив шаблон Remote Config следующим образом: If-Match: *
Однако этот подход не рекомендуется, поскольку он рискует привести к потере обновлений вашего Remote Config шаблон, если несколько клиентов обновляют шаблон Remote Config . Конфликт такого рода может возникнуть, если несколько клиентов используют API, или конфликтуют обновления от клиентов API и пользователей консоли Firebase .
Рекомендации по управлению версиями шаблонов Remote Config см. в разделе Шаблоны и управление версиями Remote Config .
,В этом документе описывается, как программно читать и изменять набор параметров и условий в формате JSON, известный как шаблон Remote Config . Это позволяет вам вносить изменения в шаблоны на серверной стороне, которые клиентское приложение может получить с помощью клиентской библиотеки.
Используя REST API Remote Config или Admin SDK , описанные в этом руководстве, вы можете обойти управление шаблоном в консоли 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 . Чтобы просмотреть код, выполняющий эти задачи через REST API, посмотрите один из этих примеров приложений:
- Firebase Remote Config REST API Краткое руководство по Java
- Firebase Remote Config REST API Node.js Краткое руководство
- Firebase Remote Config REST API Краткое руководство по Python
Измените удаленную конфигурацию с помощью 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 сохраненных версий. Дополнительные сведения см. в разделе «Шаблоны и управление версиями» .
Вы можете использовать серверные API, чтобы получить текущую активную версию шаблона Remote Config в формате JSON.
Параметры и значения параметров, созданные специально как варианты в эксперименте 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()); } }
Этот процесс проверки проверяет наличие таких ошибок, как повторяющиеся ключи для параметров и условий, недопустимые имена условий или несуществующие условия, а также неверный формат etags. Например, запрос, содержащий больше разрешенного количества ключей (2000), вернет сообщение об ошибке: Param count too large
.
Публикация шаблона удаленной конфигурации
Получив шаблон и исправив его с необходимыми обновлениями, вы можете опубликовать его. При публикации шаблона, как описано в этом разделе, весь существующий шаблон конфигурации заменяется обновленным файлом, а новому активному шаблону присваивается номер версии, на один номер больше, чем у шаблона, который он заменил.
При необходимости вы можете использовать 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()); } }
Измените удаленную конфигурацию с помощью REST API.
В этом разделе описаны основные возможности REST API Remote Config на https://firebaseremoteconfig.googleapis.com
. Полную информацию см. в справочнике по API .
Получите токен доступа для аутентификации и авторизации запросов API.
Проекты Firebase поддерживают учетные записи служб Google, которые вы можете использовать для вызова API-интерфейсов сервера Firebase с вашего сервера приложений или доверенной среды. Если вы разрабатываете код локально или развертываете приложение локально, вы можете использовать учетные данные, полученные через эту учетную запись службы, для авторизации запросов к серверу.
Чтобы аутентифицировать учетную запись службы и разрешить ей доступ к службам Firebase, вам необходимо создать файл закрытого ключа в формате JSON.
Чтобы создать файл закрытого ключа для вашей учетной записи службы:
В консоли Firebase откройте «Настройки» > «Учетные записи служб» .
Нажмите «Создать новый закрытый ключ» , затем подтвердите действие, нажав «Создать ключ» .
Надежно сохраните файл 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.
Используйте свои учетные данные Firebase вместе с библиотекой Google Auth для предпочитаемого вами языка, чтобы получить недолговечный токен доступа OAuth 2.0:
узел.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 имейте в виду, что они имеют версии и что каждая версия имеет ограниченный срок действия с момента создания до момента замены ее обновлением: 90 дней с общим ограничением в 300 сохраненных версий. Дополнительные сведения см. в разделе «Шаблоны и управление версиями» .
Получите текущий шаблон удаленной конфигурации.
Вы можете использовать серверные API, чтобы получить текущую активную версию шаблона Remote Config в формате JSON.
Параметры и значения параметров, созданные специально как варианты в эксперименте A/B Testing не включаются в экспортированные шаблоны.
Используйте следующие команды:
КУЛЬ
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 с нужными обновлениями, вы можете опубликовать его. При публикации шаблона, как описано в этом разделе, весь существующий шаблон конфигурации заменяется обновленным файлом, а новому активному шаблону присваивается номер версии, на один номер больше, чем у шаблона, который он заменил.
При необходимости вы можете использовать REST API для отката к предыдущей версии . Чтобы снизить риск ошибок в обновлении, вы можете проверить его перед публикацией .
Персонализация и условия Remote Config включены в загруженные шаблоны, поэтому важно учитывать следующие ограничения при попытке публикации в другом проекте:
Персонализации нельзя импортировать из проекта в проект.
Например, если в вашем проекте включены персонализации и вы скачали и отредактировали шаблон, вы можете опубликовать его в том же проекте, но не сможете опубликовать его в другом проекте, пока не удалите персонализации из шаблона.
Условия можно импортировать из проекта в проект, но учтите, что любые конкретные условные значения (например, идентификаторы приложений или аудитории) должны существовать в целевом проекте перед публикацией.
Например, если у вас есть параметр Remote Config , который использует условие, определяющее значение платформы
iOS
, шаблон можно опубликовать в другом проекте, поскольку значения платформы одинаковы для любого проекта. Однако если оно содержит условие, которое зависит от определенного идентификатора приложения или аудитории пользователей, не существующей в целевом проекте, проверка завершится неудачно.Если шаблон, который вы планируете опубликовать, содержит условия, основанные на Google Analytics , Analytics необходимо включить в целевом проекте.
КУЛЬ
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 предоставляют несколько условий и операторов сравнения, которые вы можете использовать для изменения поведения и внешнего вида вашего приложения. Чтобы узнать больше об условиях и операторах, поддерживаемых для этих условий, см. Ссылку на условное выражение .
HTTP -коды ошибок
Код состояния | Значение |
---|---|
200 | Успешно обновляется |
400 | Произошла ошибка проверки. Например, запрос, содержащий больше, чем разрешенное количество клавиш - 200000 - вернет 400 (плохой запрос) с сообщением об ошибке, Param count too large . Кроме того, этот код состояния HTTPS может возникнуть в этих двух ситуациях:
|
401 | Произошла ошибка авторизации (токен доступа не был предоставлен или API Remote Config Firebase не было добавлено в ваш проект на консоли Cloud Developer) |
403 | Произошла ошибка аутентификации (был предоставлен неправильный токен доступа) |
500 | Произошла внутренняя ошибка. Если возникает эта ошибка, подайте билет на поддержку Firebase |
Код состояния 200 означает, что шаблон Remote Config (параметры, значения и условия для проекта) был обновлен и теперь доступен для приложений, которые используют этот проект. Другие коды статуса показывают, что шаблон Remote Config , который существовал ранее, все еще действует.
После того, как вы отправите обновления в свой шаблон, перейдите в консоль Firebase чтобы убедиться, что ваши изменения появляются, как и ожидалось. Это очень важно, потому что упорядочение условий влияет на то, как они оцениваются (первое условие, которое оценивает true
вступает в силу).
Использование ETAG и принудительные обновления
В Remote Config API используется тег объекта (ETAG) для предотвращения условий гонки и перекрывающихся обновлений ресурсов. Чтобы узнать больше об ETAGS, см. ETAG - http .
Для REST API Google рекомендует вам кэшировать ETAG, предоставленную самой последней командой GET
, и использовать это значение ETAG в заголовке запроса If-Match
PUT
выдаче команд. Если ваша команда PUT
приведет в код состояния HTTPS 409, вы должны выпустить команду Fresh GET
, чтобы получить новый ETAG и шаблон для использования с вашей следующей командой PUT
.
Вы можете обойти ETAG, и защита от того, что он обеспечивает, заставляя обновлять шаблон Remote Config следующим образом: If-Match: *
Однако этот подход не рекомендуется, поскольку он рискует, что приводит к потере обновлений в вашем Remote Config Шаблон, если несколько клиентов обновляют шаблон Remote Config . Этот вид конфликта может возникнуть с несколькими клиентами, использующими API или с противоречивыми обновлениями от клиентов API и пользователей Firebase Console.
Для руководства по управлению версиями шаблона Remote Config см. Удаленные шаблоны конфигурации и управление версиями .
,В этом документе описывается, как вы можете программно прочитать и изменять набор параметров и условий, форматированных JSON, известных как шаблон Remote Config . Это позволяет вам вносить изменения шаблона на бэкэнд, которую клиентское приложение может получить с помощью клиентской библиотеки.
Используя Remote Config REST API или 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 Remote Config REST API Java QuickStart
- Firebase Remote Config REST API Node.js QuickStart
- Firebase Remote Config REST API Python QuickStart
Измените удаленную конфигурацию, используя SDK Firebase Admin SDK
Admin SDK - это набор библиотек серверов, которые позволяют вам взаимодействовать с Firebase из привилегированных сред. В дополнение к выполнению обновлений для Remote Config , Admin SDK обеспечивает генерацию и проверку токенов Firebase Auth, чтение и написание из Realtime Database и так далее. Чтобы узнать больше о предварительных условиях Admin SDK и настройки, см. Добавьте SDK Admin Firebase Admin на ваш сервер .
В типичном Remote Config вы можете получить текущий шаблон, изменить некоторые из параметров или групп и условий параметров, проверить шаблон, а затем опубликовать его. Прежде чем совершать эти вызовы API, вы должны разрешить запросы от SDK.
Инициализировать SDK и авторизировать запросы API
Когда вы инициализируете Admin SDK без параметров, SDK использует Google Application Default Eductions и считывает параметры с переменной среды 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 сохраненных версий. См. Шаблоны и управление версиями для получения дополнительной информации.
Вы можете использовать API -интерфейсы Backend, чтобы получить текущую активную версию шаблона Remote Config в формате JSON.
Параметры и значения параметров, созданные специально в виде вариантов в эксперименте 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));
Во всех случаях вы должны явно опубликовать шаблон после внесения изменений.
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. Например, запрос, содержащий больше, чем разрешенное количество клавиш - 200000, - вернет сообщение об ошибке, 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
В этом разделе описывается основные возможности Remote Config API REST по адресу https://firebaseremoteconfig.googleapis.com
. Для полной детали см. Ссылку API .
Получите токен доступа для аутентификации и авторизации запросов API
Проекты Firebase поддерживают учетные записи Google Services , которые вы можете использовать для вызова API Server Server Firebase с сервера приложений или надежной среды. Если вы разрабатываете код локально или развертываете локальные приложения, вы можете использовать учетные данные, полученные с помощью этой учетной записи службы для авторизации запросов сервера.
Чтобы аутентифицировать учетную запись службы и разрешить ее доступа к службам Firebase, вы должны генерировать файл частного ключа в формате JSON.
Чтобы сгенерировать отдельный файл ключа для вашей учетной записи службы:
В консоли Firebase открытые настройки> Сервисные учетные записи .
Нажмите «Создать новый частный ключ» , а затем подтвердите, нажав клавишу Generate .
Безопасно хранить файл JSON, содержащий ключ.
При разрешении через учетную запись сервиса у вас есть два варианта предоставления учетных данных для вашей заявки. Вы можете либо установить переменную среды GOOGLE_APPLICATION_CREDENTIALS , либо вы можете явно передать путь к ключу учетной записи службы в коде. Первый вариант более безопасен и настоятельно рекомендуется.
Чтобы установить переменную среды:
Установите переменную среды GOOGLE_APPLICATION_CREDENTIALS в путь файла файла JSON, который содержит ключ вашей учетной записи службы. Эта переменная применима только к вашему текущему сеансу оболочки, поэтому, если вы откроете новый сеанс, установите переменную еще раз.
Linux или 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.
Используйте свои учетные данные Firebase вместе с библиотекой Google Auth для вашего предпочтительного языка, чтобы получить недолговечный токен доступа OAuth 2.0:
узел.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 Web Tokens .
Питон
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 имейте в виду, что они версии, и что каждая версия имеет ограниченный срок службы от времени создания до того времени, когда вы замените его с обновлением: 90 дней, с общим пределом 300 сохраненных версий. См. Шаблоны и управление версиями для получения дополнительной информации.
Получить текущий шаблон удаленного конфигурации
Вы можете использовать API -интерфейсы Backend, чтобы получить текущую активную версию шаблона Remote Config в формате JSON.
Параметры и значения параметров, созданные специально в виде вариантов в эксперименте A/B Testing не включены в экспортируемые шаблоны.
Используйте следующие команды:
загрязнение
curl --compressed -D headers -H "Authorization: Bearer token" -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig -o filename
Эта команда выводит полезную нагрузку JSON в один файл, а заголовки (включая ETAG) в отдельный файл.
RAW 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 с помощью желаемых обновлений, вы можете опубликовать его. Публикация шаблона, как описано в этом разделе, заменяет весь существующий шаблон конфигурации с обновленным файлом, а новым активный шаблон назначается номер версии номер один, превышающий шаблон, который он заменил.
При необходимости вы можете использовать API REST, чтобы вернуться к предыдущей версии . Чтобы смягчить риск ошибок в обновлении, вы можете проверить перед публикацией .
Персонализация и условия Remote Config включены в загруженные шаблоны, поэтому важно знать о следующих ограничениях при попытке публиковать в другом проекте:
Персонализации не могут быть импортированы от проекта в проект.
Например, если у вас есть персонализация, включенные в вашем проекте, и загрузить и редактировать шаблон, вы можете опубликовать его в одном и том же проекте, но вы не можете опубликовать его в другом проекте, если вы не удалите персонализации из шаблона.
Условия могут быть импортированы от проекта в проект, но обратите внимание, что любые конкретные условные значения (например, идентификаторы приложений или аудитория), перед публикацией должны существовать.
Например, если у вас есть Remote Config , который использует условие, которое указывает значение платформы
iOS
, шаблон может быть опубликован в другой проект, поскольку значения платформы одинаковы для любого проекта. Однако, если он содержит условие, которое опирается на конкретный идентификатор приложения или аудиторию пользователя, который не существует в целевом проекте, проверка потерпит неудачу.Если шаблон, который вы планируете публиковать, содержит условия, которые полагаются на Google Analytics , Analytics должна быть включена в целевом проекте.
загрязнение
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
вы можете указать содержимое, используя символ «@», за которым следует имя файла.
RAW HTTP -запрос
Host: firebaseremoteconfig.googleapis.com PUT /v1/projects/my-project-id/remoteConfig HTTP/1.1 Content-Length: size Content-Type: application/json; UTF8 Authorization: Bearer token If-Match: expected ETag Accept-Encoding: gzip JSON_HERE
Поскольку это запрос на запись, ETAG изменяется этой командой, и в заголовках PUT
представлена обновленная ETAG.
Изменить удаленные условия конфигурации
Вы можете программно изменить условия Remote Config и условные значения. С помощью REST API вы должны отредактировать шаблон непосредственно, чтобы изменить условия, прежде чем публиковать шаблон.
{ "conditions": [{ "name": "android_english", "expression": "device.os == 'android' && device.country in ['us', 'uk']", "tagColor": "BLUE" }, { "name": "tenPercent", "expression": "percent <= 10", "tagColor": "BROWN" }], "parameters": { "welcome_message": { "defaultValue": { "value": "Welcome to this sample app" }, "conditionalValues": { "tenPercent": { "value": "Welcome to this new sample app" } }, "description": "The sample app's welcome message" }, "welcome_message_caps": { "defaultValue": { "value": "false" }, "conditionalValues": { "android_english": { "value": "true" } }, "description": "Whether the welcome message should be displayed in all capital letters." } } }
Приведенные выше модификации сначала определяют набор условий, а затем определяют значения по умолчанию и значения параметра на основе условий ( условные значения ) для каждого параметра. Это также добавляет дополнительное описание для каждого элемента; Как комментарии кода, они предназначены для использования разработчиков и не отображаются в приложении. ETAG также предоставляется для целей контроля версий.
Remote Config предоставляют несколько условий и операторов сравнения, которые вы можете использовать для изменения поведения и внешнего вида вашего приложения. Чтобы узнать больше об условиях и операторах, поддерживаемых для этих условий, см. Ссылку на условное выражение .
HTTP -коды ошибок
Код состояния | Значение |
---|---|
200 | Успешно обновляется |
400 | Произошла ошибка проверки. Например, запрос, содержащий больше, чем разрешенное количество клавиш - 200000 - вернет 400 (плохой запрос) с сообщением об ошибке, Param count too large . Кроме того, этот код состояния HTTPS может возникнуть в этих двух ситуациях:
|
401 | Произошла ошибка авторизации (токен доступа не был предоставлен или API Remote Config Firebase не было добавлено в ваш проект на консоли Cloud Developer) |
403 | Произошла ошибка аутентификации (был предоставлен неправильный токен доступа) |
500 | Произошла внутренняя ошибка. Если возникает эта ошибка, подайте билет на поддержку Firebase |
Код состояния 200 означает, что шаблон Remote Config (параметры, значения и условия для проекта) был обновлен и теперь доступен для приложений, которые используют этот проект. Другие коды статуса показывают, что шаблон Remote Config , который существовал ранее, все еще действует.
После того, как вы отправите обновления в свой шаблон, перейдите в консоль Firebase чтобы убедиться, что ваши изменения появляются, как и ожидалось. Это очень важно, потому что упорядочение условий влияет на то, как они оцениваются (первое условие, которое оценивает true
вступает в силу).
Использование ETAG и принудительные обновления
В Remote Config API используется тег объекта (ETAG) для предотвращения условий гонки и перекрывающихся обновлений ресурсов. Чтобы узнать больше об ETAGS, см. ETAG - http .
Для REST API Google рекомендует вам кэшировать ETAG, предоставленную самой последней командой GET
, и использовать это значение ETAG в заголовке запроса If-Match
PUT
выдаче команд. Если ваша команда PUT
приведет в код состояния HTTPS 409, вы должны выпустить команду Fresh GET
, чтобы получить новый ETAG и шаблон для использования с вашей следующей командой PUT
.
Вы можете обойти ETAG, и защита от того, что он обеспечивает, заставляя обновлять шаблон Remote Config следующим образом: If-Match: *
Однако этот подход не рекомендуется, поскольку он рискует, что приводит к потере обновлений в вашем Remote Config Шаблон, если несколько клиентов обновляют шаблон Remote Config . Этот вид конфликта может возникнуть с несколькими клиентами, использующими API или с противоречивыми обновлениями от клиентов API и пользователей Firebase Console.
Для руководства по управлению версиями шаблона Remote Config см. Удаленные шаблоны конфигурации и управление версиями .
,В этом документе описывается, как вы можете программно прочитать и изменять набор параметров и условий, форматированных JSON, известных как шаблон Remote Config . Это позволяет вам вносить изменения шаблона на бэкэнд, которую клиентское приложение может получить с помощью клиентской библиотеки.
Используя Remote Config REST API или 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 Remote Config REST API Java QuickStart
- Firebase Remote Config REST API Node.js QuickStart
- Firebase Remote Config REST API Python QuickStart
Измените удаленную конфигурацию, используя SDK Firebase Admin SDK
Admin SDK - это набор библиотек серверов, которые позволяют вам взаимодействовать с Firebase из привилегированных сред. В дополнение к выполнению обновлений для Remote Config , Admin SDK обеспечивает генерацию и проверку токенов Firebase Auth, чтение и написание из Realtime Database и так далее. Чтобы узнать больше о предварительных условиях Admin SDK и настройки, см. Добавьте SDK Admin Firebase Admin на ваш сервер .
В типичном Remote Config вы можете получить текущий шаблон, изменить некоторые из параметров или групп и условий параметров, проверить шаблон, а затем опубликовать его. Прежде чем совершать эти вызовы API, вы должны разрешить запросы от SDK.
Инициализировать SDK и авторизировать запросы API
Когда вы инициализируете Admin SDK без параметров, SDK использует Google Application Default Eductions и считывает параметры с переменной среды 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 сохраненных версий. См. Шаблоны и управление версиями для получения дополнительной информации.
Вы можете использовать API -интерфейсы Backend, чтобы получить текущую активную версию шаблона Remote Config в формате JSON.
Параметры и значения параметров, созданные специально в виде вариантов в эксперименте 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));
Во всех случаях вы должны явно опубликовать шаблон после внесения изменений.
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. Например, запрос, содержащий больше, чем разрешенное количество клавиш - 200000, - вернет сообщение об ошибке, 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
В этом разделе описывается основные возможности Remote Config API REST по адресу https://firebaseremoteconfig.googleapis.com
. Для полной детали см. Ссылку API .
Получите токен доступа для аутентификации и авторизации запросов API
Проекты Firebase поддерживают учетные записи Google Services , которые вы можете использовать для вызова API Server Server Firebase с сервера приложений или надежной среды. Если вы разрабатываете код локально или развертываете локальные приложения, вы можете использовать учетные данные, полученные с помощью этой учетной записи службы для авторизации запросов сервера.
Чтобы аутентифицировать учетную запись службы и разрешить ее доступа к службам Firebase, вы должны генерировать файл частного ключа в формате JSON.
Чтобы сгенерировать отдельный файл ключа для вашей учетной записи службы:
В консоли Firebase открытые настройки> Сервисные учетные записи .
Нажмите «Создать новый частный ключ» , а затем подтвердите, нажав клавишу Generate .
Безопасно хранить файл JSON, содержащий ключ.
При разрешении через учетную запись сервиса у вас есть два варианта предоставления учетных данных для вашей заявки. Вы можете либо установить переменную среды GOOGLE_APPLICATION_CREDENTIALS , либо вы можете явно передать путь к ключу учетной записи службы в коде. Первый вариант более безопасен и настоятельно рекомендуется.
Чтобы установить переменную среды:
Установите переменную среды GOOGLE_APPLICATION_CREDENTIALS в путь файла файла JSON, который содержит ключ вашей учетной записи службы. Эта переменная применима только к вашему текущему сеансу оболочки, поэтому, если вы откроете новый сеанс, установите переменную еще раз.
Linux или 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.
Используйте свои учетные данные Firebase вместе с библиотекой Google Auth для вашего предпочтительного языка, чтобы получить недолговечный токен доступа OAuth 2.0:
узел.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 Web Tokens .
Питон
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 имейте в виду, что они версии, и что каждая версия имеет ограниченный срок службы от времени создания до того времени, когда вы замените его с обновлением: 90 дней, с общим пределом 300 сохраненных версий. См. Шаблоны и управление версиями для получения дополнительной информации.
Получить текущий шаблон удаленного конфигурации
You can use the backend APIs to get the current active version of the Remote Config template in JSON format.
Parameters and parameter values created specifically as variants in an A/B Testing experiment are not included in exported templates.
Use the following commands:
cURL
curl --compressed -D headers -H "Authorization: Bearer token" -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig -o filename
This command outputs the JSON payload to one file, and the headers (including the Etag) to a separate file.
Raw HTTP request
Host: firebaseremoteconfig.googleapis.com GET /v1/projects/my-project-id/remoteConfig HTTP/1.1 Authorization: Bearer token Accept-Encoding: gzip
This API call returns the following JSON, along with a separate header which includes an ETag that you use for the subsequent request.
Validate the Remote Config template
Optionally, you can validate your updates before publishing them. Validate template updates by appending to your publish request the URL parameter ?validate_only=true
. In the response, a status code 200 and an updated etag with the suffix -0
means that your update was successfully validated. Any non-200 response indicates that the JSON data contains errors that you must correct before publishing.
Update the Remote Config template
Having retrieved a template and revised the JSON content with your desired updates, you can then publish it. Publishing a template as described in this section replaces the entire existing config template with the updated file, and the new active template is assigned a version number one number greater than the template it replaced.
If necessary, you can use the REST API to roll back to the previous version . To mitigate the risk of errors in an update, you can validate before publishing .
Remote Config personalizations and conditions are included in downloaded templates, so it's important to be aware of the following limitations when attempting to publish to a different project:
Personalizations cannot be imported from project to project.
For example, if you have personalizations enabled in your project and download and edit a template, you can publish it to the same project, but you can't publish it to a different project unless you delete the personalizations from the template.
Conditions can be imported from project to project, but note that any specific conditional values (like app IDs or audiences), should exist in the target project before publishing.
For example, if you have a Remote Config parameter that uses a condition that specifies a platform value of
iOS
, the template can be published to another project, because platform values are the same for any project. However, if it contains a condition that relies on a specific app ID or user audience that doesn't exist in the target project, validation will fail.If the template you plan to publish contains conditions that rely on Google Analytics , Analytics must be enabled in the target project.
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
For this curl
command, you can specify the content by using the "@" character, followed by the filename.
Raw HTTP request
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
Because this is a write request, the ETag is modified by this command and an updated ETag is provided in the response headers of the next PUT
command.
Modify Remote Config conditions
You can programmatically modify Remote Config conditions and conditional values. With the REST API, you must edit the template directly to modify conditions before publishing the template.
{ "conditions": [{ "name": "android_english", "expression": "device.os == 'android' && device.country in ['us', 'uk']", "tagColor": "BLUE" }, { "name": "tenPercent", "expression": "percent <= 10", "tagColor": "BROWN" }], "parameters": { "welcome_message": { "defaultValue": { "value": "Welcome to this sample app" }, "conditionalValues": { "tenPercent": { "value": "Welcome to this new sample app" } }, "description": "The sample app's welcome message" }, "welcome_message_caps": { "defaultValue": { "value": "false" }, "conditionalValues": { "android_english": { "value": "true" } }, "description": "Whether the welcome message should be displayed in all capital letters." } } }
The modifications above first define a set of conditions, and then defines default values and condition-based parameter ( conditional values ) values for each parameter. It also adds an optional description for each element; like code comments, these are for developer use and are not displayed in the app. An ETag is also provided for version control purposes.
The Remote Config backend APIs provide several conditions and comparison operators that you can use to change the behavior and appearance of your app. To learn more about conditions and the operators supported for these conditions, see the conditional expression reference .
HTTP Error codes
Код состояния | Значение |
---|---|
200 | Successfully Updated |
400 | A validation error occurred. For example, a request containing more than the allowed number of keys—2000—would return 400 (Bad Request) with the error message, Param count too large . Also, this HTTPS Status Code can occur in these two situations:
|
401 | An authorization error occurred (no access token was provided or the Firebase Remote Config REST API has not been added to your project in the Cloud Developer Console) |
403 | An authentication error occurred (the wrong access token was provided) |
500 | An internal error occurred. If this error occurs, file a Firebase support ticket |
A status code of 200 means that the Remote Config template (parameters, values and conditions for the project) has been updated and is now available to apps that use this project. Other status codes indicate that the Remote Config template that existed previously is still in effect.
After you submit updates to your template, go to the Firebase console to verify that your changes appear as expected. This is critical because the ordering of conditions affects how they are evaluated (the first condition that evaluates true
takes effect).
ETag usage and forced updates
The Remote Config REST API uses an entity tag (ETag) to prevent race conditions and overlapping updates to resources. To learn more about ETags, see ETag - HTTP .
For the REST API, Google recommends that you cache the ETag provided by the most recent GET
command, and use that ETag value in the If-Match
request header when issuing PUT
commands. If your PUT
command results in an HTTPS Status Code 409, you should issue a fresh GET
command to acquire a new ETag and template to use with your next PUT
command.
You can circumvent the ETag, and the protection from that it provides, by forcing the Remote Config template to be updated as follows: If-Match: *
However, this approach is not recommended because it risks causing the loss of updates to your Remote Config template if multiple clients are updating the Remote Config template. This kind of conflict could occur with multiple clients using the API, or with conflicting updates from API clients and Firebase console users.
For guidance on managing Remote Config template versions, see Remote Config templates and versioning .