Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Modelos de configuração remota e controle de versão

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

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

Aqui está 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 você atualiza os parâmetros, o Remote Config cria um novo modelo do Remote config com versão 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 sequencialmente a partir do valor inicial armazenado pelo Configuração remota. Todos os modelos incluem um campo de version conforme mostrado, contendo metadados sobre essa versão específica.

Com o Firebase console, a Firebase CLI ou as APIs de back-end do Configuração remota, você pode realizar estas tarefas de gerenciamento de versão:

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

Ao gerenciar os modelos do Configuração remota, lembre-se do limite de expiração: o modelo ativo do Configuração remota atual em uso pelo seu aplicativo não expira; no entanto, se for substituída por uma atualização, a versão anterior será armazenada apenas por 90 dias, após os quais expirará e não poderá ser recuperada. Há também um limite total de 300 versões armazenadas. Se você quiser armazenar ou reverter para um modelo fora desses limites, salve-o e armazene-o manualmente.

Gerenciar versões de modelo do Configuração remota

Esta seção descreve como gerenciar versões do seu modelo do Configuração remota. Para obter mais detalhes sobre como criar, modificar e salvar modelos programaticamente, consulte Modify Remote Config programaticamente .

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

Você pode recuperar uma lista de todas as versões armazenadas do modelo do Configuração remota. Por 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());
}

DESCANSO

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 "relógio" exibido no canto superior direito. Isso abre a página Histórico de alterações listando todas as versões de modelo armazenadas em um menu de lista à direita.

Os detalhes exibidos para cada versão armazenada incluem informações sobre se as alterações foram originadas com o Console, com a API REST, de uma reversão ou se foram alterações incrementais de 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. Passe '0' para buscar todas as versões.

A lista de modelos inclui metadados para todas as versões armazenadas, incluindo a hora da atualização, o usuário que a fez e se foi feita por meio do console ou da API REST. Aqui está um exemplo de um elemento de versão:

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

Você pode recuperar qualquer versão armazenada específica do modelo do Configuração remota. Por exemplo:

Node.js

Passe getTemplate() sem nenhum argumento para recuperar a versão mais recente do modelo ou 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());

DESCANSO

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 ; você não pode usá-lo para especificar números de versão para atualizações. Uma solicitação de obtenção 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 visualizar detalhes de outra versão na lista, selecione-a no menu à direita.

Você pode visualizar uma comparação detalhada da versão selecionada no momento e de qualquer outra versão armazenada passando o mouse sobre o menu de contexto de qualquer versão não selecionada e selecionando Comparar com a versão selecionada.

CLI do Firebase

firebase remoteconfig:get -v VERSION_NUMBER

Opcionalmente, você pode gravar a saída em um arquivo especificado com -o, FILENAME .

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

Você pode reverter para qualquer versão armazenada do modelo. Por 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());
  }
}

DESCANSO

Para reverter para um modelo do Remote Config armazenado, emita um HTTP POST com o método personalizado :rollback e, no corpo da solicitação, a versão específica a ser aplicada. Por 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 contém o conteúdo do modelo armazenado agora ativo, com seus novos metadados de versão.

Console do Firebase

Para versões de modelo anteriores qualificadas para reversão, um botão de opção para reverter para essa versão é exibido no canto superior direito da página Histórico de alterações . Clique e confirme isso somente se tiver certeza de que deseja reverter para essa versão e usar esses valores imediatamente para todos os aplicativos e usuários.

CLI do Firebase

firebase remoteconfig:rollback -v VERSION_NUMBER

Observe que essa operação de reversão cria efetivamente uma nova versão numerada. Por exemplo, reverter da versão 10 para a versão 6 cria efetivamente uma nova cópia da versão 6, diferindo da original apenas porque seu número de versão é 11. A versão original 6 ainda é armazenada, supondo que não tenha expirado e a versão 11 se torna o modelo ativo.

Baixe e publique modelos do Configuração remota

Baixe e publique modelos de Configuração Remota para integrá-los ao seu controle de origem e sistemas de compilação, automatizar atualizações de configuração e manter parâmetros e valores sincronizados em vários projetos.

Você pode fazer o download do modelo do Configuração remota atualmente ativo programaticamente ou no Firebase console. Você pode atualizar o arquivo JSON exportado e publicá-lo no mesmo projeto ou publicá-lo em um projeto novo ou existente.

Digamos que você tenha vários projetos que representam diferentes estágios de seu ciclo de vida de desenvolvimento de software, como ambientes de desenvolvimento, teste, preparação e produção. Nesse caso, você pode promover um modelo totalmente testado de seu ambiente de teste para seu ambiente de produção baixando-o de seu projeto de teste e publicando-o em seu projeto de produção.

Você também pode usar esse método para migrar configurações de um projeto para outro ou preencher um novo projeto com parâmetros e valores de um projeto estabelecido.

Parâmetros e valores de parâmetros criados especificamente como variantes em um experimento de teste A/B não são incluídos nos modelos exportados.

Para exportar e importar modelos do Configuração remota:

  1. Faça download do modelo atual do Configuração remota .
  2. Valide o modelo do Configuração remota .
  3. Publique o modelo do Configuração remota .

Faça o download do modelo de configuração remota atual

Você pode fazer o download do modelo do Configuração remota atual e ativo programaticamente ou usando o console do Firebase.

Use os comandos a seguir para fazer download do modelo ativo do Configuração remota no formato JSON:

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());

