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

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


Вы можете использовать Firebase Remote Config, чтобы задавать параметры в приложении и обновлять их значения в облаке. Это позволяет изменять внешний вид и поведение приложения без выпуска обновлений. В этом руководстве описаны первые шаги по работе с Firebase и приведены образцы кода, которые можно клонировать или скачать из репозитория 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:34.19.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.1.0")
    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);

Объект 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 или 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.

Обновления в реальном времени поддерживаются в 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. До версии 17.0.0 SDK было разрешено не более пяти запросов на получение данных в течение 60 минут (в более новых версиях лимиты более мягкие).

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

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

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

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