Catch up on highlights from Firebase at Google I/O 2023. Learn more

Начните работу с Firebase Remote Config


Вы можете использовать Firebase Remote Config, чтобы определить параметры в своем приложении и обновить их значения в облаке, что позволит вам изменить внешний вид и поведение вашего приложения без распространения обновления приложения. В этом руководстве описаны шаги, необходимые для начала работы, и предоставлен пример кода, который можно клонировать или загрузить из репозитория GitHub firebase/quickstart-ios .

Шаг 1. Добавьте Remote Config в свое приложение.

  1. Установите Firebase SDK для платформ Apple.

  2. Создайте одноэлементный объект 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, и чтобы значения по умолчанию были доступны, если ни одно из них не установлено в серверной части.

  1. Определите набор имен параметров и значений параметров по умолчанию, используя объект 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

    1. На вкладке «Параметры» откройте меню и выберите «Загрузить значения по умолчанию» .

    2. При появлении запроса включите .plist для iOS , затем нажмите «Загрузить файл» .

  2. Добавьте эти значения в объект Remote Config с помощью setDefaults: . В следующем примере устанавливаются значения по умолчанию в приложении из файла plist:

    Быстрый

    remoteConfig.setDefaults(fromPlist: "RemoteConfigDefaults")

    Цель-C

    [self.remoteConfig setDefaultsFromPlistFileName:@"RemoteConfigDefaults"];

Шаг 3. Получите значения параметров для использования в приложении

Теперь вы можете получить значения параметров из объекта Remote Config. Если позже вы зададите значения в бэкэнде Remote Config, извлечете их, а затем активируете, эти значения станут доступны вашему приложению. В противном случае вы получите значения параметров в приложении, настроенные с помощью setDefaults: . Чтобы получить эти значения, вызовите метод configValueForKey: указав ключ параметра в качестве аргумента.

Шаг 4: Установите значения параметров

Используя консоль Firebase или внутренние API-интерфейсы Remote Config , вы можете создавать новые внутренние значения по умолчанию, которые переопределяют значения в приложении в соответствии с желаемой условной логикой или пользовательским таргетингом. В этом разделе вы узнаете, как создать эти значения в консоли Firebase.

  1. В консоли Firebase откройте свой проект.
  2. Выберите Remote Config в меню, чтобы просмотреть панель управления Remote Config.
  3. Определите параметры с теми же именами, что и параметры, которые вы определили в своем приложении. Для каждого параметра вы можете установить значение по умолчанию (которое в конечном итоге переопределит значение по умолчанию в приложении), а также вы можете установить условные значения. Дополнительные сведения см. в разделе Параметры и условия удаленной конфигурации .

Шаг 5: Получить и активировать значения

Чтобы получить значения параметров из Remote Config, вызовите метод fetchWithCompletionHandler: или fetchWithExpirationDuration:completionHandler: Любые значения, которые вы устанавливаете на серверной части, извлекаются и кэшируются в объекте Remote Config.

В случаях, когда вы хотите получить и активировать значения за один вызов, используйте fetchAndActivateWithCompletionHandler: .

В этом примере значения извлекаются из серверной части Remote Config (не кэшированные значения) и вызывается activateWithCompletionHandler: чтобы сделать их доступными для приложения:

Быстрый

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()
}

Цель-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);
    }
}];

Поскольку эти обновленные значения параметров влияют на поведение и внешний вид вашего приложения, вы должны активировать полученные значения в то время, когда это обеспечивает бесперебойную работу вашего пользователя, например, когда пользователь в следующий раз открывает ваше приложение. Дополнительную информацию и примеры см. в разделе Стратегии загрузки Remote Config .

Шаг 6. Следите за обновлениями в режиме реального времени

После получения значений параметров вы можете использовать Remote Config в режиме реального времени для прослушивания обновлений из серверной части Remote Config. Remote Config в режиме реального времени сигнализирует подключенным устройствам, когда доступны обновления, и автоматически извлекает изменения после публикации новой версии Remote Config.

Обновления в реальном времени поддерживаются Firebase SDK для платформ Apple версии 10.7.0+ и выше.

  1. В своем приложении вызовите addOnConfigUpdateListener , чтобы начать прослушивание обновлений и автоматически получать любые новые или обновленные значения параметров. В следующем примере выполняется прослушивание обновлений, и при вызове activateWithCompletionHandler используются вновь полученные значения для отображения обновленного приветственного сообщения.

    Быстрый

    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()
        }
      }
    }
    

    Цель-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];
          });
        }];
      }
    }];
    
  2. В следующий раз, когда вы опубликуете новую версию Remote Config, устройства, на которых запущено ваше приложение и ожидают изменений, вызовут обработчик завершения.

Дросселирование

Если приложение выполняет выборку слишком много раз за короткий промежуток времени, вызовы выборки регулируются, и SDK возвращает FIRRemoteConfigFetchStatusThrottled . До версии SDK 6.3.0 ограничение составляло 5 запросов на выборку в 60-минутном окне (более новые версии имеют более широкие ограничения).

Во время разработки приложения вы можете захотеть чаще выполнять выборку, чтобы очень часто обновлять кеш (много раз в час), чтобы вы могли быстро выполнять итерации при разработке и тестировании приложения. Обновления Remote Config в режиме реального времени автоматически обходят кэш при обновлении конфигурации на сервере. Чтобы обеспечить быструю итерацию проекта с многочисленными разработчиками, вы можете временно добавить в свое приложение свойство FIRRemoteConfigSettings с низким минимальным интервалом выборки ( MinimumFetchInterval ).

Рекомендуемый по умолчанию и рекомендуемый интервал выборки рабочей среды для Remote Config составляет 12 часов, что означает, что конфигурации не будут извлекаться из серверной части более одного раза в 12-часовое окно, независимо от того, сколько вызовов выборки фактически сделано. В частности, минимальный интервал выборки определяется в следующем порядке:

  1. Параметр в fetch(long)
  2. Параметр в FIRRemoteConfigSettings.MinimumFetchInterval
  3. Значение по умолчанию 12 часов.

Следующие шаги

Если вы еще этого не сделали, изучите варианты использования Remote Config и ознакомьтесь с некоторыми ключевыми концепциями и документацией по расширенным стратегиям, в том числе: