Primeiros passos com a Configuração remota do Firebase


Você pode usar o Firebase Remote Config para definir parâmetros no seu aplicativo e atualizar seus valores na nuvem, permitindo modificar a aparência e o comportamento do seu aplicativo sem distribuir uma atualização do aplicativo.

A biblioteca do Configuração remota é usada para armazenar valores de parâmetros padrão no aplicativo, buscar valores de parâmetros atualizados do back-end do Configuração remota e controlar quando os valores buscados são disponibilizados para seu aplicativo. Para saber mais, consulte Estratégias de carregamento do Configuração remota .

Este guia orienta você nas etapas de introdução e fornece alguns exemplos de código, todos disponíveis para clonagem ou download no repositório GitHub firebase/quickstart-unity .

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

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

  • Registre seu projeto Unity e configure-o para usar o Firebase.

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

    • Se você não tiver um projeto do Unity, poderá baixar um aplicativo de exemplo .

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

Observe que adicionar o Firebase ao seu projeto do Unity envolve tarefas no console do Firebase e no seu projeto aberto do Unity (por exemplo, você baixa os arquivos de configuração do Firebase do console e os move para o seu projeto do Unity).

Etapa 2: definir valores de parâmetros padrão no aplicativo

Você pode definir valores de parâmetros padrão no aplicativo no objeto do Configuração remota, para que seu aplicativo se comporte conforme esperado antes de se conectar ao back-end do Configuração remota e para que os valores padrão estejam disponíveis se nenhum for definido no back-end.

Para fazer isso, crie um dicionário de strings e preencha-o com pares chave/valor que representam os padrões que você deseja adicionar. Se você já configurou os valores dos parâmetros de back-end do Configuração remota, poderá fazer download de um arquivo que contém esses pares de chave/valor e usá-lo para construir seu dicionário de strings. Para obter mais informações, consulte Baixar padrões do modelo do Configuração remota .

(Propriedades sem string serão convertidas para o tipo da 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: obtenha valores de parâmetros para usar em seu aplicativo

Agora você pode obter valores de parâmetros do objeto do Configuração remota. Se você definir valores no back-end do Configuração remota, buscá-los e ativá-los, esses valores estarão disponíveis para seu aplicativo. Caso contrário, você obterá os valores dos parâmetros no aplicativo configurados usando SetDefaultsAsync() .

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

Etapa 4: definir valores de parâmetros

  1. No console do Firebase , abra seu projeto.
  2. Selecione Configuração remota no menu para visualizar o painel do Configuração remota.
  3. Defina parâmetros com os mesmos nomes dos parâmetros definidos em seu aplicativo. Para cada parâmetro, você pode definir um valor padrão (que eventualmente substituirá o valor padrão do aplicativo) e valores condicionais. Para saber mais, consulte Parâmetros e condições do Configuração remota .

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

Para buscar valores de parâmetros do back-end do Configuração remota, chame o método FetchAsync() . Todos os valores definidos no back-end são buscados e armazenados em cache no objeto do 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 cuja assinatura corresponde aos parâmetros de uma das sobrecargas de ContinueWithOnMainThread() .

No código de exemplo abaixo, o método FetchComplete recebe a tarefa anterior ( fetchTask ), o que permite que FetchComplete determine se ela foi concluída. O código usa Info.LastFetchStatus para determinar se a conclusão também foi bem-sucedida. Nesse caso, os valores dos parâmetros do 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 obtidos usando FetchAsync() são armazenados em cache localmente quando a busca é concluída, mas não são disponibilizados até que ActivateAsync() seja invocado. Isso permite garantir que os novos valores não sejam aplicados no meio do cálculo ou em outros momentos que possam causar problemas ou comportamento estranho.

Etapa 6: ouça atualizações em tempo real

Depois de buscar os valores dos parâmetros, você poderá usar o Configuração remota em tempo real para detectar atualizações do back-end do Configuração remota. A Configuração remota em tempo real sinaliza aos dispositivos conectados quando há atualizações disponíveis e busca automaticamente as alterações após a publicação de uma nova versão da Configuração remota.

As atualizações em tempo real são compatíveis com o SDK do Firebase Unity v11.0.0+ e superior para plataformas Android e Apple.

  1. No seu aplicativo, adicione um OnConfigUpdateListener para começar a escutar atualizações e buscar automaticamente quaisquer valores de parâmetro novos ou atualizados. Em seguida, crie um ConfigUpdateListenerEventHandler para processar eventos de atualização. O exemplo a seguir escuta atualizações e usa os valores recém-buscados para exibir uma mensagem de boas-vindas 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 do Configuração remota, os dispositivos que estiverem executando seu aplicativo e ouvindo alterações chamarão o gerenciador de conclusão.

Próximos passos

Se você ainda não o fez, explore os casos de uso da configuração remota e dê uma olhada em alguns dos principais conceitos e documentação de estratégias avançadas, incluindo: