Начало работы с Firebase Remote Config


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

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

Это руководство проведет вас через все этапы начала работы и предоставит несколько примеров кода, которые можно клонировать или загрузить из репозитория firebase/quickstart-unity на GitHub.

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

Прежде чем использовать Remote Config , вам необходимо:

  • Зарегистрируйте свой проект Unity и настройте его для использования Firebase.

    • Если ваш проект Unity уже использует Firebase, значит, он уже зарегистрирован и настроен для Firebase.

    • Если у вас нет проекта Unity, вы можете загрузить пример приложения .

  • Добавьте Firebase Unity SDK (в частности, FirebaseRemoteConfig.unitypackage ) в свой проект Unity.

Обратите внимание, что добавление Firebase в ваш проект Unity включает в себя выполнение задач как в консоли Firebase , так и в вашем открытом проекте Unity (например, вы загружаете файлы конфигурации Firebase из консоли, а затем перемещаете их в ваш проект Unity).

Шаг 2: Установите значения параметров приложения по умолчанию

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

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

(Нестроковые свойства будут преобразованы в тип свойства при вызове SetDefaultsAsync() ).

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 => {

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

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

Чтобы получить эти значения, используйте GetValue() , передав ключ параметра в качестве аргумента. Этот метод возвращает ConfigValue , содержащий свойства для преобразования значения в различные базовые типы.

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

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

Шаг 5: Извлечение и активация значений (при необходимости)

Чтобы получить значения параметров из бэкенда Remote Config , вызовите метод FetchAsync() . Все значения, заданные в бэкенде, извлекаются и кэшируются в объекте Remote Config .

// 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);
}

В приведенном выше коде FetchComplete — это метод, сигнатура которого соответствует параметрам одной из перегрузок ContinueWithOnMainThread() .

В примере кода ниже методу FetchComplete передаётся предыдущая задача ( fetchTask ), что позволяет FetchComplete определить, завершилась ли она. Код использует Info.LastFetchStatus , чтобы определить, было ли завершено успешно . Если да, значения параметров Remote Config активируются с помощью 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}.");
    });
}

Значения, полученные с помощью FetchAsync() кэшируются локально после завершения извлечения, но становятся доступными только после вызова ActivateAsync() . Это позволяет гарантировать, что новые значения не будут применены в процессе вычислений или в других ситуациях, которые могут вызвать проблемы или странное поведение.

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

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

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

  1. Добавьте в приложение OnConfigUpdateListener для прослушивания обновлений и автоматического получения любых новых или обновлённых значений параметров. Затем создайте ConfigUpdateListenerEventHandler для обработки событий обновления. В следующем примере прослушивается обновление и используются полученные значения для отображения обновлённого приветственного сообщения.
// 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;
}

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

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

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