Os modelos de Remote Config são conjuntos de parâmetros e condições no formato JSON que você criou para o projeto do Firebase. Você pode criar modelos de cliente, onde o app busca valores, e modelos de servidor, onde os clientes do servidor podem buscar valores.
Esta seção discute os modelos de cliente. Para saber mais sobre modelos específicos de servidor, clique em Modelos de servidor.É possível modificar e gerenciar o modelo usando o console de Firebase, que exibe o conteúdo do modelo em formato de gráfico nas guias Guias Parâmetros e Condições.
Também é possível usar o SDK Admin e a API REST de Remote Config ou a CLI de Firebase para modificar e gerenciar o modelo de cliente.
Confira um exemplo de arquivo de modelo de servidor:
{
"parameters": {
"preamble_prompt": {
"defaultValue": {
"value": "You are a helpful assistant who knows everything there is to know about Firebase! "
},
"description": "Add this prompt to the user's prompt",
"valueType": "STRING"
},
"model_name": {
"defaultValue": {
"value": "gemini-pro-test"
},
"valueType": "STRING"
},
"generation_config": {
"defaultValue": {
"value": "{\"temperature\": 0.9, \"maxOutputTokens\": 2048, \"topP\": 0.9, \"topK\": 20}"
},
"valueType": "JSON"
},
},
"version": {
"versionNumber": "19",
"isLegacy": true
}
}
É possível realizar estas tarefas de gerenciamento de versões com o console de Firebase:
- Listar todas as versões de modelos armazenadas.
- Recuperar uma versão específica.
- Reverter para uma versão específica de cliente
- Exclua os modelos de Remote Config da página Histórico de alterações
Há um limite total de 300 versões armazenadas com ciclo de vida por tipo de modelo (300 modelos de cliente e 300 de servidor), o que inclui números de versão armazenados para modelos excluídos. Se você publicar mais de 300 por tipo de modelo durante a vida útil de um projeto, as versões mais antigas são excluídas, mantendo no máximo 300 versões desse tipo.
Sempre que você atualiza os parâmetros, Remote Config cria um
modelo de Remote Config com controle de versões e armazena o modelo anterior como
uma versão que você pode recuperar ou reverter, conforme necessário. Os números de versão
são incrementados de maneira sequencial com base no valor inicial armazenado por Remote Config.
Todos os modelos incluem um campo version
, conforme mostrado, que contém metadados sobre essa
versão específica.
É possível excluir modelos de Remote Config conforme necessário na página Histórico de alterações do console de Remote Config.
Gerenciar versões do modelo de Remote Config
Esta seção descreve como gerenciar versões do modelo de Remote Config.
Listar todas as versões armazenadas do modelo de Remote Config
É possível recuperar uma lista de todas as versões armazenadas do modelo de Remote Config. As etapas para fazer isso:
Console do Firebase
Na guia Parâmetros, selecione o ícone de relógio exibido no canto superior direito. Isso abrirá a página Histórico de alterações com a lista de todas as versões de modelos armazenadas em um menu em lista à direita.
Os detalhes exibidos para cada versão armazenada informam se a alteração foi feita por meio do Console, da API REST ou de uma reversão ou se foram alterações incrementais devido a um salvamento forçado do modelo.
CLI Firebase
firebase remoteconfig:versions:list
Use a opção --limit
para limitar o número de versões retornadas.
Envie "0" para buscar todas as versões.
Node.js
function listAllVersions() {
admin.remoteConfig().listVersions()
.then((listVersionsResult) => {
console.log("Successfully fetched the list of versions");
listVersionsResult.versions.forEach((version) => {
console.log('version', JSON.stringify(version));
});
})
.catch((error) => {
console.log(error);
});
}
Java
ListVersionsPage page = FirebaseRemoteConfig.getInstance().listVersionsAsync().get(); while (page != null) { for (Version version : page.getValues()) { System.out.println("Version: " + version.getVersionNumber()); } page = page.getNextPage(); } // Iterate through all versions. This will still retrieve versions in batches. page = FirebaseRemoteConfig.getInstance().listVersionsAsync().get(); for (Version version : page.iterateAll()) { System.out.println("Version: " + version.getVersionNumber()); }
REST
curl --compressed -D headers -H "Authorization: Bearer <var>token</var>" -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/<var>my-project-id</var>/remoteConfig:listVersions
A lista de modelos inclui metadados para todas as versões armazenadas, incluindo as hora da atualização, o usuário que a fez e como ela foi feita. Veja um exemplo de um elemento da versão:
```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"
}]
}
```
Recuperar uma versão específica do modelo de Remote Config
É possível recuperar qualquer versão específica armazenada do modelo de Remote Config. Para recuperar uma versão de modelo armazenada:
Console do Firebase
Por padrão, o painel de detalhes na guia Histórico de alterações exibe o modelo ativo atual. Para ver detalhes de outra versão na lista, selecione-a no menu à direita.
Para visualizar uma comparação detalhada entre a versão selecionada e qualquer outra versão armazenada, passe o cursor sobre o menu de contexto de qualquer versão não selecionada e clique em Comparar com a versão selecionada.
CLI Firebase
firebase remoteconfig:get -v VERSION_NUMBER
Como alternativa, é possível gravar a saída em um arquivo especificado com -o, FILENAME
.
Node.js
Envie getTemplate()
sem argumentos para recuperar a versão mais recente do modelo.
Para recuperar uma versão específica, use getTemplateAtVersion()
.
// Get template version: 6
admin.remoteConfig().getTemplateAtVersion('6')
.then((template) => {
console.log("Successfully fetched the template with ETag: " + template.etag);
})
.catch((error) => {
console.log(error);
});
Java
Template template = FirebaseRemoteConfig.getInstance().getTemplateAtVersionAsync(versionNumber).get(); // See the ETag of the fetched template. System.out.println("Successfully fetched the template with ETag: " + template.getETag());
REST
curl --compressed -D headers -H "Authorization: Bearer <var>token</var>" -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/<var>my-project-id</var>/remoteConfig?version_number=6
O parâmetro de URL ?version_number
é válido apenas para operações GET
.
Não é possível utilizá-lo para especificar números de versão para atualizações. Uma solicitação GET
semelhante sem o parâmetro ?version_number
recuperaria o modelo ativo atual.
Reverter para uma versão específica armazenada do modelo de Remote Config
É possível reverter para qualquer versão armazenada do modelo. Para reverter um modelo:
Console do Firebase
Para as versões de modelo anteriores qualificadas para reversão, um botão com a opção de reverter para essa versão é exibido no canto superior direito da página Histórico de alterações. Clique e confirme essa opção apenas se tiver certeza de que você quer reverter para essa versão e usar esses valores imediatamente para todos os apps e usuários.
CLI 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);
})
Java
try { Template template = FirebaseRemoteConfig.getInstance().rollbackAsync(versionNumber).get(); System.out.println("Successfully rolled back to template version: " + versionNumber); System.out.println("New ETag: " + template.getETag()); } catch (ExecutionException e) { if (e.getCause() instanceof FirebaseRemoteConfigException) { FirebaseRemoteConfigException rcError = (FirebaseRemoteConfigException) e.getCause(); System.out.println("Error trying to rollback template."); System.out.println(rcError.getMessage()); } }
REST
Se você quiser fazer a reversão para um modelo armazenado de Remote Config, emita uma solicitação HTTP POST com
o método personalizado :rollback
e, no corpo da solicitação, inclua a versão específica
a ser aplicada. Exemplo:
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}'
A resposta apresenta o conteúdo do modelo armazenado que está ativo atualmente com os novos metadados de versão.
Na realidade, essa operação de reversão cria uma nova versão numerada. Por exemplo, a reversão da versão 10 para a versão 6 cria uma nova cópia da versão 6, que é diferente da original apenas porque o número de versão é 11. A versão 6 original ainda é armazenada, caso não tenha atingido a expiração, e a versão 11 se torna o modelo ativo.
Excluir um modelo de Remote Config
É possível excluir modelos de Remote Config no console de Firebase. Para excluir um modelo de Remote Config, faça o seguinte:
1. Na página Parâmetros de Remote Config, clique em Histórico de alterações.Alterne para o modelo que você quer excluir, clique em
Mais e selecione Excluir.Clique em Excluir para confirmar a exclusão.
Fazer o download e publicar modelos de Remote Config
Faça o download e publique modelos de Remote Config para integrá-los aos sistemas de build e controle de origem, automatizar atualizações de configuração e manter os parâmetros e valores sincronizados em vários projetos.
É possível fazer o download do modelo de Remote Config ativo no momento, no console de Firebase. É possível atualizar o arquivo JSON exportado e publicá-lo no mesmo projeto ou em um projeto novo ou atual.
Digamos que você tenha vários projetos que representem estágios diferentes do ciclo de vida de desenvolvimento de software, como ambientes de desenvolvimento, teste, preparo e produção. Nesse caso, é possível promover um modelo totalmente testado do seu ambiente de preparo para seu ambiente de produção, fazendo o download dele no projeto de preparo e a publicação no projeto de produção.
Também é possível usar esse método para migrar configurações de um projeto para outro ou preencher automaticamente um novo projeto com parâmetros e valores de um projeto estabelecido.
Os parâmetros e os valores de parâmetro criados especificamente como variantes em um experimento de A/B Testing não estão incluídos nos modelos exportados.
Para exportar e importar modelos de Remote Config:
- Faça o download do modelo de Remote Config atual.
- Valide o modelo de Remote Config.
- Publique o modelo de Remote Config.
Faça o download do modelo atual da Configuração remota
Use o seguinte para fazer o download do modelo de Remote Config ativo no formato JSON:
Console do Firebase
- Na guia Parâmetros ou condições de Remote Config, abra o Menu e selecione Fazer o download do arquivo de configuração atual.
- Quando solicitado, clique em Fazer o download do arquivo de configuração, escolha o local onde você quer salvar o arquivo e clique em Salvar.
CLI 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); }); }
Java
Template template = FirebaseRemoteConfig.getInstance().getTemplateAsync().get(); // See the ETag of the fetched template. System.out.println("ETag from server: " + template.getETag());
REST
curl --compressed -D headers -H "Authorization: Bearer token" -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig -o filename
Este comando exporta o payload do JSON para um arquivo e os cabeçalhos
(incluindo a ETag) para um arquivo headers
separado.
Validar o modelo da Configuração remota
É possível validar as atualizações do modelo antes da publicação usando Firebase Admin SDK ou a API REST. Os modelos também são validados quando você tenta publicá-los pela CLI de Firebase ou pelo console de Firebase.O processo de validação do modelo verifica se há erros, como chaves duplicadas de
parâmetros e condições, nomes de condições inválidas e condições não existentes ou
ETags incorretas. Por exemplo, uma solicitação que contém mais do que o número
permitido de chaves (2.000) retornaria a mensagem de erro Param count too
large
.
Node.js
function validateTemplate(template) { admin.remoteConfig().validateTemplate(template) .then(function (validatedTemplate) { // The template is valid and safe to use. console.log('Template was valid and safe to use'); }) .catch(function (err) { console.error('Template is invalid and cannot be published'); console.error(err); }); }
Java
try { Template validatedTemplate = FirebaseRemoteConfig.getInstance() .validateTemplateAsync(template).get(); System.out.println("Template was valid and safe to use"); } catch (ExecutionException e) { if (e.getCause() instanceof FirebaseRemoteConfigException) { FirebaseRemoteConfigException rcError = (FirebaseRemoteConfigException) e.getCause(); System.out.println("Template is invalid and cannot be published"); System.out.println(rcError.getMessage()); } }
REST
Para validar as atualizações do modelo, inclua o parâmetro de URL ?validate_only=true
à sua solicitação de publicação:
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
Se o modelo tiver sido validado, o comando "curl" vai retornar o
modelo JSON enviado e, no arquivo headers
salvo, você encontra
o status 200 do HTTP/2 e uma ETag atualizada com o sufixo -0
. Se o
modelo não foi validado, você vai receber o erro de validação na
resposta JSON e o arquivo headers
vai apresentar uma resposta que não é 200
(e nenhuma ETag).
Publicar o modelo de Remote Config
Depois de fazer o download de um modelo, fazer as alterações necessárias no conteúdo JSON e validá-lo, é possível publicar o modelo em um projeto.
A publicação substitui todo o modelo da configuração atual pelo arquivo atualizado e incrementa a versão do modelo em um. Como toda a configuração é substituída, se você excluir um parâmetro do arquivo JSON e publicá-lo, o parâmetro é deletado do servidor e fica indisponível para os clientes.
Após a publicação, as alterações nos parâmetros e valores são disponibilizadas imediatamente para os apps e usuários. Se necessário, reverta para a versão anterior.
Use os seguintes comandos para publicar o modelo:
Console do Firebase
- Na guia Parâmetros ou condições de Remote Config, abra o Menu e selecione Publicar de um arquivo.
- Quando solicitado, clique em Procurar, navegue até o arquivo de Remote Config que você quer publicar e clique em Selecionar.
- O arquivo vai ser validado e, se for bem-sucedido, você pode clicar em Publicar para disponibilizar a configuração imediatamente para seus apps e usuários.
Node.js
function publishTemplate() { var config = admin.remoteConfig(); var template = config.createTemplateFromJSON( fs.readFileSync('config.json', 'UTF8')); config.publishTemplate(template) .then(function (updatedTemplate) { console.log('Template has been published'); console.log('ETag from server: ' + updatedTemplate.etag); }) .catch(function (err) { console.error('Unable to publish template.'); console.error(err); }); }
Java
try { Template publishedTemplate = FirebaseRemoteConfig.getInstance() .publishTemplateAsync(template).get(); System.out.println("Template has been published"); // See the ETag of the published template. System.out.println("ETag from server: " + publishedTemplate.getETag()); } catch (ExecutionException e) { if (e.getCause() instanceof FirebaseRemoteConfigException) { FirebaseRemoteConfigException rcError = (FirebaseRemoteConfigException) e.getCause(); System.out.println("Unable to publish template."); System.out.println(rcError.getMessage()); } }
REST
curl --compressed -H "Content-Type: application/json; UTF8" -H "If-Match: last-returned-etag" -H "Authorization: Bearer token" -X PUT https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig -d @filename
Para este comando curl
, especifique o conteúdo usando o caractere
@ seguido pelo nome do arquivo.
As personalizações e condições de Remote Config estão incluídas nos modelos salvos. Por isso, é importante estar ciente das seguintes limitações ao tentar fazer a publicação em um projeto diferente:
As personalizações não podem ser importadas de um projeto para outro.
Por exemplo, se as personalizações estiverem ativadas no seu projeto e você fizer o download e editar um modelo, é possível publicá-lo no mesmo projeto, mas não em outro, a menos que você exclua as personalizações.
As condições podem ser importadas de projeto para projeto. No entanto, é necessário que todos os valores condicionais específicos (como IDs do app ou públicos-alvo) apareçam no projeto de destino antes da publicação.
Por exemplo, se você tiver um parâmetro de Remote Config que usa uma condição que especifica um valor de plataforma
iOS
, o modelo poderá ser publicado em outro projeto, porque os valores de plataforma são iguais para qualquer projeto. No entanto, se houver uma condição que depende de um ID do app ou público de usuário específico que não existe no projeto de destino, a validação vai apresentar falhas.Se o modelo que você planeja publicar contém condições que dependem de Google Analytics, Analytics precisa estar ativado no projeto de destino.
Fazer o download dos padrões do modelo de Remote Config
Como o app nem sempre está conectado à Internet, é necessário configurar os valores padrão do app do cliente para todos os parâmetros de Remote Config. Além disso, você precisa sincronizar periodicamente os valores padrão do cliente do app e os valores de parâmetro padrão do back-end de Remote Config, porque eles podem mudar ao longo do tempo.
Conforme descrito nos links específicos da plataforma no final desta seção, é possível definir esses padrões manualmente no app ou simplificar o processo fazendo o download de arquivos que contenham apenas os pares de chave-valor de todos os parâmetros e os respectivos valores padrão no modelo ativo de Remote Config. Em seguida, inclua esse arquivo no projeto e configure o app para importar esses valores.
É possível fazer o download desses arquivos em formato XML para apps do Android, no formato de lista de propriedades (plist) para apps iOS e em JSON para apps da Web.
Recomendamos fazer o download periódico dos padrões de Remote Config antes de lançar uma nova versão do app para garantir que o app e o back-end de Remote Config permaneçam sincronizados.
Para fazer o download de um arquivo com padrões de modelo:
REST
curl --compressed -D headers -H "Authorization: Bearer token -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig:downloadDefaults?format=file_format'
Use XML
, PLIST
ou JSON
como o valor format
, dependendo do formato de arquivo
que você quer transferir por download.
Console do Firebase
- Na guia Parâmetros, abra o Menu e selecione Fazer o download dos valores padrão.
- Se aparecer uma solicitação, clique no botão de opção correspondente ao formato do arquivo que você quer transferir e clique em Fazer download do arquivo.
Para saber como importar valores padrão de Remote Config no app, acesse: