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 — две вариации, замер конверсии.

Что считается обязательным

  1. Kill switch на любую новую существенную фичу.
  2. Force update флаг — выключить совсем старые версии, если бэкенд их больше не поддерживает.
  3. Maintenance mode флаг — показать пользователям «ведутся работы», когда упал backend.
  4. Конфиг 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 банит. И удаляйте старые флаги, иначе через год — болото.

Узнайте подробнее о наших компетенциях
Разработка, ИИ, автоматизация — что мы делаем и как.