In-app обновления и фиче-флаги для мобилок
Ждать неделю, пока пользователь обновит приложение из стора — больно. In-app update API и фиче-флаги дают контроль: критический фикс выкатился без релиза, новая фича включилась только для 10% юзеров. Разбираем стек и грабли.
Цикл «нашли баг → починили → выкатили релиз → дождались, пока юзеры обновятся» в мобилке занимает 1-3 недели. Для критического бага это слишком долго. Два инструмента сокращают цикл до часов: in-app update API и фиче-флаги.
In-app update API
Возможность показать пользователю прямо в приложении: «вышла новая версия, обновиться?». Поддерживается всеми крупными сторами.
В RuStore SDK:
RuStoreAppUpdateManager.getAppUpdateInfo()
.addOnSuccessListener { info ->
if (info.updateAvailability == UpdateAvailability.UPDATE_AVAILABLE) {
manager.startUpdateFlow(
info, AppUpdateOptions.Builder()
.appUpdateType(AppUpdateType.IMMEDIATE)
.build()
)
}
}
Два режима:
- IMMEDIATE — блокирующий fullscreen-апдейт. Для критических багов и принудительных обновлений.
- FLEXIBLE — баннер «обновить», пользователь работает дальше, после скачивания — рестарт.
OTA / Code Push
Альтернатива стор-релизам — обновлять JS-бандл напрямую (React Native) или Dart AOT (Flutter с серьёзными ограничениями). Microsoft закрыл CodePush в 2024, но есть:
- EAS Update (Expo) — основной живой вариант для RN.
- Свой CDN + OTA — сложно, но работает для нативных React Native проектов.
Грабли: Apple запрещает выкатывать новые фичи через OTA (только фиксы). За нарушение — бан в App Store. В РФ работает мягче, но рисковать не стоит.
Фиче-флаги
Включить новую фичу на 10% юзеров, посмотреть метрики, докатить до 100%. Если плохо — выключить за секунду.
Сервисы:
- ConfigCat / GrowthBook / Unleash — облачные платформы.
- Firebase Remote Config — работает в РФ нестабильно.
- Свой — простая JSON-конфига в S3 или Postgres-эндпоинт, кэширование на клиенте 1-6 часов.
Минимальный набор флагов:
- Kill switch — выключить фичу, если что-то не так.
- Rollout % — постепенный раскат на 5/20/50/100%.
- Сегменты — по платформе, версии, региону, юзеру.
- A/B — две вариации, замер конверсии.
Что считается обязательным
- Kill switch на любую новую существенную фичу.
- Force update флаг — выключить совсем старые версии, если бэкенд их больше не поддерживает.
- Maintenance mode флаг — показать пользователям «ведутся работы», когда упал backend.
- Конфиг URL'ов backend'а через флаги — не зашивать в код.
Грабли
- Каждая фича за флагом навсегда. Через год — 80 флагов, никто не помнит, что они значат. Удалять флаги после 100% раската.
- Флаг проверяется по сети при каждом действии. Кэшировать локально, обновлять в фоне.
- OTA вместо нормального релиза. Apple банит за фичи через OTA. RN-стек должен быть гибридом «релиз для нового + OTA для фиксов».
- Принудительный апдейт без объяснения. Если блокируете старую версию — покажите экран «обновитесь, причина: критический баг безопасности».
Вывод
In-app update API + фиче-флаги — обязательный минимум для серьёзного мобильного приложения в 2026. RuStore SDK даёт IMMEDIATE/FLEXIBLE обновления, ConfigCat или свой Postgres-флаг-сервис закрывает kill switch и A/B. OTA на RN полезен для фиксов, но не для фич — Apple банит. И удаляйте старые флаги, иначе через год — болото.