Библиотека MAX Bridge — тот самый window.WebApp, через который мини-приложение получает доступ к камере, буферу обмена, NFC и ещё дюжине системных возможностей телефона. Раздел «Работа с экраном» на первый взгляд похож на остальные: пять методов, три возможности. Но внутри — сразу два несочетаемых наблюдения: таймер, который откатывает свою же настройку сам, и пара методов, различающихся смыслом, но не формой ответа.
Пять методов трёх разных возможностей
Раздел «Работа с экраном» документации MAX Bridge (dev.max.ru) не выделен под один именованный объект, как соседние разделы библиотеки — NfcManager или HapticFeedback. Здесь смешаны три разных адресации: два метода яркости экрана вызываются прямо от window.WebApp, два метода записи экрана собраны в отдельный подобъект ScreenCapture, а метод размера области просмотра снова стоит прямо на верхнем уровне — рядом с яркостью, хотя к ней не имеет отношения.
Итого пять методов на три независимые задачи: управление яркостью, разрешение на скриншоты и запись экрана, размер видимой области мини-приложения.
Максимум держится 30 секунд и откатывается сам
Первый метод раздела поднимает яркость экрана пользователя на максимум:
Устанавливает яркость экрана пользователя на максимум.
window.WebApp.requestScreenMaxBrightness(), dev.max.ruСледом — условие, которое легко принять за формальность:
Приложение поддержит максимальную яркость 30 секунд, затем восстановит исходное значение.
dev.max.ruТо есть откат встроен в сам метод: мини-приложению не нужно ставить свой таймер и вызывать восстановление яркости по расписанию — MAX сделает это через полминуты сам, даже если код мини-приложения к этому моменту вообще не выполнится (вкладка закрыта, скрипт упал). Второй метод раздела нужен ровно на один случай — вернуть исходную яркость раньше тридцати секунд:
Восстанавливает яркость экрана пользователя до исходного значения.
window.WebApp.restoreScreenBrightness(), dev.max.rurestoreScreenBrightness() сразу после того, как максимальная яркость больше не нужна — например, пользователь закрыл QR-код или карту, показанные на весь экран, — есть смысл, только если это происходит быстрее 30 секунд. Позже метод уже ничего не изменит: автооткат случится раньше.Один тип ответа на оба действия
У requestScreenMaxBrightness() и restoreScreenBrightness() противоположный смысл — поднять яркость и вернуть её обратно. Но документация описывает для них одинаковый тип возвращаемых данных:
Promise<{ maxBrightness: boolean }>
Тип возвращаемых данных обоих методов яркости, dev.max.ruПоле maxBrightness в ответе — не признак того, какой из двух методов был вызван, а состояние экрана в момент ответа: включена сейчас максимальная яркость или нет. После requestScreenMaxBrightness() ожидаемое значение — true, после restoreScreenBrightness() — false. Разработчику стоит проверять именно это поле, а не полагаться на то, какой метод он только что вызвал: если максимальная яркость уже откатилась сама по 30-секундному таймеру, restoreScreenBrightness() всё равно вернёт валидный ответ с maxBrightness: false.
Один переключатель на скриншоты и запись экрана
Вторая возможность раздела — не про яркость, а про то, может ли пользователь зафиксировать содержимое мини-приложения:
Включает возможность делать скриншоты или записывать экран.
window.WebApp.ScreenCapture.enableScreenCapture(), dev.max.ruОтключает возможность делать скриншоты или записывать экран.
window.WebApp.ScreenCapture.disableScreenCapture(), dev.max.ruОба метода зеркальны и возвращают одинаковую форму ответа — Promise<{ isScreenCaptureEnabled: boolean }>. Разделения на «разрешить скриншот» отдельно от «разрешить запись видео» в API нет: один флаг управляет обоими способами зафиксировать экран сразу.
Высота и ширина экрана — это строки
Последний метод раздела не про яркость и не про запись, а про размер:
Возвращает текущий размер доступной области просмотра мини-приложения (viewport). Эти данные необходимо учитывать для корректного отображения мини-приложения.
window.WebApp.getViewportSize(), dev.max.ruТип ответа — Promise<{ height: string, width: string }>. Высота и ширина здесь описаны как строки, а не как числа, хотя речь о размере в пикселях. Прежде чем использовать значения в расчётах — например, чтобы подогнать вёрстку мини-приложения под доступную область, — их нужно явно привести к числу; передать результат напрямую в CSS или арифметику без преобразования не получится.
Частые вопросы
Нужно ли мини-приложению MAX самому возвращать обычную яркость экрана?
Нет, если устраивает пауза в 30 секунд — MAX Bridge делает это автоматически. Вызывать restoreScreenBrightness() имеет смысл только для более раннего отката.
Как отличить, какой метод яркости был вызван последним — requestScreenMaxBrightness или restoreScreenBrightness?
По полю maxBrightness в ответе: true означает, что сейчас включена максимальная яркость, false — что она восстановлена до исходного значения, независимо от того, какой метод вернул этот ответ.
Можно ли в мини-приложении MAX запретить видеозапись экрана, но разрешить скриншоты?
Нет. ScreenCapture.enableScreenCapture() и disableScreenCapture() управляют скриншотами и записью экрана одним общим флагом, раздельного переключателя для каждого способа в API нет.
В каком виде getViewportSize() возвращает размер экрана мини-приложения MAX?
В виде строк: и height, и width типизированы как string, а не number, — значения нужно приводить к числу перед использованием в расчётах.
Развиваете канал или бота в MAX?
Добавьте его в каталог MaxOfficial — читатели находят каналы через поиск и подборки, а статистика копится автоматически.
Добавить канал в каталог







