Функции устройства
Блокировка скриншотов на странице
Позвольте одной странице приложения отключить скриншоты, запись экрана и превью в списке недавних — и верните всё, когда пользователь уйдёт
1Что это делает#
Одна строка на вашей странице включает блокировку захвата экрана Android для экрана, который сейчас видит пользователь:
- скриншоты не получаются (пользователь видит сообщение Android «Не удалось сделать снимок экрана»)
- запись экрана и трансляция показывают чёрный кадр
- превью приложения в списке недавних скрыто
Чего эта защита не может — и не может ничто в Android — так это помешать сфотографировать экран другим телефоном. Если нужно и это, используйте водяной знак, а не флаг.
const b = window.WebToApk || null;
// On the sensitive screen:
b?.setSecureScreen(true);
// Leaving it early (a modal closing, a tab switch inside one page):
b?.setSecureScreen(false);
// Current state:
const locked = b?.isSecureScreen();2Защитите одну страницу, а не всё приложение#
Защита принадлежит странице, которая её запросила. AppMint снимает её, как только приложение переходит куда-либо ещё: на новую страницу, маршрут pushState или маршрут #hash. Поэтому экран выписки можно защитить, а в остальной части приложения скриншоты делаются как обычно.
Это также означает, что после перезагрузки страница должна запросить защиту снова: новый документ ещё ничего не запрашивал, а наследование ответа предыдущего приводит к тому, что приложения блокируются на экранах, которые никто не собирался защищать.
3В одностраничном приложении#
Смена маршрута внутри одной страницы автоматически снимает защиту, поэтому обычно её включают при показе защищённого экрана, а остальное делает навигация.
function showStatement() {
render(statementView);
window.WebToApk?.setSecureScreen(true);
}
// Nothing to undo on the way out — moving to another route
// releases it. Call setSecureScreen(false) yourself only when
// you hide the sensitive content WITHOUT navigating.4Не используйте для этого таймер#
Распространённая идея — повторно включать защиту по интервалу, например каждую секунду, и давать ей сняться, когда страница перестаёт её запрашивать. Это не работает, и стоит понимать почему: Android не спрашивает ваше приложение, когда пользователь нажимает кнопки скриншота. Флаг должен быть уже установлен на окне. Любая секунда, когда страница занята, притормаживается в фоне или находится между тиками таймера, — это секунда, когда скриншот проходит.
Запросите защиту один раз, когда появляется конфиденциальное содержимое. AppMint снимет её, когда пользователь уйдёт.