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
- Abra seu projeto no Console do Firebase.
- Selecione Configuração remota no menu para explorar o painel do recurso.
- 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.
- No app, adicione
OnConfigUpdateListener
para detectar atualizações e buscar novos valores de parâmetros automaticamente. Em seguida, crie umConfigUpdateListenerEventHandler
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: