Вы можете использовать Firebase Remote Config, чтобы определить параметры в своем приложении и обновить их значения в облаке, что позволит вам изменить внешний вид и поведение вашего приложения без распространения обновления приложения. В этом руководстве описаны шаги, необходимые для начала работы, и предоставлен пример кода, который можно клонировать или загрузить из репозитория GitHub firebase/quickstart-ios .
Шаг 1. Добавьте Remote Config в свое приложение.
Установите Firebase SDK для платформ Apple.
Создайте одноэлементный объект Remote Config, как показано в следующем примере:
Быстрый
remoteConfig = RemoteConfig.remoteConfig() let settings = RemoteConfigSettings() settings.minimumFetchInterval = 0 remoteConfig.configSettings = settings
Цель-C
self.remoteConfig = [FIRRemoteConfig remoteConfig]; FIRRemoteConfigSettings *remoteConfigSettings = [[FIRRemoteConfigSettings alloc] init]; remoteConfigSettings.minimumFetchInterval = 0; self.remoteConfig.configSettings = remoteConfigSettings;
Этот объект используется для хранения значений параметров по умолчанию в приложении, извлечения обновленных значений параметров из бэкэнда Remote Config и управления тем, когда полученные значения становятся доступными для вашего приложения.
Во время разработки рекомендуется установить относительно низкий минимальный интервал выборки. Дополнительную информацию см. в разделе Дросселирование .
Шаг 2. Установите значения параметров по умолчанию в приложении
Вы можете установить значения параметров по умолчанию в приложении в объекте Remote Config, чтобы ваше приложение вело себя должным образом, прежде чем оно подключится к серверной части Remote Config, и чтобы значения по умолчанию были доступны, если ни одно из них не установлено в серверной части.
Определите набор имен параметров и значений параметров по умолчанию, используя объект
NSDictionary
или файл plist .Если вы уже настроили значения внутренних параметров Remote Config, вы можете загрузить сгенерированный файл
plist
, который включает все значения по умолчанию, и сохранить его в своем проекте Xcode.ОТДЫХ
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
Консоль Firebase
На вкладке «Параметры» откройте меню и выберите «Загрузить значения по умолчанию» .
При появлении запроса включите .plist для iOS , затем нажмите «Загрузить файл» .
Добавьте эти значения в объект Remote Config с помощью
setDefaults:
. В следующем примере устанавливаются значения по умолчанию в приложении из файла plist:Быстрый
remoteConfig.setDefaults(fromPlist: "RemoteConfigDefaults")
Цель-C
[self.remoteConfig setDefaultsFromPlistFileName:@"RemoteConfigDefaults"];
Шаг 3. Получите значения параметров для использования в приложении
Теперь вы можете получить значения параметров из объекта Remote Config. Если позже вы зададите значения в бэкэнде Remote Config, извлечете их, а затем активируете, эти значения станут доступны вашему приложению. В противном случае вы получите значения параметров в приложении, настроенные с помощью setDefaults:
. Чтобы получить эти значения, вызовите метод configValueForKey:
указав ключ параметра в качестве аргумента.
Шаг 4: Установите значения параметров
Using the Firebase console or the Remote Config backend APIs , you can create new backend default values that override the in-app values according to your desired conditional logic or user targeting. This section walks you through the Firebase console steps to create these values.
- In the Firebase console , open your project.
- Select Remote Config from the menu to view the Remote Config dashboard.
- Define parameters with the same names as the parameters that you defined in your app. For each parameter, you can set a default value (which will eventually override the in-app default value) and you can also set conditional values. To learn more, see Remote Config Parameters and Conditions .
Step 5: Fetch and activate values
To fetch parameter values from Remote Config, call the fetchWithCompletionHandler:
or fetchWithExpirationDuration:completionHandler:
method. Any values that you set on the backend are fetched and cached in the Remote Config object.
For cases where you want to fetch and activate values in one call, use fetchAndActivateWithCompletionHandler:
.
This example fetches values from the Remote Config backend (not cached values) and calls activateWithCompletionHandler:
to make them available to the 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); } }];
Because these updated parameter values affect the behavior and appearance of your app, you should activate the fetched values at a time that ensures a smooth experience for your user, such as the next time that the user opens your app. See Remote Config loading strategies for more information and examples.
Step 6: Listen for updates in real time
After you fetch parameter values, you can use real-time Remote Config to listen for updates from the Remote Config backend. Real-time Remote Config signals to connected devices when updates are available and automatically fetches the changes after you publish a new Remote Config version.
In your app, call
addOnConfigUpdateListener
to start listening for updates and automatically fetch any new or updated parameter values. The following example listens for updates and whenactivateWithCompletionHandler
is called, uses the newly fetched values to display an updated welcome message.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]; }); }]; } }];
The next time you publish a new version of your Remote Config, devices that are running your app and listening for changes will call the completion handler.
Throttling
If an app fetches too many times in a short time period, fetch calls are throttled and the SDK returns FIRRemoteConfigFetchStatusThrottled
. Before SDK version 6.3.0, the limit was 5 fetch requests in a 60 minute window (newer versions have more permissive limits).
During app development, you might want to refresh the cache very frequently (many times per hour) to let you rapidly iterate as you develop and test your app. To accommodate rapid iteration on a project with numerous developers, you can temporarily add a FIRRemoteConfigSettings
property with a low minimum fetch interval ( MinimumFetchInterval
) in your app.
The default and recommended production fetch interval for Remote Config is 12 hours, which means that configs won't be fetched from the backend more than once in a 12 hour window, regardless of how many fetch calls are actually made. Specifically, the minimum fetch interval is determined in this following order:
- The parameter in
fetch(long)
- The parameter in
FIRRemoteConfigSettings.MinimumFetchInterval
- The default value of 12 hours
Next steps
If you haven't already, explore the Remote Config use cases , and take a look at some of the key concepts and advanced strategies documentation, including: