Уявіть: маркетплейс із 50 партнерами, кожен хоче розмістити свій екран миттєво, без релізів в App Store. Керування цими модулями без шкоди безпеці та продуктивності — це виклик. Відповідь — система міні-програм. Ми розробляємо та впроваджуємо таку систему для Super App, забезпечуючи ізольоване виконання, безпечний доступ до нативних API та оновлення без релізу в App Store. Це не просто WebView-обгортка: ми будуємо повноцінну інфраструктуру, яка дозволяє партнерам створювати свої модулі, а хост-застосунку — контролювати кожен аспект їхньої роботи. Наша компанія має 8+ років досвіду в мобільній розробці та реалізувала понад 20 Super App проєктів, включаючи екосистеми для банків і маркетплейсів. Заміна моноліту на модульну архітектуру скорочує час виведення партнерського сервісу на 70%, а зниження вартості володіння сягає 30% за рахунок відсутності App Store рев'ю. Ми гарантуємо безпеку завдяки суворій системі дозволів та ізоляції. Оцінимо ваш проєкт за 2 дні — зв'яжіться для консультації. Орієнтовна вартість проєкту — від $40,000 залежно від складності.
Архітектура екосистеми вбудованих модулів
Два кардинально різних підходи до 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, власні критичні міні-програми — нативні плагіни. Нативний runtime кращий за WebView в 2–3 рази за швидкістю на складних UI-сценаріях. Порівняння підходів:
| Характеристика | WebView-based | Native plugin-based |
|---|---|---|
| Холодний старт | 500–800 мс | 100–200 мс |
| Доступ до API | Тільки через Bridge | Повний нативний |
| Оновлення | Без релізу | Без релізу (Android), з релізом (iOS) |
| Продуктивність UI | Середня | Висока |
WebView-based міні-програми простіші в розробці, але нативні плагіни в 2–3 рази швидші.
Формат пакета міні-програми
Міні-програма дистрибутується як 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:
- Отримує виклик через
WKScriptMessageHandler.userContentController(_:didReceive:)(iOS) або@JavascriptInterfaceметод (Android) - Парсить
methodтаparams - Перевіряє: чи є у цієї міні-програми дозвіл викликати
payment.pay - Якщо так — виконує нативний код (показує Payment UI, обробляє транзакцію)
- Повертає результат через
webView.evaluateJavaScript("MiniAppBridge._resolve(requestId, result)")
Кожен метод Bridge має явний список дозволів. Виклик методу без потрібного дозволу -> синхронна помилка PERMISSION_DENIED. Дозволи видаються при реєстрації партнера, зберігаються на сервері, кешуються в хості.
Детальніше про компоненти Bridge
Bridge API складається з модулів: payment, auth, storage, geolocation, ui. Кожен модуль має власний набір дозволів. Наприклад, модуль payment вимагає дозволу payment, а модуль geolocation — geolocation. Документація доступна в Partner SDK.Чому ізольоване сховище критичне?
Кожна міні-програма отримує 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. Послідовність:
- При запуску міні-програми (або у фоні за розкладом) хост перевіряє актуальну версію через
GET /mini-programs/{id}/version - Якщо сервер повертає новішу версію — завантажуємо архів у фоні
- Верифікуємо підпис нового архіву
- При наступному запуску міні-програми — активуємо новий пакет
- Попередня версія — в 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% користувачів отримують нову версію міні-програми без перезапуску хоста. Впровадження системи дозволило збільшити конверсію на 15% та знизити вартість інтеграції на 40%.
Що входить у роботу
- Аналіз вимог та проектування Bridge API
- Реалізація WebView- та нативного runtime
- Інтеграція з CDN, підпис пакетів та система оновлень
- DevTools для партнерів: Simulator, Inspector, Mock
- Документація та навчання команди партнера
- Підтримка після запуску
Орієнтовні терміни
| Компонент | Терміни |
|---|---|
| WebView runtime + базовий Bridge (20 методів) | 8–12 тижнів |
| Маркетплейс + підпис + оновлення | +4–6 тижнів |
| Нативний plugin runtime (Android) | +4–8 тижнів |
| Partner SDK + DevTools | +4–6 тижнів |
Вартість розраховується індивідуально після аналізу вимог до Bridge API, кількості партнерів та вимог безпеки. Зв'яжіться для точної оцінки вашого проєкту. Отримайте консультацію — ми підберемо оптимальну архітектуру.







