Remote Config в RuStore — это инструмент, который позволяет менять поведение и внешний вид Android-приложения без публикации новой версии: вы задаёте параметры в консоли RuStore, а приложение получает обновлённые значения через SDK. Если кнопка в приложении не меняет цвет после правки параметра в консоли, чаще всего причина в том, что клиент ещё не выполнил загрузку конфигурации или используется закешированное значение по умолчанию.
Ниже разберём, как устроен механизм, как подключить SDK, какие ограничения стоит учитывать и как диагностировать типичные проблемы с получением параметров.
Что такое Remote Config и зачем он нужен
Remote Config — это облачное хранилище пар «ключ — значение», привязанное к вашему приложению в RuStore. Разработчик объявляет параметры в консоли, а приложение в рантайме запрашивает их актуальные значения. Это позволяет проводить A/B-тесты, включать и отключать функции (feature flags), менять тексты и ссылки без прохождения модерации и выпуска обновления.
Типичные сценарии использования:
- 🚩 Фича-флаги — постепенный rollout новой функции и быстрый откат при проблемах.
- 🎨 Управление интерфейсом — тексты, баннеры, ссылки на акции, порядок экранов.
- ⚙️ Тонкая настройка — таймауты сетевых запросов, лимиты, пороговые значения.
- 🧪 Эксперименты — выдача разных значений разным сегментам пользователей, если это предусмотрено консолью.
Механика стандартная для подобных сервисов: приложение хранит значения по умолчанию локально, периодически загружает актуальную конфигурацию с сервера и применяет её. До первой успешной загрузки пользователь видит именно локальные дефолты — это важно учитывать при проектировании логики.
Подключение SDK к проекту
Подключение выполняется через систему сборки Gradle. Точные координаты зависимости и актуальную версию артефакта нужно брать из официальной документации RuStore для разработчиков — версии SDK обновляются, и копировать номер из сторонних источников рискованно. Общий порядок действий выглядит так.
Добавьте репозиторий RuStore в settings.gradle или корневой build.gradle, затем подключите модуль Remote Config в файле build.gradle приложения:
dependencies {
implementation "ru.rustore.sdk:remoteconfig:<актуальная_версия>"
}
После синхронизации проекта SDK инициализируется в коде приложения — как правило, в классе Application или при старте основной Activity. Конкретные методы инициализации сверяйте с документацией вашей версии SDK, так как API может меняться между релизами.
⚠️ Внимание: не смешивайте в одном проекте разные версии модулей RuStore SDK (например, Remote Config и Push) без проверки их совместимости. Несогласованные версии — частая причина падений и конфликтов зависимостей при сборке.
Настройка параметров в консоли RuStore
После публикации черновика приложения в консоли разработчика RuStore становится доступен раздел управления конфигурацией. Там вы создаёте параметры: задаёте ключ, тип значения (строка, число, булево — набор типов зависит от текущих возможностей консоли) и значение, которое получат клиенты.
Несколько практических правил при работе с параметрами:
- 🔑 Используйте осмысленные префиксы в ключах:
feature_new_checkout,ui_banner_text— так проще поддерживать конфигурацию при росте числа параметров. - 🛡️ Всегда задавайте локальное значение по умолчанию в коде на случай отсутствия сети или первого запуска.
- 📝 Ведите описание каждого параметра — через полгода никто не вспомнит, за что отвечает флаг
exp_42. - 🔄 Помните: изменения в консоли применяются не мгновенно на всех устройствах, а по мере обращения клиентов за конфигурацией.
⚠️ Внимание: Remote Config не предназначен для хранения секретов — токенов, паролей, приватных ключей. Значения конфигурации доставляются на устройство и могут быть извлечены из приложения. Чувствительные данные должны оставаться на вашем сервере.
Получение значений в приложении
Работа с конфигурацией на клиенте обычно строится вокруг трёх шагов: установка дефолтов, запрос загрузки с сервера, чтение значений. Псевдокод иллюстрирует общую идею — точные имена методов берите из документации SDK:
// 1. Значения по умолчанию
setDefaults(mapOf("feature_new_checkout" to false))
// 2. Загрузка конфигурации с сервера
fetchConfig { success ->
if (success) activateFetched()
}
// 3. Чтение значения
val enabled = getBoolean("feature_new_checkout")
Обратите внимание на разницу между загрузкой и активацией: сначала клиент скачивает конфигурацию, затем применяет её. Если читать значение до активации, вы получите дефолт или предыдущее закешированное значение — это самая частая причина жалоб «параметр не обновляется».
☑️ Проверка корректной работы Remote Config
Также учитывайте возможное кеширование и ограничения частоты запросов. Дёргать загрузку конфигурации при каждом открытии экрана не стоит — разумный подход: запрос при холодном старте приложения и, при необходимости, повторный через заданный интервал.
Сравнение подходов к управлению конфигурацией
Remote Config — не единственный способ управлять поведением приложения. Таблица помогает понять, где его место среди альтернатив:
| Подход | Скорость применения | Нужен релиз | Риски |
|---|---|---|---|
| Жёсткое кодирование значений | Только с обновлением | Да | Медленный откат ошибок |
| Remote Config RuStore | При следующем запросе клиента | Нет | Зависимость от доступности сервиса |
| Собственный backend-конфиг | По вашей логике | Нет | Затраты на разработку и поддержку |
| Локальные файлы / SharedPreferences | Мгновенно | Да | Нет удалённого управления |
Для приложений, распространяемых через RuStore, встроенный Remote Config обычно выигрывает у собственного решения за счёт нулевых затрат на инфраструктуру. Собственный backend оправдан, когда нужна сложная сегментация или конфигурация должна работать и вне экосистемы RuStore.
Можно ли использовать Remote Config без публикации в RuStore?
SDK сервисов RuStore ориентирован на приложения, зарегистрированные в консоли RuStore. Если приложение распространяется только через другие магазины или напрямую, корректная работа сервиса не гарантируется — уточняйте текущие условия в официальной документации RuStore.
Типичные проблемы и их диагностика
Самая частая жалоба — «поменял значение в консоли, а в приложении ничего не изменилось». Проверяйте по цепочке: опубликовано ли изменение в консоли, совпадает ли ключ посимвольно (регистр имеет значение), выполнилась ли загрузка и активация на клиенте, не читаете ли вы значение до завершения fetch.
Вторая группа проблем — сетевые: на устройстве без интернета или при недоступности сервиса приложение должно корректно работать на дефолтах. Критичные для запуска функции нельзя завязывать на значение из Remote Config без безопасного локального fallback — иначе сбой доставки конфигурации превратится в сбой всего приложения.
Третья типичная ситуация — конфликты при интеграции: ошибки сборки из-за несовместимых версий модулей SDK или дублирующихся зависимостей. Помогает выравнивание версий всех артефактов RuStore до совместимого набора и очистка кеша Gradle командой ./gradlew clean с последующей пересборкой.
Ограничения и лучшие практики
Remote Config — инструмент для управляемых, обратимых изменений. Не используйте его для радикальной смены бизнес-логики: пользователи со старым кешем и с новым значением одновременно увидят разное поведение, и это нужно учитывать при проектировании. Например, если флаг меняет формат данных, серверная часть должна поддерживать оба варианта на переходный период.
Полезные практики при эксплуатации:
- 📦 Держите число параметров под контролем — сотни флагов без владельцев быстро превращаются в неподдерживаемый хаос.
- 🧹 Удаляйте флаги после завершения rollout: отработавший временный флаг — это технический долг.
- 🔍 Тестируйте оба состояния флага (включён/выключен) перед изменением значения в проде.
- 📉 При проблемах отключайте функцию через флаг, а не экстренным релизом — в этом главная ценность инструмента.
Частые вопросы
Мгновенно ли применяются изменения из консоли?
Нет. Клиент получает новые значения при следующей загрузке конфигурации. Момент загрузки определяется логикой вашего приложения — обычно это холодный старт или заданный интервал обновления.
Что увидит пользователь без интернета?
Приложение должно работать на локальных значениях по умолчанию или на последней успешно загруженной конфигурации, если SDK её кеширует. Поэтому дефолты в коде обязательны.
Можно ли хранить в Remote Config ключи API и пароли?
Нельзя. Значения доставляются на устройство и доступны пользователю. Секреты должны оставаться на сервере, а приложение — обращаться к ним через ваш backend.
Почему значение в приложении не совпадает с консолью?
Наиболее вероятные причины: опечатка в ключе, чтение значения до завершения загрузки и активации, либо изменение в консоли не было опубликовано. Проверяйте цепочку по шагам, включая логирование фактически полученных значений.
Совместим ли Remote Config RuStore с Firebase Remote Config в одном приложении?
Технически оба SDK могут присутствовать в проекте, но поддерживать параллельно две системы конфигурации сложно и источник «истины» для каждого параметра должен быть один. Обычно выбирают решение, соответствующее основному каналу распространения приложения.