Как отслеживать закрытие Telegram Web App?

Нужно отслеживать закрытие telegram web app на мобильниках.

Пробовал:

window.addEventListener('beforeunload', (event) => {`...`})

window.addEventListener('unload', (event) => {`...`})

window.addEventListener('visibilitychange', (event) => {`...`})

Ничего не срабатывает на мобильных устройствах. Почитал документацию. В ней нет нужного события, которое можно отловить.


Ответы (2 шт):

Автор решения: Mikhail Zhuikov

Как вариант:

<script>Telegram.WebApp.MainButton
        .setText('CLOSE WEBVIEW')
        .show()
        .onClick(function(){ webviewClose(); });
</script>

<div id="buttons" style="margin-top:100px;">          
<button onclick="webviewClose();">Close</button>
</div>
→ Ссылка
Автор решения: kattyflanker

К сожалению, Telegram Web App на мобильных устройствах не предоставляет события, которое напрямую отслеживает закрытие через встроенную кнопку X (в правом верхнем углу)

Я тоже пробовал классические события:

window.addEventListener('beforeunload', ...)
window.addEventListener('unload', ...)
document.addEventListener('visibilitychange', ...)

На мобилных они не срабатывают стабильно (или вовсе не срабатывают)

Что можно сделать?:

  1. Использовать WebSocket или heartbeat-пинг

        Если у вас есть подключение к серверу, можно определить закрытие по разрыву
        соединения. Например, WebSocket можно завершать явно, если Web App закрыт.

  1. Сохранять всё по ходу

        Если нужно сохранить состояние – делайте это при каждом взаимодействии
        пользователя. Надёжнее, чем надеяться на событие выхода.

  1. Использовать кастомные кнопки

        На Telegram.WebApp.MainButton или Telegram.WebApp.BackButton можно повесить onClick
        с вызовом Telegram.WebApp.close(). В этом случае у вас есть контроль над закрытием.

Но именно встроенную X Telegram не даёт отследить - такая возможность просто отсутствует в Telegram Web Apps API на сегодня (либо я реально слепой)

Надеюсь, это сэкономит кому-то часы экспериментов)

→ Ссылка