Работает
Правка уезжает пользователям, минуя ревью сторов
Собрали правку в шесть — у пользователей она в шесть ноль пять: приложение скачало обновление само и применило при следующем запуске. Меняется интерпретируемый код и ассеты; нативный остаётся в сборке.
Как это работает
Подключаете штатный клиент
Клиент — библиотека expo-updates: переход стоит одного URL в конфигурации. Аккаунт Expo не нужен, EAS не нужен. Работает и managed Expo, и bare React Native: otapush init патчит app.json, а если его нет — AndroidManifest.xml и Expo.plist.
Публикуете правку в канал
Каналы dev, staging и prod; у каждой платформы состояние своё, поэтому хотфикс для iOS не заденет Android. Манифест каждого обновления подписан приватным ключом вашего приложения — RSA-2048, PKCS#1 v1.5, SHA-256. Пара ключей и self-signed X.509-сертификат на 10 лет выпускаются при создании приложения.
Приложение обновляется само
Устройство проверяет подпись до применения обновления и применяет его со второго запуска: первый скачивает бандл, второй запускает. Откат возвращает канал на предыдущее обновление, откат за самым первым — на бандл, зашитый в сборку.
Что это снимает с человека
Правка доходит до пользователей при следующем запуске приложения, а не после ревью. Плановый релиз со сторами остаётся для нативных изменений.
Законность описана в правилах самих сторов: лицензионный договор Apple §3.3.1(B) разрешает загрузку интерпретируемого кода, в правилах Google Play есть исключение для языков, исполняемых в интерпретаторе. JS-бандл и ассеты — ровно этот случай.
Уход от App Center, закрытого 31 марта 2025 года, стоит одного URL в конфигурации: сервер Otapush реализует открытый Expo Updates Protocol — версии v1 и v0, — а клиент остаётся штатным.
Условия и деньги
-
MAU
Считаем уникальные устройства, которые за календарный месяц пришли за обновлением. Публикации, каналы и трафик — мимо счётчика. При превышении лимита раздача продолжается.
-
Цены
Черновые; финальные объявим до включения оплаты. Пока действует бесплатный план: одно приложение и 10 уникальных устройств в месяц. Если вы не в России, напишите нам на почту.
-
Сборка
Бинарники собирает ваш CI: Otapush — слой доставки обновлений, а не замена сборочному сервису.
Обновление касается интерпретируемого кода и ассетов; нативные изменения идут через сборку и ревью сторов как обычно.
Вопросы
Что нужно устройству?
Стабильный идентификатор устройства. Приложение один раз при старте вызывает Updates.setExtraParamAsync("deviceid", id) — и сервер узнаёт его при каждом обращении. Без идентификатора сервер отвечает ошибкой, а случайный UUID при каждом запуске раздувает счётчик MAU.
Где взять CLI?
Выдаём при регистрации. Команды: login, whoami, init, publish, rollback, promote, list, keys. Основные: publish --channel <имя> --platform ios|android|all, promote --from <канал> --to <канал>, rollback --channel <имя>.
Что записывается в журнал?
IP-адрес и User-Agent в журнал запросов не записываются. API-ключ хранится в виде хеша SHA-256 и префикса из 12 символов.
Откройте кабинет и опубликуйте первую правку
Открыть кабинетВопрос по сервису — почта студии: tea@aistastudio.ru
Другие продукты студии
env-master
Переменные окружения сервисы забирают сами при старте — по машинной identity, с версиями и журналом аудита.
Работает, есть бесплатный планЛегалДокс
Отвечаете на вопросы про свою ситуацию — получаете договор со ссылками на действующие законы и забираете его файлом .docx.
Работает, кабинет открыт