Skip to main content
ExodeMiniApp — основной класс клиента. Один экземпляр на приложение. Все методы типизированы и возвращают Promise.

Создание экземпляра

Параметры конфигурации

string
обязательно
Идентификатор мини-приложения, передаётся хосту при handshake. Для кастомных страниц значение выбирается произвольно и нигде не регистрируется: хост доверяет приложению по origin адреса из поля «URL приложения (iframe)».
string
Origin страницы школы, внутри которой открыто приложение, — например https://my-school.exode.biz или ваш собственный домен школы. SDK отправляет сообщения только на этот origin и принимает ответы только от него. По умолчанию * (любой origin) — в этом случае SDK пишет предупреждение в консоль. В продакшене указывайте origin явно.
number
Таймаут handshake и всех команд (мс). По умолчанию 10000.
Клиент должен исполняться внутри iframe. Попытка init() в top-level окне выбросит ошибку ExodeMiniApp must be used inside an iframe.

Инициализация

Метод выполняет handshake с хостом и возвращает MiniAppContext. Повторный вызов init() выбросит ошибку. Если страница открыта без входа (опция «Доступна без входа»), handshake всё равно проходит, но ctx.user.id равен 0, а персональные поля пустые — проверяйте ctx.user.id > 0, прежде чем показывать данные пользователя.
Контекст из init() не подписан и подходит только для отображения. Чтобы достоверно узнать пользователя на своём бэкенде, используйте Init Data.
Если handshake не успел завершиться за timeout мс — Promise отклоняется. Проверьте, что iframe открыт внутри Exode и targetOrigin корректен.

Навигация (app.route)

path — это шаблон маршрута платформы (а не готовый URL), значения подставляются из params:
Шаблоны маршрутов те же, что и в deep link-ах мобильного приложения (pageId). Текущий маршрут хоста в том же формате приходит в событии route:changed.
Когда приложение скрыто (пользователь ушёл на другую страницу или свернул окно), хост игнорирует команды navigate, navigate:back и setTabbarVisible.

UI-команды (app.ui)

minimize() работает только для страниц с типом окна «Плавающее окно», «Панель справа» или «Во весь экран» (см. Кастомные страницы). Свёрнутое окно не выгружается — приложение получает событие visibility:changed с visible: false и продолжает жить.На кастомных страницах школы команда setHeaderVisible сейчас не обрабатывается хостом и ничего не меняет.
Promise команды разрешается, когда хост подтвердил получение. Хост подтверждает и те команды, которые в текущем контексте ничего не делают, поэтому успешное выполнение Promise не гарантирует видимого эффекта.

События (app.on)

Подписка на события хоста. Возвращает функцию отписки.
Полный список событий и их payload’ов — в разделе Контекст и типы.

Получение текущего контекста

init() возвращает контекст один раз. Для последующего доступа используйте getContext(): он возвращает контекст из handshake, к которому bridge применяет только события context:updated.
События theme:changed, user:updated, school:updated и config:updated не обновляют объект из getContext(). Если вам нужны актуальные тема, пользователь или конфиг, подпишитесь на эти события через app.on(...) и храните значения у себя — или используйте React-хуки, которые делают это автоматически.

Завершение работы

Закрывает bridge, отключает слушатели postMessage, очищает обработчики событий. Вызывайте при размонтировании приложения.

Полный пример


Обновлено: 2026-09-28 05:04 UTC