MAX Bridge

Библиотека MAX Bridge позволяет мини-приложениям корректно взаимодействовать с API MAX и API операционной системы на устройстве пользователя. В этом разделе содержится список объектов и событий MAX Bridge

Подключение библиотеки

Добавьте библиотеку max-web-app.js

HTML
Скопировать
<script src="https://st.max.ru/js/max-web-app.js"></script>

С подключением библиотеки мини-приложение получит доступ к глобальному объекту WebApp в window и сценариям для его использования

Объекты

Window.WebApp

Этот глобальный объект связывает мини-приложение с клиентом и позволяет взаимодействовать с MAX, управлять интерфейсом приложения и получать информацию о пользователях. Объект window.WebApp создаётся с каждым запуском сервиса, предзагружает данные и не требует отдельной инициализации — его методы и параметры доступны напрямую

Версия приложения MAX передаётся в стартовых параметрах URL через WebAppVersion и доступна в свойстве version объекта window.WebApp. Этот параметр не участвует в формировании хеша для валидации — в хеше учитываются только данные из WebAppData

ПолеВходные параметрыТип данныхОписание
initData-stringОбъект со стартовыми параметрами, который как и WebAppData, применяется для отображения данных о пользователе в UI
initDataUnsafe-WebAppDataОбъект со стартовыми параметрами, который не должен использоваться для валидации пользователей
platform-stringПлатформа, с которой запущено мини-приложение.
Возможные значения: ios, android, desktop, web
version-stringВерсия приложения MAX, с которого запущено мини-приложение.
Имеет формат <year>.<build_number — возрастающий счётчик>.<patch_version — для патчей>, например 25.9.16
onEvent()eventName: string, callback: functionfunctionПодпишет на событие с использованием callback
offEvent()eventName: string, callback: functionfunctionОтпишет callback от события
ready()-functionСообщит MAX, что мини-приложение готово к работе
close()-functionЗакроет мини-приложение
requestContact()-functionПопросит телефон у пользователя в нативном диалоговом окне
BackButton-BackButtonУправляет кнопкой Назад в шапке мини-приложения
ScreenCapture-ScreenCaptureОбъект для управления возможностью делать скриншоты / записывать экран
HapticFeedback-HapticFeedbackОбъект для управления тактильными вибро-откликами
enableClosingConfirmation()-functionПредупредит пользователя о риске потерять заполненные данные, если закрыть мини-приложение
disableClosingConfirmation()-functionНе предупредит пользователя о риске потерять заполненные данные, если закрыть мини-приложение
openLink()url: stringfunctionОткроет ссылку во внешнем браузере
openMaxLink()url: stringfunctionОткроет другое мини-приложение внутри MAX, закрыв текущее. Ссылка должна быть вида

https://max.ru/<botName>?startapp
shareContent()text: string, link: stringfunctionМетод, который используется вызова нативного экрана шаринга
shareMaxContent()text: string, link: stringfunctionМетод, который используется для вызова экрана шаринга внутри Max
downloadFile()url: string, fileName: stringfunctionМетод, который используется для скачивания файла по переданной ссылке
openCodeReader()fileSelect: booleanfunctionОткрыть камеру для считывания QR кода.

Клиент вернет результат в виде строки (если QR код был найден и распознан)
  • fileSelect = true - доступен так же выбор из галереи
  • fileSelect = false - доступно сканирование только через камеру


Если fileSelect не передан - по умолчанию считается true

WebAppData

Этот объект содержит данные, которые мини-приложение получает при запуске. Совпадает с initData

ПараметрТип данныхОписание
query_idstringУникальный идентификатор сессии мини-приложения
auth_dateint32Время получения данных с бэкенда
hashstringХэш переданных параметров, который можно использовать для проверки их достоверности
start_paramWebAppStartParamОбъект с дополнительными данными
userobjectОбъект с данными о пользователе, который открывает мини-приложение
user.idint64Уникальный идентификатор пользователя MAX
user.first_namestringИмя пользователя
user.last_namestringФамилия пользователя
user.usernamestringНик пользователя
user.language_codestringЯзык интерфейса MAX
user.photo_urlstringСсылка на фото профиля пользователя
chatChatОбъект с данными о чате, из которого открыто мини-приложение
chat.idnumberИдентификатор чата
chat.typestringТип чата

