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


Use a 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: definir valores de parâmetros

  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 5: buscar e ativar os valores (conforme necessário)

Para buscar os valores de parâmetro no back-end da Configuração remota, chame o método FetchAsync(). 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() 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 6: 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: