Реализация системы мини-программ (Mini Programs) внутри мобильного приложения

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1735 услуг
Реализация системы мини-программ (Mini Programs) внутри мобильного приложения
Сложный
от 2 недель до 3 месяцев
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    495

Реализация системы мини-программ (Mini Programs) внутри мобильного приложения

Если super app — это платформа целиком, то система мини-программ — конкретный технический компонент этой платформы. Здесь речь о том, как именно мини-программа запускается внутри хост-приложения, как она получает доступ к нативным API, как обновляется без релиза в App Store, и как изолируется от других программ и от хоста.

Runtime для мини-программ

Два кардинально разных подхода.

WebView-based. Мини-программа — это веб-приложение (React, Vue, или кастомный DSL как у WeChat WXML/WXSS). Запускается в изолированном WKWebView (iOS) или WebView (Android). Стандартные веб-технологии, низкий порог входа для партнёров, кроссплатформенность кода мини-программы. Ограничения: производительность ниже нативной, нет доступа к сложным нативным API без Bridge.

Native plugin-based. Мини-программа — скомпилированный нативный код (Android: DEX через DexClassLoader; iOS: compile-time Swift Package). Нативная производительность, полный доступ к API через контролируемые интерфейсы. Ограничения: App Store запрещает загрузку исполняемого кода на iOS, поэтому на iOS нативные плагины должны быть включены в бинарник при сборке.

На практике используем гибрид: базовые партнёрские сервисы — WebView, собственные критичные мини-программы — нативные плагины.

Формат пакета мини-программы

Мини-программа дистрибутируется как zip-архив с манифестом:

{
  "id": "com.partner.loans",
  "version": "2.3.1",
  "minHostVersion": "3.0.0",
  "entryPoint": "index.html",
  "permissions": ["payment", "geolocation"],
  "allowedDomains": ["api.partner.com", "cdn.partner.com"],
  "signature": "sha256:abc123..."
}

При загрузке хост: верифицирует подпись архива (RSA-PSS с публичным ключом партнёра), проверяет minHostVersion совместимость, проверяет permissions против списка разрешённых для данного партнёра, распаковывает в изолированную директорию. Запуск — только после успешной верификации.

Bridge API: дизайн и безопасность

Bridge — единственная точка контакта между мини-программой и хостом. Архитектура запроса-ответа:

На стороне мини-программы (JS):

MiniAppBridge.call('payment.pay', {
  orderId: 'order-123',
  amount: 99.99,
  currency: 'USD'
}).then(result => {
  // result.transactionId
}).catch(err => {
  // err.code, err.message
});

На стороне хоста (нативный код) Bridge:

  1. Получает вызов через WKScriptMessageHandler.userContentController(_:didReceive:) (iOS) или @JavascriptInterface метод (Android)
  2. Парсит method и params
  3. Проверяет: есть ли у этой мини-программы разрешение вызвать payment.pay
  4. Если да — выполняет нативный код (показывает Payment UI, обрабатывает транзакцию)
  5. Возвращает результат через webView.evaluateJavaScript("MiniAppBridge._resolve(requestId, result)")

Каждый метод Bridge имеет явный список разрешений. Вызов метода без нужного разрешения → синхронная ошибка PERMISSION_DENIED. Разрешения выдаются при регистрации партнёра, хранятся на сервере, кешируются в хосте.

Изолированное хранилище и сессии

Каждая мини-программа получает namespace в локальном хранилище: ключи вида {mini_program_id}:{key}. Прямого доступа к SQLite или SharedPreferences хоста — нет. Доступ только через Bridge методы storage.set / storage.get / storage.remove с принудительным namespace.

WebView localStorage тоже изолирован: каждая мини-программа запускается с WKWebViewConfiguration с отдельным WKWebsiteDataStore.nonPersistent() или именованным persistent store. На Android — WebStorage с кастомным директорием и запрет пересечения origin.

Сессия пользователя. Мини-программа получает access token только через Bridge auth.getToken(). Токен выдаётся хостом на 15 минут, привязан к mini_program_id, scope ограничен. Мини-программа не видит master JWT пользователя.

Обновление мини-программ

Обновление — без ревью в App Store. Последовательность:

  1. При запуске мини-программы (или фоново по расписанию) хост проверяет актуальную версию через GET /mini-programs/{id}/version
  2. Если сервер возвращает более новую версию — загружаем архив в фоне
  3. Верифицируем подпись нового архива
  4. При следующем запуске мини-программы — активируем новый пакет
  5. Предыдущая версия — в backup (для rollback при необходимости)

Принудительное обновление: если minHostVersion нового пакета несовместима с текущим хостом — показываем экран «Доступно обновление приложения» вместо запуска мини-программы.

Отладка и DevTools для партнёров

Разработчику мини-программы нужен удобный инструментарий. Предоставляем:

  • Simulator mode: локальный сервер (localhost:8080) как источник мини-программы вместо CDN — хост читает файлы напрямую без верификации подписи (только в debug build)
  • Bridge Inspector: логирование всех Bridge-вызовов в debug консоль Xcode / Android Studio Logcat
  • Mock Bridge: JS-библиотека (mini-program-bridge-mock) для тестирования в браузере без хоста

Кейс. Партнёрская экосистема маркетплейса: 8 партнёров, 23 активных мини-программы (12 WebView, 11 нативных плагинов на Android / compile-time на iOS). Bridge API: 55 методов. Среднее время холодного запуска мини-программы (первый за сессию) — 380 мс на iPhone 14. Тёплый запуск (возврат после паузы) — 80 мс. Обновление фоново: 70% пользователей получают новую версию мини-программы без перезапуска хоста.

Сроки реализации системы мини-программ

Компонент Ориентировочные сроки
WebView runtime + базовый Bridge (20 методов) 8–12 недель
Маркетплейс + подпись + обновление +4–6 недель
Нативный plugin runtime (Android) +4–8 недель
Partner SDK + DevTools +4–6 недель

Стоимость рассчитывается индивидуально после анализа требований к Bridge API, числу партнёров и требованиям безопасности.