Реалізація системи міні-програм (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

Реалізація системи міні-програм у мобільних додатках

Якщо 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. Дозволи видаються під час реєстрації партнера, зберігаються на сервері та кешуються в хосте.

Ізольоване сховище та сеанси

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

WebView localStorage також ізольований: кожна міні-програма запускається з WKWebViewConfiguration з окремим WKWebsiteDataStore.nonPersistent() або названим постійним сховищем. На Android — WebStorage з кастомною директорією та запобіганням перетину origin.

Сеанс користувача. Міні-програма отримує токен доступу тільки через Bridge auth.getToken(). Хост видає токен на 15 хвилин, прив'язаний до mini_program_id, з обмеженою областю. Міні-програма ніколи не бачить 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, кількості партнерів та вимог безпеки.