Use a Configuração remota do Firebase para definir parâmetros no app e atualizar os valores dele na nuvem. Dessa forma, é possível modificar a aparência e o comportamento do seu app sem distribuir uma atualização dele. Veja neste guia as noções básicas e os exemplos de código, que estão disponíveis para clonagem ou download no repositório do GitHub firebase/quickstart-android.
Adicionar o Firebase e o SDK do recurso Configuração remota ao seu app
Adicione o Firebase ao projeto para Android, caso ainda não tenha feito isso.
Na Configuração remota, o Google Analytics é necessário para a segmentação condicional de instâncias de apps para propriedades do usuário e públicos-alvo. Ative o Google Analytics no seu projeto.
Usando a BoM do Firebase para Android, declare a dependência da biblioteca Android do recurso Configuração remota no seu arquivo do Gradle (nível do app) do módulo, que geralmente é
app/build.gradle
.Além disso, como parte da configuração do Google Analytics, você precisa adicionar o SDK do Firebase para o Google Analytics ao seu app.
Java
dependencies { // Import the BoM for the Firebase platform implementation platform('com.google.firebase:firebase-bom:30.3.1') // Declare the dependencies for the Remote Config and Analytics libraries // When using the BoM, you don't specify versions in Firebase library dependencies implementation 'com.google.firebase:firebase-config' implementation 'com.google.firebase:firebase-analytics' }
Com a BoM do Firebase para Android, seu app sempre usará versões compatíveis das bibliotecas do Firebase para Android.
(Alternativa) Declare as dependências das bibliotecas do Firebase sem usar a BoM.
Se você preferir não usar a BoM do Firebase, especifique cada versão das bibliotecas do Firebase na linha de dependência correspondente.
Caso você use várias bibliotecas do Firebase no seu app, recomendamos usar a BoM para gerenciar as versões dessas bibliotecas para garantir a compatibilidade de todas elas.
dependencies { // Declare the dependencies for the Remote Config and Analytics libraries // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation 'com.google.firebase:firebase-config:21.1.1' implementation 'com.google.firebase:firebase-analytics:21.1.0' }
Kotlin+KTX
dependencies { // Import the BoM for the Firebase platform implementation platform('com.google.firebase:firebase-bom:30.3.1') // Declare the dependencies for the Remote Config and Analytics libraries // When using the BoM, you don't specify versions in Firebase library dependencies implementation 'com.google.firebase:firebase-config-ktx' implementation 'com.google.firebase:firebase-analytics-ktx' }
Com a BoM do Firebase para Android, seu app sempre usará versões compatíveis das bibliotecas do Firebase para Android.
(Alternativa) Declare as dependências das bibliotecas do Firebase sem usar a BoM.
Se você preferir não usar a BoM do Firebase, especifique cada versão das bibliotecas do Firebase na linha de dependência correspondente.
Caso você use várias bibliotecas do Firebase no seu app, recomendamos usar a BoM para gerenciar as versões dessas bibliotecas para garantir a compatibilidade de todas elas.
dependencies { // Declare the dependencies for the Remote Config and Analytics libraries // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation 'com.google.firebase:firebase-config-ktx:21.1.1' implementation 'com.google.firebase:firebase-analytics-ktx:21.1.0' }
Receber o objeto Singleton da Configuração remota
Receba uma instância de objeto do recurso Configuração remota e defina o intervalo mínimo de busca para permitir atualizações frequentes:
Java
FirebaseRemoteConfig mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance(); FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder() .setMinimumFetchIntervalInSeconds(3600) .build(); mFirebaseRemoteConfig.setConfigSettingsAsync(configSettings);
Kotlin+KTX
val remoteConfig: FirebaseRemoteConfig = Firebase.remoteConfig val configSettings = remoteConfigSettings { minimumFetchIntervalInSeconds = 3600 } remoteConfig.setConfigSettingsAsync(configSettings)
O objeto Singleton é usado para armazenar valores de parâmetros padrão no aplicativo, buscar valores de parâmetro atualizados do back-end e controlar quando eles são disponibilizados no app.
Durante o desenvolvimento, recomendamos definir um intervalo de busca mínimo relativamente baixo. Para mais informações, consulte Limitação.
Definir valores de parâmetros padrão no app
É possível definir os valores de parâmetros padrão no app com o 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 estarão disponíveis, caso nenhum tenha sido definido no back-end.
Defina um conjunto de valores padrão e nomes de parâmetro usando um objeto Map ou um arquivo de recursos XML (ambos em inglês) armazenado na pasta
res/xml
do app. O app de amostra no guia de início rápido do recurso Configuração remota usa um arquivo XML para definir valores e nomes de parâmetros padrão.Depois de configurar os valores de parâmetros de back-end da Configuração remota, é possível fazer o download de um arquivo XML gerado com todos os valores padrão e salvá-lo no diretório
res/xml
do app:REST
curl --compressed -D headers -H "Authorization: Bearer token -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig:downloadDefaults?format=XML -o remote_config_defaults.xml
Console do Firebase
Na guia Parâmetros, abra o Menu e selecione Fazer o download dos valores padrão.
Quando solicitado, ative a opção .xml para Android e clique em Fazer o download do arquivo.
Adicione esses valores ao objeto da Configuração remota usando
setDefaultsAsync(int)
, conforme mostrado:Java
mFirebaseRemoteConfig.setDefaultsAsync(R.xml.remote_config_defaults);
Kotlin+KTX
remoteConfig.setDefaultsAsync(R.xml.remote_config_defaults)
Receber valores de parâmetro para uso no app
É possível receber valores de parâmetro do objeto da Configuração remota. Se você definir
valores no back-end, buscá-los e, depois, ativá-los, eles estarão disponíveis para seu app. Caso contrário, você receberá os valores no app
configurados usando setDefaultsAsync(int)
.
Para ter esses valores, chame o método listado a seguir que está mapeado ao tipo de dado esperado pelo app, fornecendo a chave de parâmetro como argumento:
Definir valores de parâmetro no back-end do recurso Configuração remota
Usando o Console do Firebase ou as APIs de back-end do recurso Configuração remota, é possível criar novos valores padrão do lado do servidor que substituem os valores no app de acordo com a lógica condicional ou a segmentação por usuário desejadas. Nesta seção, descrevemos as etapas do Console do Firebase para criar esses valores.
- Abra seu projeto no Console do Firebase.
- Selecione Configuração remota no menu para ver 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 correspondente), assim como valores condicionais. Para saber mais, consulte Parâmetros e condições do recurso Configuração remota.
Buscar e ativar valores
- Para recuperar os valores de parâmetros usando o back-end da Configuração remota, chame o método
fetch()
. Todos os valores definidos no back-end são recuperados e armazenados no objeto da Configuração remota. Para disponibilizar esse valores de parâmetro recuperados ao aplicativo, chame o método
activate()
.Se você quiser buscar e ativar valores em uma chamada, use uma solicitação
fetchAndActivate()
para buscar valores de back-end da Configuração remota e disponibilizá-los para o app:Java
mFirebaseRemoteConfig.fetchAndActivate() .addOnCompleteListener(this, new OnCompleteListener<Boolean>() { @Override public void onComplete(@NonNull Task<Boolean> task) { if (task.isSuccessful()) { boolean updated = task.getResult(); Log.d(TAG, "Config params updated: " + updated); Toast.makeText(MainActivity.this, "Fetch and activate succeeded", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(MainActivity.this, "Fetch failed", Toast.LENGTH_SHORT).show(); } displayWelcomeMessage(); } });
Kotlin+KTX
remoteConfig.fetchAndActivate() .addOnCompleteListener(this) { task -> if (task.isSuccessful) { val updated = task.result Log.d(TAG, "Config params updated: $updated") Toast.makeText(this, "Fetch and activate succeeded", Toast.LENGTH_SHORT).show() } else { Toast.makeText(this, "Fetch failed", Toast.LENGTH_SHORT).show() } displayWelcomeMessage() }
Como esses valores de parâmetro atualizados afetam o comportamento e a aparência do app, ative-os quando isso não prejudicar a experiência do usuário. Por exemplo, na próxima vez em que ele abrir o app. Consulte Estratégias de carregamento da Configuração remota para mais informações e exemplos.
Limitação
Se um aplicativo fizer muitas buscas em um curto período, as chamadas de busca serão
limitadas e o SDK retornará
FirebaseRemoteConfigFetchThrottledException
. Antes da versão 17.0.0 do SDK, o limite era de cinco solicitações de busca em um intervalo de 60 minutos (as versões mais recentes têm limites mais permissivos).
Durante o desenvolvimento de apps, convém buscar e ativar configurações com muita frequência (muitas vezes por hora) para permitir a iteração rápida à medida que você desenvolve e testa seu app. Para possibilitar a iteração rápida em um projeto com até 10 desenvolvedores, adicione temporariamente um objeto FirebaseRemoteConfigSettings
com um intervalo mínimo de busca baixo (setMinimumFetchIntervalInSeconds
) no seu app.
O intervalo de busca mínimo padrão do recurso Configuração remota é de 12 horas, o que significa que a busca pelas configurações no back-end não vai acontecer mais de uma vez em uma janela de 12 horas, independentemente de quantas chamadas de busca forem realmente realizadas. O intervalo mínimo de busca é determinado especificamente na seguinte ordem:
- O parâmetro em
fetch(long)
- O parâmetro em
FirebaseRemoteConfigSettings.setMinimumFetchIntervalInSeconds(long)
- O valor padrão de 12 horas
Para definir o intervalo mínimo de busca para um valor personalizado, use FirebaseRemoteConfigSettings.Builder.setMinimumFetchIntervalInSeconds(long)
.
Próximas etapas
Se ainda não tiver feito isso, veja os casos de uso do recurso Configuração remota e analise alguns dos principais conceitos e a documentação de estratégias avançadas, incluindo: