Начните работу с 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.7.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.0.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: Установите значения параметров по умолчанию в приложении.

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

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