Вы можете использовать Firebase Remote Config, чтобы определить параметры в своем приложении и обновить их значения в облаке, что позволит вам изменить внешний вид и поведение вашего приложения без распространения обновления приложения. В этом руководстве описаны шаги для начала работы и предоставлен пример кода, который можно клонировать или загрузить из репозитория GitHub firebase/quickstart-android .
Шаг 1. Добавьте Firebase и SDK Remote Config в свое приложение.
Если вы еще этого не сделали, добавьте Firebase в свой проект Android .
Для Remote Config требуется Google Analytics для условного таргетинга экземпляров приложений на пользовательские свойства и аудитории. Убедитесь, что вы включили Google Analytics в своем проекте.
В файле Gradle вашего модуля (уровня приложения) (обычно
<project>/<app-module>/build.gradle
) добавьте зависимость для библиотеки Remote Config Android. Мы рекомендуем использовать Firebase Android BoM для управления версиями библиотеки.Кроме того, в рамках настройки Analytics вам необходимо добавить Firebase SDK для Google Analytics в свое приложение.
Kotlin+KTX
dependencies { // Import the BoM for the Firebase platform implementation platform('com.google.firebase:firebase-bom:32.1.0') // Add the dependencies for the Remote Config and Analytics libraries // When using the BoM, you don't specify versions in Firebase library dependencies implementation 'com.google.firebase:firebase-config-ktx' implementation 'com.google.firebase:firebase-analytics-ktx' }
Используя Firebase Android BoM , ваше приложение всегда будет использовать совместимые версии библиотек Firebase Android.
(Альтернатива) Добавить зависимости библиотеки Firebase без использования BoM
Если вы решите не использовать Firebase BoM, вы должны указать каждую версию библиотеки Firebase в строке зависимостей.
Обратите внимание: если вы используете несколько библиотек Firebase в своем приложении, мы настоятельно рекомендуем использовать BoM для управления версиями библиотек, что гарантирует совместимость всех версий.
dependencies { // Add the dependencies for the Remote Config and Analytics libraries // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation 'com.google.firebase:firebase-config-ktx:21.4.0' implementation 'com.google.firebase:firebase-analytics-ktx:21.3.0' }
Java
dependencies { // Import the BoM for the Firebase platform implementation platform('com.google.firebase:firebase-bom:32.1.0') // Add the dependencies for the Remote Config and Analytics libraries // When using the BoM, you don't specify versions in Firebase library dependencies implementation 'com.google.firebase:firebase-config' implementation 'com.google.firebase:firebase-analytics' }
Используя Firebase Android BoM , ваше приложение всегда будет использовать совместимые версии библиотек Firebase Android.
(Альтернатива) Добавить зависимости библиотеки Firebase без использования BoM
Если вы решите не использовать Firebase BoM, вы должны указать каждую версию библиотеки Firebase в строке зависимостей.
Обратите внимание: если вы используете несколько библиотек Firebase в своем приложении, мы настоятельно рекомендуем использовать BoM для управления версиями библиотек, что гарантирует совместимость всех версий.
dependencies { // Add the dependencies for the Remote Config and Analytics libraries // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation 'com.google.firebase:firebase-config:21.4.0' implementation 'com.google.firebase:firebase-analytics:21.3.0' }
Шаг 2. Получите одноэлементный объект Remote Config
Получите экземпляр объекта Remote Config и установите минимальный интервал выборки, чтобы обеспечить частые обновления:
Kotlin+KTX
val remoteConfig: FirebaseRemoteConfig = Firebase.remoteConfig val configSettings = remoteConfigSettings { minimumFetchIntervalInSeconds = 3600 } remoteConfig.setConfigSettingsAsync(configSettings)
Java
FirebaseRemoteConfig mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance(); FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder() .setMinimumFetchIntervalInSeconds(3600) .build(); mFirebaseRemoteConfig.setConfigSettingsAsync(configSettings);
Объект singleton используется для хранения значений параметров по умолчанию в приложении, извлечения обновленных значений параметров из серверной части и управления тем, когда извлеченные значения становятся доступными для вашего приложения.
Во время разработки рекомендуется установить относительно низкий минимальный интервал выборки. Дополнительную информацию см. в разделе Дросселирование .
Шаг 3. Установите значения параметров по умолчанию в приложении
Вы можете установить значения параметров по умолчанию в приложении в объекте Remote Config, чтобы ваше приложение вело себя должным образом, прежде чем оно подключится к серверной части Remote Config, и чтобы значения по умолчанию были доступны, если ни одно из них не установлено в серверной части.
Определите набор имен параметров и значений параметров по умолчанию, используя объект карты или файл ресурсов XML , хранящийся в папке
res/xml
вашего приложения. Пример приложения быстрого запуска Remote Config использует XML-файл для определения имен и значений параметров по умолчанию.Если вы уже настроили значения внутренних параметров Remote Config, вы можете загрузить сгенерированный XML-файл, который включает все значения по умолчанию, и сохранить его в каталоге
res/xml
вашего приложения:ОТДЫХ
curl --compressed -D headers -H "Authorization: Bearer token -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig:downloadDefaults?format=XML -o remote_config_defaults.xml
Консоль Firebase
На вкладке «Параметры» откройте меню и выберите «Загрузить значения по умолчанию» .
При появлении запроса включите .xml для Android , затем нажмите «Загрузить файл» .
Добавьте эти значения в объект Remote Config с помощью
setDefaultsAsync(int)
, как показано ниже:Kotlin+KTX
remoteConfig.setDefaultsAsync(R.xml.remote_config_defaults)
Java
mFirebaseRemoteConfig.setDefaultsAsync(R.xml.remote_config_defaults);
Шаг 4. Получите значения параметров для использования в приложении
Теперь вы можете получить значения параметров из объекта Remote Config. Если вы устанавливаете значения в бэкэнде, извлекаете их, а затем активируете, эти значения становятся доступными для вашего приложения. В противном случае вы получите значения параметров в приложении, настроенные с помощью setDefaultsAsync(int)
. Чтобы получить эти значения, вызовите метод, указанный ниже, который сопоставляется с типом данных, ожидаемым вашим приложением, указав ключ параметра в качестве аргумента:
Шаг 5. Задайте значения параметров в бэкэнде Remote Config.
Используя консоль Firebase или внутренние API-интерфейсы Remote Config , вы можете создавать новые значения по умолчанию на стороне сервера, которые переопределяют значения в приложении в соответствии с желаемой условной логикой или пользовательским таргетингом. В этом разделе описываются шаги консоли Firebase для создания этих значений.
- В консоли Firebase откройте свой проект.
- Выберите Remote Config в меню, чтобы просмотреть панель управления Remote Config.
- Определите параметры с теми же именами, что и параметры, которые вы определили в своем приложении. Для каждого параметра вы можете установить значение по умолчанию (которое в конечном итоге переопределит соответствующее значение по умолчанию в приложении), а также вы можете установить условные значения. Дополнительные сведения см. в разделе Параметры и условия удаленной конфигурации .
Шаг 6: Получить и активировать значения
- Чтобы получить значения параметров из бэкенда Remote Config, вызовите метод
fetch()
. Любые значения, которые вы устанавливаете в бэкэнде, извлекаются и сохраняются в объекте Remote Config. Чтобы сделать извлеченные значения параметров доступными для вашего приложения, вызовите
activate()
.В случаях, когда вы хотите получить и активировать значения за один вызов, вы можете использовать запрос
fetchAndActivate()
для извлечения значений из бэкэнда Remote Config и сделать их доступными для приложения:Kotlin+KTX
remoteConfig.fetchAndActivate() .addOnCompleteListener(this) { task -> if (task.isSuccessful) { val updated = task.result Log.d(TAG, "Config params updated: $updated") Toast.makeText( this, "Fetch and activate succeeded", Toast.LENGTH_SHORT, ).show() } else { Toast.makeText( this, "Fetch failed", Toast.LENGTH_SHORT, ).show() } displayWelcomeMessage() }
Java
mFirebaseRemoteConfig.fetchAndActivate() .addOnCompleteListener(this, new OnCompleteListener<Boolean>() { @Override public void onComplete(@NonNull Task<Boolean> task) { if (task.isSuccessful()) { boolean updated = task.getResult(); Log.d(TAG, "Config params updated: " + updated); Toast.makeText(MainActivity.this, "Fetch and activate succeeded", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(MainActivity.this, "Fetch failed", Toast.LENGTH_SHORT).show(); } displayWelcomeMessage(); } });
Поскольку эти обновленные значения параметров влияют на поведение и внешний вид вашего приложения, вы должны активировать полученные значения в то время, когда это обеспечивает бесперебойную работу вашего пользователя, например, когда пользователь в следующий раз открывает ваше приложение. Дополнительную информацию и примеры см. в разделе Стратегии загрузки Remote Config .
Шаг 7. Следите за обновлениями в режиме реального времени
После получения значений параметров вы можете использовать Remote Config в режиме реального времени для прослушивания обновлений из серверной части Remote Config. Remote Config в режиме реального времени сигнализирует подключенным устройствам, когда доступны обновления, и автоматически извлекает изменения после публикации новой версии Remote Config.
Обновления в реальном времени поддерживаются Firebase SDK для Android версии 21.3.0+ (Firebase BoM версии 31.2.4+).
В своем приложении используйте
addOnConfigUpdateListener()
, чтобы начать прослушивание обновлений и автоматически получать любые новые значения параметров. Реализуйте обратный вызовonUpdate()
для активации обновленной конфигурации.Kotlin+KTX
remoteConfig.addOnConfigUpdateListener(object : ConfigUpdateListener { override fun onUpdate(configUpdate : ConfigUpdate) { Log.d(TAG, "Updated keys: " + configUpdate.updatedKeys); if (configUpdate.updatedKeys.contains("welcome_message")) { remoteConfig.activate().addOnCompleteListener { displayWelcomeMessage() } } } override fun onError(error : FirebaseRemoteConfigException) { Log.w(TAG, "Config update error with code: " + error.code, error) } })
Java
mFirebaseRemoteConfig.addOnConfigUpdateListener(new ConfigUpdateListener() { @Override public void onUpdate(ConfigUpdate configUpdate) { Log.d(TAG, "Updated keys: " + configUpdate.getUpdatedKeys()); mFirebaseRemoteConfig.activate().addOnCompleteListener(new OnCompleteListener
() { @Override public void onComplete(@NonNull Task task) { displayWelcomeMessage(); } }); } @Override public void onError(FirebaseRemoteConfigException error) { Log.w(TAG, "Config update error with code: " + error.getCode(), error); } }); В следующий раз, когда вы опубликуете новую версию Remote Config, устройства, на которых запущено ваше приложение и ожидают изменений, вызовут
ConfigUpdateListener
.
Дросселирование
Если приложение выполняет выборку слишком много раз за короткий промежуток времени, вызовы выборки регулируются, и SDK возвращает FirebaseRemoteConfigFetchThrottledException
. До версии SDK 17.0.0 ограничение составляло 5 запросов на выборку в 60-минутном окне (более новые версии имеют более широкие ограничения).
Во время разработки приложения вам может понадобиться очень часто получать и активировать конфигурации (много раз в час), чтобы вы могли быстро выполнять итерации по мере разработки и тестирования своего приложения. Обновления Remote Config в режиме реального времени автоматически обходят кэш при обновлении конфигурации на сервере. Чтобы обеспечить быструю итерацию в проекте с участием до 10 разработчиков, вы можете временно установить объект FirebaseRemoteConfigSettings
с низким минимальным интервалом выборки ( setMinimumFetchIntervalInSeconds
) в своем приложении.
Минимальный интервал выборки по умолчанию для Remote Config составляет 12 часов, что означает, что конфигурации не будут извлекаться из серверной части более одного раза в 12-часовое окно, независимо от того, сколько вызовов выборки фактически сделано. В частности, минимальный интервал выборки определяется в следующем порядке:
- Параметр в
fetch(long)
- Параметр в
FirebaseRemoteConfigSettings.setMinimumFetchIntervalInSeconds(long)
- Значение по умолчанию 12 часов.
Чтобы установить для минимального интервала выборки пользовательское значение, используйте FirebaseRemoteConfigSettings.Builder.setMinimumFetchIntervalInSeconds(long)
.
Следующие шаги
Если вы еще этого не сделали, изучите варианты использования Remote Config и ознакомьтесь с некоторыми ключевыми концепциями и документацией по расширенным стратегиям, в том числе: