Use Firebase Remote Config para definir parâmetros no app e atualizar os respectivos valores na nuvem. Assim, você modifica a aparência e o comportamento do app sem precisar distribuir uma atualização. Este guia traz 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-ios.
Etapa 1: adicionar Remote Config ao app
Adicione o Firebase ao seu projeto da Apple caso ainda não tenha feito isso.
Em Remote Config, Google Analytics é necessário para a segmentação condicional de instâncias de app para propriedades de usuário e públicos. Ative Google Analytics no projeto.
Crie o objeto singleton de Remote Config, conforme mostrado neste exemplo:
Swift
remoteConfig = RemoteConfig.remoteConfig() let settings = RemoteConfigSettings() settings.minimumFetchInterval = 0 remoteConfig.configSettings = settings
Objective-C
self.remoteConfig = [FIRRemoteConfig remoteConfig]; FIRRemoteConfigSettings *remoteConfigSettings = [[FIRRemoteConfigSettings alloc] init]; remoteConfigSettings.minimumFetchInterval = 0; self.remoteConfig.configSettings = remoteConfigSettings;
Esse objeto é usado para armazenar valores de parâmetro padrão no app, buscar valores de parâmetro atualizados no back-end de Remote Config e controlar quando eles são disponibilizados ao app.
Durante o desenvolvimento, recomendamos definir um intervalo de busca mínimo relativamente baixo. Para mais informações, consulte Limitação.
Etapa 2: definir valores de parâmetros padrão no app
É possível definir os valores de parâmetro padrão no app com Remote Config. Assim, o app se comporta de maneira previsível antes de se conectar ao back-end de Remote Config e os valores padrão ficam disponíveis, caso nenhum tenha sido definido no back-end.
Defina um conjunto de nomes e valores de parâmetros padrão usando um objeto
NSDictionary
ou um arquivo plist (links em inglês).Depois de configurar os valores de parâmetro do back-end de Remote Config, é possível fazer o download de um arquivo
plist
gerado com todos os valores padrão e salvar esse arquivo no projeto do Xcode.REST
curl --compressed -D headers -H "Authorization: Bearer token -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig:downloadDefaults?format=PLIST -o RemoteConfigDefaults.plist
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 .plist para iOS, e clique em Fazer o download do arquivo.
Adicione esses valores ao objeto de Remote Config usando
setDefaults:
. O exemplo a seguir define valores padrão no aplicativo de um arquivo plist:Swift
remoteConfig.setDefaults(fromPlist: "RemoteConfigDefaults")
Objective-C
[self.remoteConfig setDefaultsFromPlistFileName:@"RemoteConfigDefaults"];
Etapa 3: receber valores de parâmetros para uso no app
Agora você pode receber valores de parâmetro do objeto de Remote Config. Se você definir
valores no back-end de Remote Config, buscá-los e ativá-los,
eles vão estar disponíveis para o app. Caso
contrário, você vai receber os valores de parâmetro configurados no app
com setDefaults:
.
Para receber esses valores, chame o método
configValueForKey:
fornecendo a chave de parâmetro como argumento.
Etapa 4: definir valores de parâmetros
Com o console de Firebase ou as APIs de back-end de Remote Config, é possível criar valores padrão do back-end que substituem os valores no app de acordo com a lógica condicional ou a segmentação de usuário pretendidas. Nesta seção, confira as etapas a serem seguidas no console de Firebase para criar esses valores.
- Abra o projeto no console de Firebase.
- Selecione Remote Config no menu para acessar o painel de Remote Config.
- Defina os parâmetros com os mesmos nomes dos definidos no seu app. Para cada um, é possível definir um valor padrão (que possivelmente substituirá o valor padrão no app) e também valores condicionais. Saiba mais em Parâmetros e condições de Remote Config.
Etapa 5: buscar e ativar valores
Para buscar os valores de parâmetro de Remote Config, chame o
método
fetchWithCompletionHandler:
ou
fetchWithExpirationDuration:completionHandler:
. Todos os valores definidos no back-end são buscados e
armazenados em cache no objeto de Remote Config.
Para buscar e ativar valores com uma chamada, use
fetchAndActivateWithCompletionHandler:
.
Este exemplo busca valores no back-end de Remote Config (não valores em
cache) e chama activateWithCompletionHandler:
para disponibilizá-los
ao app:
Swift
remoteConfig.fetch { (status, error) -> Void in if status == .success { print("Config fetched!") self.remoteConfig.activate { changed, error in // ... } } else { print("Config not fetched") print("Error: \(error?.localizedDescription ?? "No error available.")") } self.displayWelcome() }
Objective-C
[self.remoteConfig fetchWithCompletionHandler:^(FIRRemoteConfigFetchStatus status, NSError *error) { if (status == FIRRemoteConfigFetchStatusSuccess) { NSLog(@"Config fetched!"); [self.remoteConfig activateWithCompletion:^(BOOL changed, NSError * _Nullable error) { if (error != nil) { NSLog(@"Activate error: %@", error.localizedDescription); } else { dispatch_async(dispatch_get_main_queue(), ^{ [self displayWelcome]; }); } }]; } else { NSLog(@"Config not fetched"); NSLog(@"Error %@", error.localizedDescription); } }];
Esses valores de parâmetro atualizados afetam o comportamento e a aparência do app. Por isso, ative-os sem prejudicar a experiência do usuário, como da próxima vez que ele abrir o app. Confira informações e exemplos em Estratégias de carregamento da Configuração remota.
Etapa 6: detectar atualizações em tempo real
Depois de buscar valores de parâmetros, é possível usar Remote Config em tempo real para detectar atualizações do back-end de Remote Config. Remote Config em tempo real sinaliza para dispositivos conectados quando atualizações estão disponíveis e busca as mudanças automaticamente depois que você publica uma nova versão de Remote Config.
O SDK de Firebase para plataformas Apple v10.7.0 e mais recente é compatível com atualizações em tempo real.
No seu app, chame
addOnConfigUpdateListener
para detectar atualizações e buscar novos valores de parâmetros automaticamente. O exemplo a seguir detecta atualizações e usa os valores recém-buscados quandoactivateWithCompletionHandler
é chamado para mostrar uma mensagem de boas-vindas atualizada.Swift
remoteConfig.addOnConfigUpdateListener { configUpdate, error in guard let configUpdate, error == nil else { print("Error listening for config updates: \(error)") } print("Updated keys: \(configUpdate.updatedKeys)") self.remoteConfig.activate { changed, error in guard error == nil else { return self.displayError(error) } DispatchQueue.main.async { self.displayWelcome() } } }
Objective-C
__weak __typeof__(self) weakSelf = self; [self.remoteConfig addOnConfigUpdateListener:^(FIRRemoteConfigUpdate * _Nonnull configUpdate, NSError * _Nullable error) { if (error != nil) { NSLog(@"Error listening for config updates %@", error.localizedDescription); } else { NSLog(@"Updated keys: %@", configUpdate.updatedKeys); __typeof__(self) strongSelf = weakSelf; [strongSelf.remoteConfig activateWithCompletion:^(BOOL changed, NSError * _Nullable error) { if (error != nil) { NSLog(@"Activate error %@", error.localizedDescription); } dispatch_async(dispatch_get_main_queue(), ^{ [strongSelf displayWelcome]; }); }]; } }];
Na próxima vez que você publicar uma nova versão de Remote Config, os dispositivos que estão executando o app e detectando as mudanças vão chamar o gerenciador de conclusão.
Limitação
Se um aplicativo fizer muitas buscas em um curto período, as chamadas de busca serão limitadas, e o SDK retornará FIRRemoteConfigFetchStatusThrottled
. Antes da versão 6.3.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 flexíveis.
Durante o desenvolvimento de apps, sempre faça buscas para atualizar o cache
com mais frequência (muitas vezes por hora) para permitir a iteração rápida enquanto você desenvolve
e testa seu app. As atualizações da Configuração remota em tempo real ignoram automaticamente
o cache quando a configuração é atualizada no servidor. Caso queira acomodar a iteração rápida
em um projeto com vários desenvolvedores, é possível adicionar temporariamente uma propriedade
FIRRemoteConfigSettings
com um intervalo de busca mínimo baixo
(MinimumFetchInterval
) no app.
O intervalo de busca de produção padrão e recomendado para Remote Config é de 12 horas, o que significa que a busca pelas configurações no back-end não acontecerá mais de uma vez em um período 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
FIRRemoteConfigSettings.MinimumFetchInterval
- O valor padrão de 12 horas
Próximas etapas
Se ainda não tiver feito isso, confira os casos de uso de Remote Config, bem como alguns dos principais conceitos e a documentação de estratégias avançadas, que incluem: