Если mini app не работает на iPhone, а на Android или компьютере открывается нормально, причина обычно не в боте целиком, а в особенностях iOS WebView, Safari и клиентского JavaScript.

Сначала нужно понять, где именно ломается сценарий: mini app не открывается, открывается белым экраном, не проходит авторизацию, не отправляет данные в бот или падает на конкретном действии.

Коротко: что сделать

  • Проверить открытие mini app на iPhone в актуальном Telegram
  • Открыть тот же URL в Safari и сравнить поведение
  • Проверить HTTPS, mixed content и ошибки JavaScript
  • Проверить initData и проверку hash на backend
  • Проверить viewport, safe-area и touch-события

Основные причины

У проблемы может быть несколько уровней: интерфейс, backend, права, внешняя интеграция, кэш, очередь задач или настройки сервера. Поэтому лучше не гадать, а пройти цепочку от действия пользователя до записи в логах и базе.

  • Используется API браузера, который ограничен в iOS WebView
  • Часть ресурсов грузится по HTTP внутри HTTPS-страницы
  • Код зависит от hover, desktop viewport или нестабильной высоты экрана
  • localStorage или cookie используются без учета iOS-ограничений
  • Ошибка авторизации скрыта за общим белым экраном

Пошаговая диагностика

Диагностику удобнее вести на одном воспроизводимом примере: один пользователь, один заказ, один запрос, один файл или одно событие. Так проще отделить реальную причину от случайных совпадений.

  • Подключить Safari Web Inspector к iPhone и посмотреть console
  • Проверить Network на 4xx, 5xx и заблокированные ресурсы
  • Сравнить initData на iPhone и Android
  • Проверить, не перекрывает ли интерфейс системная safe-area
  • Запустить минимальную страницу WebApp без тяжелых библиотек

Как исправить проблему

Исправление должно закрывать первопричину. Если затронуты платежи, доступы, персональные данные, уведомления или рабочие заказы, сначала проверьте решение на тестовом сценарии и сохраните возможность отката.

  • Убрать mixed content и привести все ресурсы к HTTPS
  • Исправить JS-ошибки, которые проявляются только в Safari/WebKit
  • Добавить корректную работу с safe-area и высотой viewport
  • Перенести критичную авторизацию на backend
  • Добавить fallback-сообщение вместо белого экрана

Безопасный план решения

Проверяйте правку на реальном iPhone, а не только в эмуляторе. Для mini app важно тестировать Telegram WebView, Safari и несколько версий iOS, потому что поведение может отличаться.

Чего не стоит делать

  • Не отключать проверку initData ради быстрого запуска
  • Не хранить bot token или секреты в frontend
  • Не считать Android-тест достаточным для iPhone
  • Не оставлять белый экран без диагностического сообщения

Что подготовить перед исправлением

  • Ссылка на mini app
  • Модель iPhone и версия iOS
  • Скрин или запись проблемы
  • Ошибки из console и Network
  • Описание сценария, который не работает

FAQ

Почему mini app работает в Safari, но не в Telegram?

Telegram открывает страницу внутри WebView, где могут отличаться доступные API, размер viewport, cookie и обработка внешних ссылок.

Можно ли отлаживать Telegram WebApp на iPhone?

Да, через Safari Web Inspector при подключенном устройстве. Это самый быстрый способ увидеть реальные JS-ошибки.

Нужно ли делать отдельную версию для iPhone?

Обычно нет. Чаще достаточно исправить WebKit-совместимость, viewport, safe-area и авторизацию.

Когда стоит обратиться за помощью

Обращаться стоит, если mini app уже принимает заявки, оплаты, записи или личные данные и нельзя оставлять iPhone-пользователей без рабочего сценария.

Итог

Начните с реального iPhone, Safari Web Inspector, HTTPS и initData. Если нужно аккуратно починить Telegram mini app под iPhone, можно написать в Telegram @rabotator_support.