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Скачает файл по переданной ссылке
requestScreenMaxBrightness()-functionУстановит яркость экрана на максимум. Клиент поддержит максимальную яркость 30 секунд, затем восстановит исходное значение
restoreScreenBrightness()-functionВосстановит яркость экрана до исходного значения
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 }
WebAppChangeScreenBrightnessУправление яркостью экрана{ requestId: string, maxBrightness: boolean }

maxBrightness: true — установит максимальную яркость. Клиент поддержит максимальную яркость 30 секунд, затем восстановит исходное значение

maxBrightness: false — восстановит яркость экрана до исходного значения
-
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
в разработке
Скопирует переданный текст в буфер обмена--

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