WebAppStartParam

Этот объект содержит дополнительные данные, которые мини-приложение получает при запуске. Данные передаются в URL мини-приложения в поле startapp?=PARAMS

Передать можно максимум 512 символов. Если символов больше, объект будет удалён из URL-ответа. Разрешены символы A-Z, a-z, 0-9, _ (подчеркивание) и - (минус)

BackButton

Этот объект управляет кнопкой Назад в шапке мини-приложения

ПолеТип данныхОписание
isVisiblebooleanЗадаёт состояние false по умолчанию
onClick()functionУстанавливает обработчик событий
offClick()functionУбирает обработчик событий нажатия кнопки
show()functionДелает кнопку Назад активной и видимой
hide()functionСкрывает кнопку Назад

ScreenCapture

Этот объект управляет возможностью делать скриншоты / записывать экран

ПолеТип данныхОписание
isScreenCaptureEnabledbooleanГеттер, который позволяет узнать, разрешено ли делать скриншоты / запись экрана в данный момент

true - запрещено
false - разрешено

false по умолчанию
enableScreenCapture()functionВключить запрет на скриншоты / запись экрана
disableScreenCapture()functionОтключить запрет на скриншоты / запись экрана

HapticFeedback

Этот объект используется для активации тактильной обратной связи при взаимодействии пользователя с веб-приложением.

ПолеТип данныхОписание
impactOccurred(impactStyle, disableVibrationFallback)string, booleanМетод сообщает, что произошло воздействие.

Приложение Max может воспроизвести соответствующие тактильные эффекты на основе переданного значения стиля.

Стиль может иметь одно из следующих значений:

  • soft - мягкая вибрация
  • light - лёгкая вибрация
  • medium - средняя вибрация
  • heavy - сильная вибрация
  • rigid - жёсткая вибрация
notificationOccurred(notificationType, disableVibrationFallback)string, booleanМетод сообщает, что событие или действие выполнены успешно, не удалось или выдано предупреждение.

Приложение Max может воспроизводить соответствующие тактильные сигналы на основе переданного значения типа.

Тип может быть одним из следующих значений:

  • error - Указывает, что задача или действие не удалось
  • success - Указывает, что задача или действие были успешно завершены
  • warning - Указывает, что задача или действие вызвали предупреждение
selectionChangedbooleanМетод сообщает, что пользователь изменил выбор.

Приложение Max может воспроизвести соответствующие тактильные сигналы.

Не используйте эту обратную связь, когда пользователь делает или подтверждает выбор; используйте ее только при изменении выбора.

DeviceStorage

Этот объект предоставляет мини-приложению доступ к хранилищу данных, ассоциированному с конкретным пользователем MАХ

ПолеВходные параметрыТип данныхОписание
setItem()key, valuestring, stringСохраняет переданную пару «ключ-значение» в локальном хранилище устройства
getItem()keystringПолучает значение из локального хранилища устройства по указанному ключу
removeItem()keystringУдаляет значение из локального хранилища устройства по указанному ключу
clear()--Очищает все ключи, ранее сохранённые ботом в локальном хранилище устройства

SecureStorage

Этот объект предоставляет мини-приложению доступ к защищённому хранилищу данных

ПолеВходные параметрыТип данныхОписание
setItem()key, valuestring, stringСохраняет переданную пару «ключ-значение» в защищённом хранилище устройства
getItem()keystringПолучает значение из защищённого хранилища устройства по указанному ключу
removeItem()keystringУдаляет значение из защищённого хранилища устройства по указанному ключу

BiometricManager

Этот объект нужен для аутентификации, когда доступ к данным в keychain получается через биометрические идентификаторы Перед первым использованием этого объекта его необходимо инициализировать с помощью метода init.

ПолеТип данныхОписание
isInitedbooleanБыла ли ранее проведена первичная инициализация
initfunctionПервичная инициализация биометрии
  • Проверяем доступность биометрии на устройстве
  • Проверяем предоставлен ли доступ

