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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions