Техническое задание: Интеграция запроса геолокации в Telegram Mini App
Контекст задачи
Существует мини-приложение (Mini App), работающее внутри Telegram. Необходимо реализовать корректную работу функционала запроса геопозиции пользователя в соответствии с официальной документацией Telegram.
Текущая проблема
Логика запроса геолокации работает некорректно:
- Желаемое поведение: При первом входе приложение запрашивает разрешение на доступ к геопозиции. После получения разрешения, при последующих входах координаты отправляются на бэкенд автоматически, без дополнительных запросов к пользователю.
- Фактическое поведение: Запрос разрешения появляется при каждом новом входе в приложение, что противоречит ожидаемой логике и документации.
- Дополнительная проблема: Отображается системное модальное окно браузера вместо нативного интерфейса Telegram для запроса разрешений.
Технические детали
- Стек: Next.js версии 13.4.8
- Используемый SDK: @тг-apps/sdk версии ^3.5.3
- Хук управления геопозицией реализован на уровне провайдера приложения
- Приложение должно работать как внутри Telegram Mini Apps, так и в веб-версии
- Проблема воспроизводится на обеих платформах: iOS и Android
Что уже было предпринято
- Реализация логики монтирования компонента по документации Telegram
- Многократный пересмотр и переписывание обращений к LocationManager
Требования к решению
- Исправить поведение запроса геолокации в соответствии с документацией Telegram Mini Apps
- Обеспечить одноразовый запрос разрешения с последующим автоматическим получением координат
- Настроить корректное отображение нативного интерфейса Telegram для запроса разрешений
- Сохранить работоспособность функционала в веб-версии приложения
- Выявить и устранить причины некорректной работы LocationManager
Ожидаемый результат
Пользователь при первом входе видит нативный интерфейс Telegram с запросом: "[App] requests access to your location". После предоставления разрешения, при последующих входах приложение автоматически получает актуальные координаты и отправляет их на бэкенд, не запрашивая повторного подтверждения.