Skip to main content

Архитектура

Screenshot2026 01 27at18 51 38 Важно: Во всех примерах этой документации мобильный кошелек Tonhub используется как референсная реализация. После развертывания соответствующих окружений командой Holders нужно адаптировать пути и названия под нейминг вашего кошелька.

Как это работает

  1. Инъекция до загрузки контента: JavaScript-код внедряется в WebView до загрузки страницы через injectedJavaScriptBeforeContentLoaded
  2. Двунаправленная коммуникация: веб-приложение отправляет сообщения через window.ReactNativeWebView.postMessage(), а нативное приложение отвечает через webView.injectJavaScript()
  3. API на основе Promise: большинство методов возвращают Promise и используют callbacks для получения результатов

Приоритеты API

Механизм обмена сообщениями

Формат сообщения из WebView в нативное приложение

Формат ответа из нативного приложения в WebView

Базовый паттерн инъекции

Мост TonConnect

Window Object:window.tonhub
Назначение: реализация протокола TonConnect v2 для подключения кошелька и подписания транзакций.
Приоритет: критический, обязателен для работы

Интерфейс TypeScript

Реализация инъекции

Обработка на стороне нативного приложения

Методы Solana-транзакций

Для поддержки Solana-кошельков в Holders добавлены два дополнительных метода.

sendSolanaTransaction

Отправляет legacy-транзакцию Solana, то есть формат до версии v0. Транзакция передается как сериализованное сообщение в кодировке base64.
Параметры:
  • transaction (string) — сериализованное Solana-сообщение в base64, legacy-формат
Возвращает:
  • result (string) — подпись транзакции в формате Base58 при успешной отправке
  • error — объект ошибки при отклонении или неудаче

sendSolanaVersionedTransaction

Отправляет versioned-транзакцию Solana формата v0. Используется для транзакций с Address Lookup Tables.
Параметры:
  • transaction (string) — сериализованный VersionedTransaction в base64
Возвращает:
  • result (string) — подпись транзакции в формате Base58 при успешной отправке
  • error — объект ошибки при отклонении или неудаче

Реализация Solana-методов на стороне нативного приложения

Обработка Solana-транзакций

WebView Usage Example

Пример использования WebView

Javascript

Main Button API

Window Object:window['main-button']
Purpose: Control native action button displayed over the WebView (similar to Telegram Mini Apps).
Priority: High

TypeScript Interface

Injection Implementation

Typescript

Native-Side Handling

Typescript

Status Bar API

Window Object:window['status-bar']
Purpose: Control status bar style and provide device safe area insets.
**Priority: **Medium

TypeScript Interface

Injection Implementation

Typescript

Native-Side Handling

Typescript

Toaster API

**Window Object: **window['toaster']
Purpose: Display native toast notifications over the WebView.
Priority: Medium

TypeScript Interface

Injection Implementation

Typescript

Native-Side Handling

Typescript

Auth API

Window Object:window['tonhub-auth']
**Purpose: **Request biometric user authentication and manage app protection state.
Priority: High (for critical operations)

TypeScript Interface

Injection Implementation

Typescript

Native-Side Handling

Typescript

Wallet API

Window Object:window['dapp-wallet']
Purpose: Integration with Apple Pay and Google Pay for adding cards to device wallet.
Priority: Medium (for card functionality)

TypeScript Interface

Injection Implementation

Typescript

Native-Side Handling (iOS Example)

Typescript

DApp Client API

Window Object:window['dapp-client']
**Purpose: **Manage application lifecycle, navigation, and native interface interaction.
Priority: High

TypeScript Interface

Injection Implementation

Typescript

Native-Side Handling

Typescript

Support API

Window Object: window[‘dapp-support’]
Purpose: Integration with support system (e.g., Intercom) for user communication.
Priority: Low (optional)

TypeScript Interface

Injection Implementation

Typescript

Native-Side Handling

Typescript

Emitter API

Window Object:window['dapp-emitter']
Purpose: Transfer events from WebView to native application (e.g., loading events).
Priority: Medium

TypeScript Interface

Injection Implementation

Typescript

Native-Side Handling

Typescript

Testing

API Availability Check

In WebView browser console:

Test Calls

Javascript