VKCOM / vk-mini-apps-router

MIT License
26 stars 4 forks source link

Нет возможности определить верный url приложения. #308

Open ghost opened 8 months ago

ghost commented 8 months ago

Внимание: Создаю ишу первый раз в жизни, спасибо за внимание.

Суть проблемы: Собираю SSR приложение на React + Express. На локальном хосте и используя ссылку vk-tunnel, получаю желаемый результат, а именно в Request приходят верные параметры относящиеся к url, соответственно при обновлении страницы приложения с открытым адресом "/page/1", пользователь получит соответствующую отрендеренную на сервере html. Но, открыв приложение через vk.com, в запрос поступают данные запуска формата:

vk_access_token_settings: х
vk_app_id: 00000
vk_are_notifications_enabled: 0
vk_experiment: 000000
vk_is_app_user: 1
vk_is_favorite: 0
vk_language: ru
vk_platform: mobile_web
vk_ref: other
vk_ts: 00000
vk_user_id: 00000
sign: 0000000

! без намека на url !

Комментарий: Да, в документации (https://vkcom.github.io/VKUI/#/Adaptivity) в разделе "Адаптивность через JS" описано решение для ssr через маунт, но я не особо тогда понимаю смысл SSR для рендеринга обертки до App Также для получения действительно SSR вижу костыль в виде отправки пустого html со скриптом, который получит window.location, отправит его на мой сервер, а сервер отдаст рендер html нужной страницы.

Не исключаю вариант, что я просто что-то не понял, буду рад обратной связи от команды и опытных разработчиков.

Желаемый результат: ВК отправляет данные запуска с информацией об открытом у пользователя url. Поведение vk-tunnel соответствует поведению vk.com

Описал ситуацию как смог, готов ответить на вопросы и прикрепить дополнительную информацию при необходимости.

ghost commented 8 months ago

Я так пониамю, что параметры запуска отдаются этим кодом: packages/core/src/parseURLSearchParamsForGetLaunchParams.ts

Может имеет смысл добавить туда обработку window.location?

nshvyryaev commented 8 months ago

Здравствуйте!

Сейчас путь передается в приложение через hash часть URL. Эта информация не оправляется на бэкенд, поэтому при работе на vk.com не попадает в SSR. Мы рассмотрим с командой альтернативные возможности и дадим вам знать.

Предложенное Вами решение с отправкой скрипта и последующим запросом страницы, отрендеренной на бэкенде должно сработать, однако сходу не понятно, какую проблему оно решает. Если так приложение будет отрисовываться быстрее - оно полезно, если скорость не отличается значительно, можно делать рендеринг на клиентской стороне, в любом случае первый запрос не возвращает готовый HTML.

ghost commented 8 months ago

Добрый день! В данном случае вопрос возник при разработке приложения в котором пользователи потенциально захотят поделиться определенной страницей в приложении, соответственно SSR должен понимать, какую именно страницу отрисовать.

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

Было бы здорово получать роут напрямую от ВК. Буду рад, если мое предложение найдет место и будет полезно Мини Апсам.