Разработка Super App архитектуры мобильного приложения
Super App — это приложение, внутри которого живут другие приложения. WeChat, Grab, Gojek, Kaspi — разные реализации одной идеи: пользователь не переключается между приложениями, всё происходит внутри одного. Для бизнеса это означает owner платформы со своим маркетплейсом мини-программ и партнёров, которые публикуют в него свои сервисы.
Архитектурно super app — это не просто «большое приложение с вкладками». Это платформа с системой запуска изолированных мини-программ, общим auth-контекстом, нативными bridge API и механизмом дистрибуции мини-программ.
Слои архитектуры
Host Application (оболочка). Отвечает за: аутентификацию и управление сессией, навигацию на верхнем уровне (таб-бар, home feed), каталог мини-программ, lifecycle management мини-программ (запуск, пауза, уничтожение), common services (платежи, геолокация, push, camera) через единый Bridge API.
Mini Program Runtime. Изолированная среда выполнения мини-программы. На iOS — WKWebView с ограниченным JS API, или нативный контейнер для compile-time плагинов. На Android — WebView с WebViewClient + addJavascriptInterface, или DexClassLoader для нативных плагинов. Каждая мини-программа работает в своём WebView/контейнере — изолированный localStorage, изолированные куки.
Bridge API. Мини-программа не имеет прямого доступа к нативным API. Всё идёт через Bridge: MiniApp.bridge.call("payment.pay", { amount: 100 }, callback). Bridge переводит вызов в нативный код хоста. Хост решает: разрешить вызов (проверка разрешений мини-программы), выполнить, вернуть результат. Это ключевая точка безопасности.
Sandbox и изоляция
Каждая мини-программа получает от хоста только то, что явно разрешено:
- Access token для своего backend (не master token хоста)
- Разрешение на конкретные Bridge-API (платежи — только если партнёр прошёл верификацию)
- Изолированное хранилище (ключи с префиксом
mini_program_id) - Ограниченный сетевой доступ через
WebViewcontent policy — только домены из whitelist мини-программы
Content Security Policy в WebView: на Android WebSettings.setAllowUniversalAccessFromFileURLs(false), строгий CSP header. На iOS WKWebView с WKContentRuleList — блокируем XHR к неразрешённым доменам.
Мини-программы не могут: обращаться к данным других мини-программ, читать токены хоста, выполнять нативный код за пределами Bridge API.
Управление lifecycle мини-программ
Мини-программа проходит состояния: downloaded → launched → active → paused → destroyed. Хост управляет этим как ОС управляет приложениями.
Кеширование и обновление. Мини-программа — это zip-архив (JS/HTML/CSS + манифест с версией). Первый запуск: скачивание с CDN → валидация подписи → распаковка в filesDir. Повторный запуск: проверка версии → если обновление — фоновая загрузка нового архива → следующий запуск открывает новую версию. Пользователь не ждёт загрузки при повторном открытии. Инвалидация кеша по semver: мажорная версия мини-программы — обязательное обновление, минорная — фоновая.
Memory management. Активных WebView одновременно — не более 3 (конфигурируемо). При открытии 4-й — уничтожаем наименее используемую (LRU). WKWebView на iOS потребляет много памяти при рендеринге тяжёлых мини-программ — мониторинг через os_proc_available_memory(), проактивная очистка при applicationDidReceiveMemoryWarning.
Авторизация: SSO внутри super app
Пользователь авторизован в хосте один раз. Мини-программа получает short-lived access token для своего backend через Bridge API: bridge.call("auth.getToken", { scope: "mini_program_x" }, callback). Хост выписывает token с ограниченным scope на 15 минут. Мини-программа обменивает его на свой внутренний JWT на своём бэкенде. Хост никогда не передаёт master token.
Платежи через Bridge
Платёжный Bridge — самый чувствительный компонент. Мини-программа вызывает bridge.call("payment.requestPay", { orderId, amount, currency }) → хост показывает нативный payment confirmation UI (не WebView!) → пользователь подтверждает биометрией → хост обрабатывает платёж через свою платёжную систему → возвращает результат мини-программе. Мини-программа никогда не видит платёжные данные пользователя.
Кейс. Финтех super app: хост на Flutter (навигация, auth, платежи через Stripe), 15 мини-программ (кредиты, страховки, коммунальные платежи, инвестиции) — микс нативных плагинов и WebView-программ. Bridge API: 40+ методов. Маркетплейс мини-программ с модерацией: партнёр загружает zip → CI прогоняет security scan (static analysis JS через ESLint security rules, проверка манифеста) → ручная модерация → публикация. Время запуска ранее кешированной мини-программы — 200–400 мс.
Технический стек
| Слой | Android | iOS |
|---|---|---|
| Host shell | Jetpack Compose + Hilt | SwiftUI + Combine |
| Mini program runtime | WebView (WebKit) + DexClassLoader | WKWebView + compile-time плагины |
| Bridge | JavascriptInterface + MethodChannel | WKScriptMessageHandler |
| Storage | Room + EncryptedSharedPreferences | CoreData + Keychain |
| Payments | Stripe SDK / native | Stripe SDK / Apple Pay |
Сроки
| Этап | Ориентировочные сроки |
|---|---|
| Host shell + Bridge API + первая мини-программа | 4–6 месяцев |
| Маркетплейс мини-программ + lifecycle management | +2–4 месяца |
| Полноценная платформа с партнёрским SDK | 10–18 месяцев суммарно |
Стоимость рассчитывается индивидуально. Super App — это платформенный продукт, требующий команды с опытом в нативной разработке, безопасности и DevOps.







