Skip to content

[Bug]: VKWebAppGetAuthToken возвращает clientError при разблокировке экрана смартфона, если запрос находится в обработчике VKWebAppViewRestore #605

@yareyareslav

Description

@yareyareslav

Описание

VKWebAppGetAuthToken возвращает clientError при разблокировке экрана смартфона, если запрос находится в обработчике VKWebAppViewRestore

Версия vk-bridge

2.15.9

Платформа

Android, IOS

Браузер и версия

No response

Шаги воспроизведения

  1. Сделать useEffect с пустыми зависимостями, в коллбэке которого подписаться на VKWebAppViewRestore с помощью bridge.subscribe
  2. Внутри обработчика VKWebAppViewRestore передать запрос VKWebAppGetAuthToken bridgeGetAuthToken (в моем приложении баг воспроизводится со scope: "groups")
export async function bridgeGetAuthToken(scope: string) {
    try {
        const params = new URLSearchParams(window.location.search);

        const app_id = Number(getVKAppId({ params }));
        const response = bridge.send("VKWebAppGetAuthToken", {
            app_id: app_id,
            scope: scope,
        });
        const token = await response;

        return token;
    } catch (error) {
        console.error(error);
        return {
            access_token: "",
            scope: scope,
        };
    }
}
  1. Запустить приложение в VKMiniApps на смартфоне (iOS, Android), дождаться появления содержимого приложения
  2. Заблокировать экран устройства
  3. Разблокировать экран устройства (пункты 4-5 может потребоваться повторить 2-3 раза, но чаще всего воспроизводится и с первого)

Ожидаемое поведение

Возвращение валидного токена для указанного скоупа

Фактическое поведение

Возвращает ошибку client_error с кодом 13 (custom error).

Скриншоты

No response

Приложение

https://vk.com/app52196272

Код, который вызвал ошибку

useEffect(() => {
    async function requestAuthToken() {
      try {
        const params = new URLSearchParams(window.location.search);

        const app_id = Number(params.get("vk_app_id"));
        const response = bridge.send("VKWebAppGetAuthToken", {
          app_id: app_id,
          scope: "groups",
        });
        const token = await response;

        return token;
      } catch (error) {
        console.error(error);
        return {
          access_token: "",
          scope: "groups",
        };
      }
    }

    bridge.subscribe((e) => {
      if (e.detail.type === "VKWebAppViewRestore") {
        requestAuthToken();
      }
    });
}, []);

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions