VKCOM / vk-bridge

A package for integrating VK Mini Apps with official VK clients for iOS, Android and Web
MIT License
74 stars 32 forks source link

[Bug]: В миниаппе на нативном андроид-приложении VK не резолвится bridge.send('VKWebAppShare', ...) #583

Open dewolixgit opened 1 day ago

dewolixgit commented 1 day ago

Описание

В миниаппе на нативном андроид-приложении VK не резолвится bridge.send('VKWebAppShare', ...), то есть при успешном шеринге ссылки промис не удовлетворяется, а при отказе от шеринга промис не отклоняется, то есть просто зависает, и управление не передаётся далее идущему коду. В то же время на десктопе и мобильном вебе ошибки нет. На нативном приложении VK на IOS не проверял

Версия vk-bridge

2.15.3

Платформа

Android

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

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

Предусловие: миниапп открывается в нативном приложении VK на андроиде. Приложение версии 8.107.1 (25889), обновление от 1 декабря 2024 года

Сценарий с успешным шерингом:

  1. Вызвать bridge.send('VKWebAppShare', ...)
  2. В открывшейся модалке шеринга пошерить ссылку в какой-нибудь чат

Сценарий с отказом от шеринга:

  1. Вызвать bridge.send('VKWebAppShare', ...)
  2. Закрыть модалку шеринга

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

Сценарий с успешным шерингом: Управление передаётся в then-обработчик

Сценарий с отказом от шеринга: Управление передаётся в catch-обработчик

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

Сценарий с успешным шерингом: Управление не передаётся в then-обработчик

Сценарий с отказом от шеринга: Управление не передаётся в catch-обработчик

Скриншоты

Я подготовил тестовый миниапп, в котором разместил один экран и кнопку для шеринга. Результаты обработки вывожу в консоль. Код для обработки шеринга приложил ниже по тексту

На первом видео я пробую шерить ссылку на мобильном вебе: https://drive.google.com/file/d/1Dqak_VuxqxktzC25dAmOPvJJUKQIqTgD/view?usp=sharing . Можно увидеть, что и успешный шеринг, и отказ от шеринга приводят к логам в консоль, то есть промис резолвится

На втором видео я пробую шерить ссылку в нативном приложении VK: https://drive.google.com/file/d/1wRkgL0O31Ey_-sPuvOJMubITFAg0sPoZ/view?usp=sharing . Можно увидеть, что ни успешный шеринг, ни отказ от шеринга не приводят к логам в консоль, то есть промис не резолвится

Косвенно (я предполагаю) такую же проблему можно заметить и в приложении песочницы: https://vk.com/app6909581#VktXZWJBcHBTaGFyZUAlN0IlMjJsaW5rJTIyJTNBJTIyaHR0cHMlM0ElMkYlMkZ2ay5jb20lMkZ2a2FwcHNkZXYlMjIlN0Q То есть на десктопе запросы остаются в истории запросов: https://drive.google.com/file/d/1Odflh0a1YEO5KTqxHpjkzyye7Jr164GU/view?usp=sharing В то же время на нативном андроиде запросов в истории запросов нет: https://drive.google.com/file/d/1O7U2URVgIFYbFWZM41mvob-OEPPBa5Wc/view?usp=sharing

Приложение

https://vk.com/app52790536 (приложение отключено, поэтому видно только админам; если потребуется, добавлю в администраторы)

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

Код, обрабатывающий обращение к bridge:

import bridge from '@vkontakte/vk-bridge';
import { Button } from '@vkontakte/vkui';
import * as React from 'react';

const Onboarding: React.FC = () => {
  const onClick = () => {
    bridge
      .send('VKWebAppShare', {
        link: 'https://vk.com/',
      })
      .then((data) => {
        console.log('VKWebAppShare data', data);
      })
      .catch((error) => {
        console.log('VKWebAppShare error', error);
      })
      .finally(() => {
        console.log('VKWebAppShare finally');
      });
  };

  return (
    <div>
      <h1>vkbridge-share-test</h1>
      <Button onClick={onClick}>Кнопка</Button>
    </div>
  );
};

export default Onboarding;
pasha-nikitin-2003 commented 1 day ago

Спасибо за обращение, посмотрим и возьмем в работу!