Перейти к основному содержимому

SDK Remote Config для Flutter (версия 1.0.0)

SDK Remote Config – это облачный сервис, который позволяет изменять поведение и внешний вид вашего приложения, не требуя от пользователей загрузки обновления приложения. Плагин инкапсулирует в себе запрос конфигурации с сервера, кэширование, фоновое обновление. Имеет удобное API для получения данных.

Пример реализации

Ознакомьтесь с приложением-примером, чтобы узнать, как правильно интегрировать SDK Remote Config.

Ключевые особенности

  • Выбор наиболее удобного механизма обновления конфигурации.
  • Возможность указывать процент распространения конфигурации на аудиторию.
  • Возможность передавать дополнительную информацию для построения воронки конкретной конфигурации. Формировать конфигурацию можно даже для конкретных пользователей.
  • Набор callback, который можно использовать для аналитики.
  • Минимальное количество внешних зависимостей.

Подключение в проект

Для подключения пакета к проекту нужно выполнить команду

flutter pub add flutter_rustore_remoteconfig

Эта команда добавит строчку в файл pubspec.yaml

dependencies:
flutter_rustore_remoteconfig: ^1.0.0

Инициализация

Создание RemoteConfigClient

Инициализация RemoteConfigClient должна происходить в момент Application.onCreate(), так как при запуске фоновой синхронизации SDK должна быть проинициализирована.

Для работы с конфигом, нам надо создать RemoteConfigClient с помощью метода

create(
String appId,
PluginUpdateBehavior updateBehavior,
int interval, StaticParameters parameters,
{Function? onBackgroundJobErrors,
Function? onFirstLoadComplete,
Function? onMemoryCacheUpdated,
Function? onInitComplete,
Function? onPersistentStorageUpdated,
Function? onRemoteConfigNetworkRequestFailure}
)

Пример вызова метода create.

FlutterRustoreRemoteconfig.create(
appId,
behavior,
interval,
Parameters(),
onBackgroundJobErrors: (value) {

},
onFirstLoadComplete: (value) {

},
onMemoryCacheUpdated: (value) {

},
onInitComplete: (value) {

},
onPersistentStorageUpdated: (value) {

},
onRemoteConfigNetworkRequestFailure: (value) {

});

appId - Application id вашего проекта Remote config;
behavior - Политика обновления SDK;
interval - Время для изменения политики обновления snapshot;
parameters - Статические параметры SDK;
Function? onBackgroundJobErrors - Возвращает ошибку фоновой работы;
Function? onFirstLoadComplete - Вызывается при окончании первой загрузки;
Function? onMemoryCacheUpdated - Вызывается при измененияя кэша в памяти;
Function? onInitComplete - Вызывается при окончании инциализации;
Function? onPersistentStorageUpdated - Вызывается при изменении постоянного хранилища;
Function? onRemoteConfigNetworkRequestFailure - Вызывается при ошибке сетевого запроса Remote Сonfig;

Опциональные параметры RemoteConfigClientBuilder

ПараметрОписание
OsVersionУсловие в конфигураторе: Os Version
Позволят сравнивать OsVersion со значением, установленным в интерфейсе. По умолчанию OsVersion не передается, в этом случае возвращается конфиг по умолчанию.
DeviceModelУсловие в конфигураторе: Device Model
Позволят сравнивать DeviceModel со значением, установленным в интерфейсе. По умолчанию DeviceModel не передается, у этом случае возвращается конфиг по умолчанию.
LanguageУсловие в конфигураторе: Language
Позволят сравнивать Language со значением, установленным в интерфейсе. По умолчанию Language не передается, у этом случае возвращается конфиг по умолчанию.
Для передачи Language необходимо реализовать ConfigRequestParameterProvider.
AccountУсловие в конфигураторе: Account
Позволят сравнивать account со значением, установленным в интерфейсе.
Условие в конфигураторе: Account Percentile
Позволят раздавать конфиг по значению account на определенный процент.
Условие в конфигураторе: Interval Account Percentile
Позволят раздавать конфиг по значению account на определенный процент и в определенный день.
Для передачи Account необходимо реализовать ConfigRequestParameterProvider.
DeviceIdУсловие в конфигураторе: DeviceID
Позволят сравнивать DeviceId со значением, установленным в интерфейсе.
Условие в конфигураторе: DeviceID Percentile
Позволят раздавать конфиг по значению DeviceId на определенный процент.
Условие в конфигураторе: Interval DeviceID Percentile
Позволят раздавать конфиг по значению DeviceId на определенный процент и в определенный день.
AppVersionУсловие в конфигураторе: App Version
Позволят сравнивать AppVersion со значением, установленным в интерфейсе.
EnvironmentУсловие в конфигураторе: App Environment
Позволят сравнивать Environment со значением, установленным в интерфейсе
Environment может принимать значения: Alpha, Beta, Release.
Этот параметр удобно использовать для тестирования конфигурации на различных сборках приложения.
AppBuildУсловие в конфигураторе: App Build
Позволят сравнивать AppBuild со значением, установленным в интерфейсе.

UpdateBehaviour

UpdateBehaviour — это параметр, определяющий поведение SDK. При создании экземпляра RemoteConfigClientBuilder, по умолчанию используется значение UpdateBehaviour.Default с интервалом синхронизации 15 минут.

Установить другое поведение SDK можно передав значение в метод create:

enum PluginUpdateBehavior {
actualBehavior,
defaultBehavior,
snapshotBehavior,
}

Различия в значениях UpdateBehaviour

UpdateBehaviourОписание

Actual

При инициализации каждый запрос конфигурации выполняется через запрос к серверу.

Значение Actual гарантирует получение самой актуальной конфигурации, но скорость выполнения запроса зависит от скорости сети.

Этот тип инициализации отменяет процесс фонового обновления.

Default

При инициализации запрос конфигурации выполняется из локального постоянного хранилища, которое обновляется в указанный интервал.

Если инициализация выполняется первый раз и локальное постоянное хранилище пустое, запрос отправляется на сервер. Скорость выполнения запроса зависит от объема данных и скорости сети. Доступ к конфигурации будет ожидать завершения инициализации.

Значение Default не гарантирует, что в рамках жизни процесса запрос конфигурации будет отдавать одинаковый результат, так как синхронизация данных может выполниться в фоне.

Этот тип инициализации запускает процесс фонового обновления.

Snapshot

При инициализации запрос конфигурации выполняется из локального inMemory-хранилища. inMemory-хранилище заполняется результатом первого запроса из постоянного хранилища и сохраняется в таком виде до конца жизни процесса.

Если инициализация выполняется первый раз и локальное постоянное хранилище пустое, запрос отправляется на сервер. Скорость выполнения запроса зависит от объема данных и скорости сети. Доступ к конфигурации будет ожидать завершения инициализации.

Значение Snapshot гарантирует, что в рамках жизни процесса запросы конфигурации будут отдавать одинаковый результат.

Этот тип инициализации запускает процесс фонового обновления.

ConfigRequestParameterProvider

RemoteConfigClientEventListener

Реализация RemoteConfigClientEventListener дает возможность получать callback о работе SDK, такие как завершение инициализации и обновление постоянного хранилища.

Callback слушателя вызываются на MainThread.

Обработку Callback слушателя надо делать при вызове метода create.

FlutterRustoreRemoteconfig.create(

onBackgroundJobErrors: (value) {

},
onFirstLoadComplete: (value) {

},
onMemoryCacheUpdated: (value) {

},
onInitComplete: (value) {

},
onPersistentStorageUpdated: (value) {

},
onRemoteConfigNetworkRequestFailure: (value) {

});

Инициализация RemoteConfigClient

Инициализация RemoteConfigClient выполняется асинхронно, результат инициализации можно отслеживать через класс Task, который возвращает метод init() или через слушатель.

FlutterRustoreRemoteconfig.init();

Получение конфигурации

FlutterRustoreRemoteconfig.getRemoteConfig().then(((value) {

}), onError: (err) {

});

Класс RemoteConfig

Метод getRemoteConfig возвращает нам экземпляр RemoteConfig — это текущий набор всех данных, полученных в зависимости от выбранной политики обновления при инициализации, экземпляр имеет весь набор ключей, которые были переданы с сервера в зависимости от параметров, указанных при инициализации.

Проверка доступности ключа

remoteConfig.containsKey("my-key")

Метод проверяет наличие ключа в текущем экземпляре RemoteConfig.

Получение типизированных данных

Класс RemoteConfig имеет методы получения данных и приведения его к определенным типам.

bool containsKey(String key);
String? getString(String key)
bool? getBool(String key);
num? getNum(String key);

key - Параметр, созданный в консоли Remote config.

Методы могут вернуть ошибку RemoteConfigCastException, если тип данных не соответствует выбранному методу или отсутствует значение по передаваемому ключу.

Фоновая синхронизация конфигурации

Фоновая синхронизация конфигурации используется при некоторых типах политики обновления.

Результатом фоновой синхронизации конфигурации является обновление постоянного хранилища конфигураций актуальными данными для последующего использования в зависимости от выбранной политики обновления.

Минимальный допустимый интервал между фоновыми синхронизациями составляет 15 минут.

Возможные ошибки

Все ошибки SDK Remote Config наследуются от суперкласса RemoteConfigException.

ОшибкаОписание
BackgroundConfigUpdateErrorПоявляется при ошибке в работе фоновой синхронизации.
FailedToReceiveRemoteConfigПоявляется в случае ошибки при вызове метода получения конфигурации.
RemoteConfigCastExceptionПоявляется в случае некорректного получения данных по ключу из класса RemoteConfig. Ошибка может быть связана с невозможностью приведения к типу, либо значение по передаваемому ключу отсутствует.
RemoteConfigClientAlreadyExistПоявляется в случае повторного создания RemoteConfigClient в рамках жизни процесса.
RemoteConfigClientNotCreatedПоявляется в случае доступа к RemoteConfigClient через статическое поле instance до создания RemoteConfigClient.
RemoteConfigCommonExceptionОбщая непредвиденная ошибка.
RemoteConfigNetworkExceptionПоявляется при сетевой ошибке.