Вызывается единожды при самом первом использовании.
isBiometricAvailablebooleanДоступна ли биометрия на устройстве пользователя, который запустил мини-приложение

false, если пользователь отказался предоставить доступ к биометрии
biometricTypestring[]
  • fingerprint
  • faceid
  • unknown

Если пользователь отказался предоставить доступ к биометрии, biometricType=["unknown"]
Для android всегда ["unknown"]
deviceIdstring | nullИдентификатор устройства (можно использовать для сопоставления токена с устройством)

null, если пользователь отказался предоставить доступ к биометрии
isAccessRequestedbooleanБыл ли ранее отправлен запрос на предоставление доступа к биометрии устройства

false, если пользователь отказался предоставить доступ к биометрии
isAccessGrantedbooleanПредоставлен ли доступ к биометрии

false, если пользователь отказался предоставить доступ к биометрии
isBiometricTokenSavedbooleanЕсть ли токен в безопасном хранилище устройства

false, если пользователь отказался предоставить доступ к биометрии
requestAccessfunctionЗапросить доступ на использование биометрии на устройстве
authenticatefunctionДля запуска процесса аутентификации
updateBiometricTokenfunctionМетод, который обновляет биометрический токен в безопасном хранилище на устройстве

Чтобы удалить токен, передайте пустую строку.
openSettingsfunctionПредложение перейти в настройки Max на экран приватности, чтобы дать доступ к биометрии устройства для мини-приложения.

Вызывает закрытие мини-приложение.

События Bridge

НазваниеОписаниеeventDataЧто отвечает
WebAppReadyСигнализирует нативному приложению, что миниапп готов к работе.

Если контент мини-приложения не был загружен за 15 секунд - клиент отобразит экран с ошибкой "нет сети".

Если контент мини-приложения был загружен ИЛИ было вызвано событие WebAppReady на платформе - платформа отображает загруженную страницу.

Мини-приложению не требуется промис со стороны нативного клиента.
--
WebAppCloseСигнализирует нативному приложению, что миниап должен быть закрыт.

Мини-приложению не требуется промис со стороны нативного клиента.
--
WebAppSetupBackButtonУправляет поведением кнопки назад, которая может отображаться в заголовке мини-приложения в интерфейсе MAX

isVisible = true - кнопка назад отображается

isVisible = false - кнопка назад не отображается
isVisible: boolean-
WebAppRequestPhoneПолучив это событие, клиенты должны показать пользователю сообщение, указывающее, что мини-приложение просит его поделиться своим номером телефона.

Мини-приложению требуется промис со стороны нативного клиента.
-phone: string
WebAppSetupClosingBehaviorУправляет поведением окна с запущенным мини-приложением

needConfirmation = true - клиент должен запрашивать подтверждение пользователя с помощью всплывающего окна «Внесенные вами изменения могут быть не сохранены»

needConfirmation = false - клиент не будет запрашивать

Если явно не передано - запрашиваться не будет.
needConfirmation: boolean-
WebAppBackButtonPressedУведомление о том, что кнопка "Назад" была нажата пользователем--
WebAppOpenLinkОткрытие ссылки во внешнем браузереurl: string-
WebAppOpenMaxLinkОткрытие диплинка MAX внутри клиентаpath: string-
WebAppShareНативный шаринг из мини-приложения{ requestId: string, text: string, link: string }

Максимальная длина - 200 символов
В случае успеха:

{ requestId: string, status: "shared" }

В случае если шторка была закрыта:

{ requestId: string, status: "cancelled" }

В случае ошибки:

{ error: { code: "client.web_app_share.<reason>" } }

Возможные значения reason:
  • too_large_text - слишком длинный текст
  • too_large_link - слишком длинная ссылка
  • invalid_request - не передан хотя бы один параметр
WebAppMaxShareШаринг из мини-приложения в диалоги / групповые чаты Max{ requestId: string, text: string, link: string }В случае успеха:

{ requestId: string, status: "shared" }

В случае если шторка была закрыта:

{ requestId: string, status: "cancelled" }

В случае ошибки:

{ error: { code: "client.web_app_max_share.<reason>" } }

Возможные значения reason:
  • too_large_text - слишком длинный текст
  • too_large_link - слишком длинная ссылка
  • invalid_request - не передан хотя бы один параметр
WebAppSetupScreenCaptureBehaviorУправление возможностью делать скриншоты / записывать экранВ случае успеха:

{ requestId: string, isScreenCaptureEnabled: boolean }

Возможные значения isScreenCaptureEnabled:
  • true - разрешить делать скриншоты / запись экрана
  • false - запретить делать скриншоты / запись экрана
В случае успеха:

{ requestId: string, isScreenCaptureEnabled: boolean }
WebAppHapticFeedbackImpactВ случае когда произошел тактильный отклик (необходимо вызвать вибрацию)В случае успеха:

{ requestId: string, impactStyle: string, disableVibrationFallback: boolean }

Возможные значения impactStyle:
  • soft - мягкая вибрация
  • light - лёгкая вибрация
  • medium - средняя вибрация
  • heavy - сильная вибрация
  • rigid - жёсткая вибрация


disableVibrationFallback - разрешение использовать вибрацию с постоянной амплитудой на устройствах, которые не поддерживают вибрацию с переменной амплитудой. Значение по умолчанию: false.
В случае успеха:

{ requestId: string, status: "impactOccured" }

В случае ошибки:

{ error: { code: "client.haptic_feedback_impact.<reason>" } }

Возможные значения reason:
  • not_supported - haptic feedback недоступен на устройстве
  • invalid_impact_style - передан неизвестный impact style
WebAppHapticFeedbackNotificationВ случае когда событие или действие выполнены успешно, не выполнены или выдано предупреждениеВ случае успеха:

{ requestId: string, fileSelect: boolean }

Возможные значения notificationType:
  • error - Указывает, что задача или действие не удалось
  • success - Указывает, что задача или действие были успешно завершены
  • warning - Указывает, что задача или действие вызвали предупреждение


disableVibrationFallback - разрешение использовать вибрацию с постоянной амплитудой на устройствах, которые не поддерживают вибрацию с переменной амплитудой. Значение по умолчанию: false.
В случае успеха:

{ requestId: string, status: "notificationOccured" }

В случае ошибки:

{ error: { code: "client.haptic_feedback_notification.<reason>" } }

Возможные значения reason:
  • not_supported - haptic feedback недоступен на устройстве
  • invalid_notification_type - передан неизвестный notification type
WebAppHapticFeedbackSelectionChangeСообщает генератору виброотклика, что пользователь изменил выбор.В случае успеха:

{ requestId: string, disableVibrationFallback: boolean }

disableVibrationFallback - разрешение использовать вибрацию с постоянной амплитудой на устройствах, которые не поддерживают вибрацию с переменной амплитудой. Значение по умолчанию: false.
В случае успеха:

{ requestId: string, status: "selectionChanged" }

В случае ошибки:

{ error: { code: "client.haptic_feedback_selection_change.<reason>" } }

Возможные значения reason:
  • not_supported - haptic feedback недоступен на устройстве
WebAppOpenCodeReader
Открывает камеру для считывания QR кода и получает результат сканирования.

Клиент не имеет возможности ответить, что код не был найден.
В случае успеха:

{ requestId: string, fileSelect: boolean }

  • fileSelect = true - доступен так же выбор из галереи
  • fileSelect = false - доступно сканирование только через камеру
В случае успеха:

{ requestId: string, value: string }

В случае ошибки:

{ error: { code: "client.open_code_reader.<reason>" } }

Возможные значения reason:
  • not_supported - на устройстве нет камеры
  • permission_denied - пользователь не дал доступ к камере
  • cancelled - пользователь закрыл камеру
WebAppDownloadFile
в разработке
Позволяет скачивать файлы на устройство пользователя--
WebAppCopyText
в разработке
Копирует переданный текст в буфер обмена--

ℹ️ Если у вас возникли вопросы, посмотрите раздел с ответами