Задать вопрос
san27sin
@san27sin
web-developer

Как определить, что фронтенд-приложение открыто внутри Telegram Mini App?

Я разрабатываю фронтенд-приложение с платежной формой, которое открывается из Telegram-бота как Telegram Mini App. Бот просто по кнопке открывает ссылку на наш фронт.

Задача — понять на стороне фронтенда, что приложение запущено именно внутри Telegram Mini App, чтобы активировать определённую часть кода (это нужно для корректной работы платежной формы, особенно на iOS).

Я изучил документацию и множество обсуждений, и почти везде советуют проверять initData. Однако в моём случае это значение всегда пустая строка, поэтому я не могу использовать его для определения среды.

Я использую библиотеки:
1) https://telegram.org/js/telegram-web-app.js
2) vue-tg

Проблема в том, что все свойства возвращают одинаковые значения, независимо от того открыт ли фронтенд в обычном браузере или внутри Telegram Mini App.

Пример:
window.Telegram.WebApp.initData
window.Telegram.WebApp.initDataUnsafe
window.Telegram.WebApp.platform

Во всех случаях значения одинаковые или пустые.

Как корректно определить на фронтенде, что приложение запущено именно внутри Telegram Mini App, а не в обычном браузере?
  • Вопрос задан
  • 128 просмотров
Подписаться 1 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Профессия Интернет-маркетолог + ИИ
    12 месяцев
    Далее
  • Яндекс Практикум
    SMM-продвижение в Телеграме
    1 месяц
    Далее
  • GB (GeekBrains)
    Интернет-маркетолог
    12 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
opium
@opium
Просто люблю качественно работать
initData пустой потому, что бот открывает ссылку через обычную кнопку с типом url, а не web_app. Переключи на web_app (или MenuButtonWebApp, или deep link с startapp) — тогда и initData, и platform начнут приходить корректно. Для детекта среды без initData проверяй launch-параметры в location.hash — при запуске как Mini App туда попадают tgWebAppVersion и tgWebAppPlatform.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы