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 para modificar e gerenciar sua configuração.

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, o Configuração remota cria um novo 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 ou as APIs de back-end do Configuração remota, é possível realizar as seguintes tarefas de gerenciamento de versões:

  • 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 do Configuração remota, não se esqueça do limite de expiração: 90 dias a partir do momento da criação ou 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. O modelo ativo do Configuração remota em uso pelo app não expira. No entanto, se esse modelo estiver ativo por mais de 90 dias desde a criação e for substituído por uma atualização, ele não poderá ser recuperado novamente devido à expiração.

Gerenciar versões de modelos do Configuração remota com o Console do Firebase

O Console do Firebase apresenta uma interface gráfica para ativar a listagem de versões de modelos, a visualização dos detalhes e a realização de reversões conforme necessário. Para executar essas tarefas, siga estas etapas:

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

  2. Por padrão, o painel de detalhes exibe o modelo ativo atualmente. Para ver detalhes de outra versão na lista, selecione-a no menu à 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.

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

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

Gerenciar versões de modelos do Configuração remota com as APIs de back-end

Nesta seção, você verá como gerenciar versões de modelos do Configuração remota usando a API REST e o SDK Admin do Firebase. Para mais informações sobre como criar, modificar e salvar modelos programaticamente, consulte Modificar o Configuração remota de maneira programática.

Listar todas as versões armazenadas do modelo do Configuração remota

Com as APIs de back-end do Configuração remota, é possível recuperar uma lista de todas as versões armazenadas do modelo desse recurso. 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);
    });
}

REST

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

A resposta inclui metadados de todas as versões armazenadas, incluindo a hora da atualização, o usuário que as criou e se elas foram feitas por meio do console ou da API REST. Veja um exemplo de um elemento de 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

Com as APIs de back-end do Configuração remota, é possível recuperar qualquer versão armazenada do modelo desse recurso. Envie getTemplate() sem argumentos para recuperar a versão mais recente do modelo. Para recuperar uma versão específica, use getTemplateAtVersion(). Exemplo:

Node.js

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

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</pre>

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 do Configuração remota

Com as APIs de back-end 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);
  })

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>" -X POST https://firebaseremoteconfig.googleapis.com/v1/projects/<var>my-project-id</var>/remoteConfig:rollback -d '{"version_number": 6}'</pre>

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.