Check out what’s new from Firebase at Google I/O 2022. Learn more

Modelos e controle de versões do Configuração remota

O modelo do Configuração remota é o conjunto do servidor dos parâmetros e condições formatados em JSON que você criou para seu projeto do Firebase. É possível modificar e gerenciar o modelo usando o Console do Firebase, que exibe o conteúdo do modelo em formato de gráfico nas guias Parâmetros e Condições. Também é possível usar as APIs de back-end do Configuração remota ou a CLI do Firebase para modificar e gerenciar suas configurações.

Veja um exemplo de um arquivo de modelo:

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

Sempre que os parâmetros são atualizados, a Configuração remota cria um modelo com controle de versões e armazena o anterior como uma versão que você pode recuperar ou reverter, conforme necessário. Os números de versão são aumentados sequencialmente a partir do valor inicial armazenado pelo Configuração remota. Todos os modelos incluem um campo version conforme mostrado. Ele contém metadados sobre essa versão específica.

Com o Console do Firebase, a CLI do Firebase ou as APIs de back-end da Configuração remota, é possível executar as seguintes tarefas de gerenciamento de versão:

  • Listar todas as versões de modelos armazenadas.
  • Recuperar uma versão específica.
  • Reverter para uma versão específica.

Ao gerenciar os modelos da Configuração remota, lembre-se do limite de expiração: o modelo ativo da Configuração remota em uso pelo app não expira. No entanto, se for substituída por uma atualização, a versão anterior será armazenada somente por 90 dias. Depois desse período, ela expira e não poderá ser recuperada. Também há um limite total de 300 versões armazenadas. Se você quiser armazenar ou reverter para um modelo que excede esses limites, salve-o e faça o armazenamento manualmente.

Gerenciar versões de modelos da Configuração remota

Veja nesta seção como gerenciar versões de modelos do Configuração remota. Para mais informações sobre como criar, modificar e salvar modelos programaticamente, consulte Modificar a Configuração remota de maneira programática.

Listar todas as versões armazenadas de modelos da Configuração remota

É possível recuperar uma lista de todas as versões armazenadas de modelos do Configuração remota. Exemplo:

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

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 do 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.

A lista de modelos inclui metadados para todas as versões armazenadas, incluindo o horário da atualização, o usuário que as fez e se elas foram feitas pelo console ou pela API REST. Veja um exemplo de um elemento da versão:

{
  "versions": [{
    "version_number": "6",
    "update_time": "2018-05-12T02:38:54Z",
    "update_user": {
      "email": "jane@developer.org",
    },
    "description": "One small change on the console",
    "origin": "CONSOLE",
    "update_type": "INCREMENTAL_UPDATE"
  }]

Recuperar uma versão específica do modelo do Configuração remota

É possível recuperar qualquer versão armazenada específica do modelo do Configuração remota. Exemplo:

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.

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 do Firebase

firebase remoteconfig:get -v VERSION_NUMBER

Como alternativa, é possível gravar a saída em um arquivo especificado com -o, FILENAME.

Reverter para uma versão específica armazenada do modelo do Configuração remota

É possível reverter para qualquer versão armazenada do modelo. Exemplo:

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 reverter para um modelo armazenado do Configuração remota, emita uma solicitação HTTP POST com o método personalizado :rollback e, no corpo da solicitação, 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.

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 do Firebase

firebase remoteconfig:rollback -v VERSION_NUMBER

Essa operação de reversão cria uma 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 está armazenada, caso não tenha atingido a expiração, e a versão 11 se torna o modelo ativo.

Fazer o download dos padrões do modelo da Configuração remota

Como o app nem sempre está conectado à Internet, é necessário configurar os valores padrão do app no lado do cliente para todos os parâmetros da Configuração remota. Além disso, você precisa sincronizar periodicamente os valores padrão do cliente do app e os valores de parâmetros padrão do back-end da Configuração remota, porque 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 da Configuração remota. 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 da Configuração remota antes de lançar uma nova versão para garantir que o app e o back-end da Configuração remota 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

  1. Na guia Parâmetros, abra o Menu e selecione Fazer o download dos valores padrão.
  2. Se aparecer uma solicitação, clique no botão de rádio correspondente ao formato do arquivo que você quer transferir e clique em Fazer download do arquivo.

Saiba mais sobre como importar valores padrão da Configuração remota para seu app em: