Confira os destaques do Firebase no Google I/O 2023. Saiba mais

Introdução à Configuração remota do Firebase


Use o Configuração remota do Firebase para definir parâmetros no seu app e atualizar os valores na nuvem, permitindo modificar a aparência e o comportamento do app sem a necessidade de distribuir uma atualização.

A biblioteca da Configuração remota é usada para armazenar valores de parâmetro padrão no app, buscar valores de parâmetro atualizados no back-end do recurso e controlar quando eles são disponibilizados para o app. Saiba mais em Estratégias de carregamento da Configuração remota.

Este guia contém as etapas para começar a usar o recurso e alguns exemplos de código que estão disponíveis para clonagem ou download no repositório do GitHub firebase/quickstart-unity (em inglês).

Etapa 1: adicionar a Configuração remota ao seu app

Antes de usar a Configuração remota, você precisa:

  • Registrar seu projeto do Unity e configurá-lo para usar o Firebase.

    • Se o projeto do Unity já usa o Firebase, ele já está registrado e configurado para essa plataforma.

    • Se você não tiver um projeto do Unity, faça o download de um app de exemplo.

  • Adicione o SDK do Firebase para Unity (especificamente FirebaseRemoteConfig.unitypackage) ao seu projeto.

Adicionar o Firebase ao projeto do Unity envolve tarefas no Console do Firebase e no projeto aberto do Unity. Por exemplo, fazer o download dos arquivos de configuração do Firebase no console e mover para o projeto do Unity.

Etapa 2: definir valores de parâmetro padrão no app

Você pode definir os valores de parâmetro padrão no app no objeto da Configuração remota. Assim, o app se comporta de maneira previsível antes de se conectar ao back-end da Configuração remota, e os valores padrão vão estar disponíveis se nenhum tiver sido definido no back-end.

Para fazer isso, crie um dicionário de strings e preencha-o com pares de chave-valor que representam os padrões que você quer adicionar. Depois de configurar os valores de parâmetro do back-end da Configuração remota, faça o download de um arquivo com esses pares de chave-valor para criar um dicionário de strings. Para mais informações, consulte Fazer o download dos padrões do modelo da Configuração remota.

(Propriedades sem string serão convertidas no tipo de propriedade quando SetDefaultsAsync() for chamado).

System.Collections.Generic.Dictionary<string, object> defaults =
  new System.Collections.Generic.Dictionary<string, object>();

// These are the values that are used if we haven't fetched data from the
// server
// yet, or if we ask for values that the server doesn't have:
defaults.Add("config_test_string", "default local string");
defaults.Add("config_test_int", 1);
defaults.Add("config_test_float", 1.0);
defaults.Add("config_test_bool", false);

Firebase.RemoteConfig.FirebaseRemoteConfig.DefaultInstance.SetDefaultsAsync(defaults)
  .ContinueWithOnMainThread(task => {

Etapa 3: receber valores de parâmetro para uso no app

Agora você pode receber valores de parâmetro do objeto da Configuração remota. Se você definir valores no back-end da Configuração remota, buscá-los e ativá-los, eles vão estar disponíveis para o app. Caso contrário, receba os valores de parâmetro configurados no app usando SetDefaultsAsync().

Para receber esses valores, use GetValue(), fornecendo a chave de parâmetro como argumento. Isso retorna um ConfigValue, que tem propriedades para converter o valor em vários tipos de base.

Etapa 4: conectar o app no Console do Firebase

No Console do Firebase, adicione seu app ao projeto do Firebase.

Etapa 5: definir os valores de parâmetro

  1. Abra seu projeto no Console do Firebase.
  2. Selecione Configuração remota no menu para explorar o painel do recurso.
  3. Defina os parâmetros com os mesmos nomes dos definidos no seu app. Para cada um, é possível definir um valor padrão (que, por fim, substituirá o valor padrão no app) e valores condicionais. Saiba mais em Parâmetros e condições da Configuração remota.

Etapa 6: buscar e ativar os valores (conforme necessário)

Para buscar valores de parâmetro usando o back-end da Configuração remota, chame o método [FetchAsync()][fetch]. Todos os valores definidos no back-end são buscados e armazenados em cache no objeto da Configuração remota.

// Start a fetch request.
// FetchAsync only fetches new data if the current data is older than the provided
// timespan.  Otherwise it assumes the data is "recent enough", and does nothing.
// By default the timespan is 12 hours, and for production apps, this is a good
// number. For this example though, it's set to a timespan of zero, so that
// changes in the console will always show up immediately.
public Task FetchDataAsync() {
  DebugLog("Fetching data...");
  System.Threading.Tasks.Task fetchTask =
  Firebase.RemoteConfig.FirebaseRemoteConfig.DefaultInstance.FetchAsync(
      TimeSpan.Zero);
  return fetchTask.ContinueWithOnMainThread(FetchComplete);
}

No código acima, FetchComplete é um método com uma assinatura que corresponde aos parâmetros de uma das sobrecargas de ContinueWithOnMainThread().

No exemplo de código abaixo, o método FetchComplete recebe a tarefa anterior (fetchTask), permitindo que FetchComplete determine se ela foi concluída. O código usa Info.LastFetchStatus para determinar se a conclusão também foi deu certo. Se for o caso, os valores dos parâmetros da Configuração remota serão ativados usando activateAsync().

private void FetchComplete(Task fetchTask) {
  if (!fetchTask.IsCompleted) {
    Debug.LogError("Retrieval hasn't finished.");
    return;
  }

  var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
  var info = remoteConfig.Info;
  if(info.LastFetchStatus != LastFetchStatus.Success) {
    Debug.LogError($"{nameof(FetchComplete)} was unsuccessful\n{nameof(info.LastFetchStatus)}: {info.LastFetchStatus}");
    return;
  }

  // Fetch successful. Parameter values must be activated to use.
  remoteConfig.ActivateAsync()
    .ContinueWithOnMainThread(
      task => {
        Debug.Log($"Remote data loaded and ready for use. Last fetch time {info.FetchTime}.");
    });
}

Os valores recuperados com [FetchAsync()][fetch] são armazenados em cache localmente no final da operação, mas não são disponibilizados até que ActivateAsync() seja chamado. Com isso, os novos valores não são aplicados durante o cálculo ou em momentos que possam causar problemas ou comportamentos estranhos.

Etapa 7: detectar atualizações em tempo real

Depois de buscar valores de parâmetros, é possível usar a Configuração remota em tempo real para detectar atualizações do back-end. A Configuração remota em tempo real sinaliza para dispositivos conectados quando atualizações estão disponíveis e busca mudanças automaticamente depois que você publica uma nova versão da Configuração remota.

O SDK do Firebase para Unity v11.0.0 e as versões mais recentes para plataformas Android e Apple oferecem suporte a atualizações em tempo real.

  1. No app, adicione OnConfigUpdateListener para detectar atualizações e buscar novos valores de parâmetros automaticamente. Em seguida, crie um ConfigUpdateListenerEventHandler para processar eventos de atualização. O exemplo a seguir detecta atualizações e usa os valores recém-buscados para mostrar uma mensagem de recepção atualizada.
// Invoke the listener.
void Start()
{
  Firebase.RemoteConfig.FirebaseRemoteConfig.DefaultInstance.OnConfigUpdateListener
    += ConfigUpdateListenerEventHandler;
}

// Handle real-time Remote Config events.
void ConfigUpdateListenerEventHandler(
   object sender, Firebase.RemoteConfig.ConfigUpdateEventArgs args) {
  if (args.Error != Firebase.RemoteConfig.RemoteConfigError.None) {
    Debug.Log(String.Format("Error occurred while listening: {0}", args.Error));
    return;
  }

  Debug.Log("Updated keys: " + string.Join(", ", args.UpdatedKeys));
  // Activate all fetched values and then display a welcome message.
  remoteConfig.ActivateAsync().ContinueWithOnMainThread(
    task => {
        DisplayWelcomeMessage();
    });
}

// Stop the listener.
void OnDestroy() {
    Firebase.RemoteConfig.FirebaseRemoteConfig.DefaultInstance.OnConfigUpdateListener
      -= ConfigUpdateListenerEventHandler;
}

Na próxima vez que você publicar uma nova versão da Configuração remota, os dispositivos que estão executando seu app e detectando as mudanças vão chamar o gerenciador de conclusão.

Próximas etapas

Se ainda não tiver feito isso, confira os casos de uso da Configuração remota, bem como alguns dos conceitos principais e a documentação de estratégias avançadas, que incluem: