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

Выберите платформу: iOS+ Android Web Flutter Unity C++


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

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

  1. Если вы еще этого не сделали, добавьте Firebase в свой Android-проект .

  2. Для Remote Config требуется Google Analytics для условного таргетирования экземпляров приложения в соответствии со свойствами и аудиториями пользователей. Убедитесь, что Google Analytics включен в вашем проекте.

  3. В файле Gradle вашего модуля (уровня приложения) (обычно <project>/<app-module>/build.gradle.kts или <project>/<app-module>/build.gradle ) добавьте зависимости для библиотек Remote Config и Analytics для Android. Мы рекомендуем использовать Firebase Android BoM для управления версиями библиотек.

    Кроме того, в рамках настройки Analytics вам необходимо добавить Firebase SDK для Google Analytics в ваше приложение.

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:34.11.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:23.0.1")
    implementation("com.google.firebase:firebase-analytics:23.2.0")
    }

Шаг 2: Получите объект-синглтон Remote Config .

Получите экземпляр объекта Remote Config и установите минимальный интервал выборки, чтобы обеспечить частое обновление:

Kotlin

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

Объект-синглтон используется для хранения значений параметров по умолчанию в приложении, получения обновленных значений параметров из бэкэнда и управления моментом, когда полученные значения становятся доступны вашему приложению.

В процессе разработки рекомендуется устанавливать относительно низкий минимальный интервал выборки. Дополнительную информацию см. в разделе «Ограничение скорости» .

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

You can set in-app default parameter values in the Remote Config object, so that your app behaves as intended before it connects to the Remote Config backend, and so that default values are available if none are set in the backend.

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

    Для генерации токена Bearer выполните следующую команду с помощью Google Cloud CLI или Cloud Shell :

    gcloud auth print-access-token
    

    Срок действия этого токена ограничен, поэтому в случае ошибки аутентификации может потребоваться его повторная генерация.

    Консоль Firebase

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

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

  2. Добавьте эти значения в объект Remote Config используя setDefaultsAsync(int) , как показано ниже:

    Kotlin

    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 для создания этих значений.

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

    Kotlin

            val customSignals = customSignals {
                put("city", "Tokyo")
                put("preferred_event_category", "sports")
            }
    
            remoteConfig.setCustomSignals(customSignals)
        

    Java

            CustomSignals customSignals = new CustomSignals.Builder()
                .put("city", "Tokyo")
                .put("preferred_event_category", "sports")
                .build();
    
            mFirebaseRemoteConfig.setCustomSignals(customSignals);
    
        

Шаг 6: Получение и активация значений

  1. Для получения значений параметров из бэкэнда Remote Config вызовите метод fetch() . Все значения, которые вы задали в бэкэнде, будут получены и сохранены в объекте Remote Config .
  2. Чтобы сделать полученные значения параметров доступными для вашего приложения, вызовите метод activate() .

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

    Kotlin

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

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

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

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

Поддержка обновлений в реальном времени обеспечивается Firebase SDK для Android версии 21.3.0+ ( Firebase BoM версии 31.2.4+).

  1. В вашем приложении используйте addOnConfigUpdateListener() , чтобы начать прослушивание обновлений и автоматически получать новые значения параметров. Реализуйте коллбэк onUpdate() для активации обновленной конфигурации.

    Kotlin

    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<Boolean>() {
                    @Override
                    public void onComplete(@NonNull Task<Boolean> task) {
                        displayWelcomeMessage();
                    }
                });
            }
            @Override
            public void onError(FirebaseRemoteConfigException error) {
                Log.w(TAG, "Config update error with code: " + error.getCode(), error);
            }
        });
        
  2. В следующий раз, когда вы опубликуете новую версию вашей Remote Config , устройства, на которых запущено ваше приложение и которые отслеживают изменения, вызовут ConfigUpdateListener .

Регулирование скорости

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

В процессе разработки приложения может потребоваться очень часто (много раз в час) получать и активировать конфигурации, чтобы быстро вносить изменения по мере разработки и тестирования приложения. Обновления Remote Config в реальном времени автоматически обходят кэш при обновлении конфигурации на сервере. Для обеспечения быстрой итерации в проекте с участием до 10 разработчиков можно временно установить объект FirebaseRemoteConfigSettings с низким минимальным интервалом получения данных ( setMinimumFetchIntervalInSeconds ) в вашем приложении.

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

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

Чтобы установить минимальный интервал выборки на пользовательское значение, используйте FirebaseRemoteConfigSettings.Builder.setMinimumFetchIntervalInSeconds(long) .