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

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


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

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

  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:35.0.2"))
    
        // 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:24.0.0")
    implementation("com.google.firebase:firebase-analytics:24.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);

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

Во время разработки рекомендуется задать относительно низкий минимальный интервал получения. Подробнее об ограничении скорости…

Шаг 3. Задайте значения параметров по умолчанию в приложении

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

  1. Определите набор названий и значений параметров по умолчанию с помощью объекта Map или XML-файла ресурсов, хранящегося в папке res/xml приложения. В примере приложения для быстрого запуска Remote Config используется XML-файл, в котором определены названия и значения параметров по умолчанию.

    Если вы уже настроили значения параметров серверной части Remote Config, вы можете скачать сгенерированный XML-файл, который включает все значения по умолчанию, и сохранить его в каталоге res/xml приложения.

    REST

    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
    

    Чтобы сгенерировать токен на предъявителя, выполните следующую команду в Google Cloud CLI или Cloud Shell:

    gcloud auth print-access-token
    

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

    Консоль Firebase

    1. В консоли Firebase перейдите на страницу DevOps & Engagement (DevOps и вовлечение) > Remote Config (Удаленная конфигурация) > Parameters (Параметры).

    2. Откройте меню и выберите Скачать значения по умолчанию.

    3. В появившемся окне выберите .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 перейдите на страницу DevOps & Engagement (DevOps и вовлечение) > Remote Config (Удаленная конфигурация) > Parameters (Параметры).

  2. Задайте параметры с теми же названиями, что и в приложении. Для каждого параметра можно указать значение по умолчанию (которое в конечном итоге переопределит соответствующее значение по умолчанию в приложении), а также условные значения. Подробнее о параметрах и условиях Remote Config…

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

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

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

Шаг 7. Прослушивайте обновления в реальном времени

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

Обновления в реальном времени поддерживаются в SDK Firebase для 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).