DESCANSO

curl --compressed -D headers -H "Authorization: Bearer token" -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig -o filename

Esse comando gera a carga JSON para um arquivo e os cabeçalhos (incluindo a ETag) para um arquivo de headers separado.

Console do Firebase

  1. Na guia Parâmetros ou Condições de Configuração Remota , abra o menu e selecione Baixar arquivo de configuração atual .
  2. Quando solicitado, clique em Baixar arquivo de configuração , escolha o local onde deseja salvar o arquivo e clique em Salvar .

CLI do Firebase

firebase remoteconfig:get -o filename

Validar o modelo do Configuração remota

Você pode validar suas atualizações de modelo antes de publicá-las usando o SDK Admin do Firebase ou a API REST. Os modelos também são validados quando você tenta publicar a partir da Firebase CLI ou do Firebase console.

O processo de validação de modelo verifica erros como chaves duplicadas para parâmetros e condições, nomes de condição inválidos ou condições inexistentes ou ETags mal formatadas. Por exemplo, uma solicitação contendo mais do que o número permitido de chaves—2000—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());
  }
}

DESCANSO

Valide as atualizações do modelo anexando 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 seu modelo foi validado com sucesso, o comando curl retornará o modelo JSON que você enviou e, no arquivo de headers salvo, você encontrará um status HTTP/2 200 e uma ETag atualizada com o sufixo -0 . Se seu modelo não foi validado, você receberá o erro de validação na resposta JSON e seu arquivo de headers conterá uma resposta diferente de 200 (e nenhuma ETag).

Publicar o modelo do Configuração remota

Depois de baixar um modelo, fazer as alterações necessárias no conteúdo JSON e validá-lo, você pode publicá-lo em um projeto.

A publicação de um modelo substitui todo o modelo de configuração existente 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 será excluído do servidor e não estará mais disponível para os clientes.

Após a publicação, as alterações nos parâmetros e valores ficam imediatamente disponíveis para seus aplicativos e usuários. Se necessário, você pode reverter para uma versão anterior .

Use os seguintes comandos para publicar seu modelo:

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

DESCANSO

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 , você pode especificar o conteúdo usando o caractere "@", seguido pelo nome do arquivo.

Console do Firebase

  1. Na guia Parâmetros ou Condições do Remote Config , abra o menu e selecione Publicar de um arquivo .
  2. Quando solicitado, clique em Procurar , navegue e selecione o arquivo do Configuração remota que deseja publicar e clique em Selecionar .
  3. O arquivo será validado e, se for bem-sucedido, você poderá clicar em Publicar para disponibilizar a configuração imediatamente para seus aplicativos e usuários.

As personalizações e as condições do Configuração remota estão incluídas nos modelos baixados, por isso é importante estar ciente das seguintes limitações ao tentar publicar em um projeto diferente:

  • As personalizações não podem ser importadas de projeto para projeto.

    Por exemplo, se você tiver personalizações habilitadas em seu projeto e baixar e editar um modelo, poderá publicá-lo no mesmo projeto, mas não poderá publicá-lo em um projeto diferente, a menos que exclua as personalizações do modelo.

  • As condições podem ser importadas de projeto para projeto, mas observe que quaisquer valores condicionais específicos (como IDs de aplicativos ou públicos-alvo) devem existir no projeto de destino antes da publicação.

    Por exemplo, se você tiver um parâmetro do Configuração remota que usa uma condição que especifica um valor de plataforma de iOS , o modelo pode ser publicado em outro projeto, pois os valores de plataforma são os mesmos para qualquer projeto. No entanto, se ele contiver uma condição que dependa de um ID de aplicativo específico ou de um público de usuário que não exista no projeto de destino, a validação falhará.

  • Se o modelo que você planeja publicar contiver condições que dependem do Google Analytics, o Analytics deverá ser ativado no projeto de destino.

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

Como seu aplicativo nem sempre pode estar conectado à Internet, você deve configurar os valores padrão do aplicativo do lado do cliente para todos os parâmetros do Configuração remota. Você também deve sincronizar periodicamente os valores padrão do cliente do aplicativo e os valores de parâmetro padrão do back-end do Remote config, pois eles podem mudar com o tempo.

Conforme descrito nos links específicos da plataforma no final desta seção, você pode definir esses padrões manualmente em seu aplicativo ou simplificar esse processo baixando arquivos que contêm apenas os pares de valores-chave para todos os parâmetros e seus valores padrão no modelo de configuração remota ativo. Você pode incluir esse arquivo em seu projeto e configurar seu aplicativo para importar esses valores.

Você pode baixar esses arquivos em formato XML para aplicativos Android, formato de lista de propriedades (plist) para aplicativos iOS e JSON para aplicativos Web.

Recomendamos baixar periodicamente os padrões do Configuração remota antes de qualquer novo lançamento de aplicativo para garantir que seu aplicativo e o back-end do Configuração remota permaneçam sincronizados.

Para baixar um arquivo que contém padrões de modelo:

DESCANSO

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 do format , dependendo de qual formato de arquivo você deseja baixar.

Console do Firebase

  1. Na guia Parâmetros , abra o menu e selecione Baixar valores padrão .
  2. Quando solicitado, clique no botão de opção que corresponde ao formato de arquivo que deseja baixar e clique em Baixar arquivo .

Para obter mais informações sobre como importar valores padrão do Configuração remota para seu aplicativo, consulte: