Проблема с VK Bridge: VKWebAppStorageSet и VKWebAppStorageGet
У меня возникла сложность с функциями VK Bridge, а именно с VKWebAppStorageSet и VKWebAppStorageGet. Я пытаюсь сохранить и затем получить значение переменной, но получаю ошибку.
Вот мой код для сохранения значения при нажатии на кнопку:
function go() {
bridge.send('VKWebAppStorageSet', {
key: 'test',
value: 'yes'
})
.then((data) => {
if (data.result) {
// Значение переменной задано
}
})
.catch((error) => {
// Ошибка
console.log(error);
});
}После нажатия кажется, что переменная записывается. Однако, когда я пытаюсь её получить и записать в состояние React:
const [test, setTest] = useState('');
async function zapis() {
bridge.send('VKWebAppStorageGet', {
keys: ['test']
})
.then((data) => {
if (data.keys) {
setTest(data.value);
}
})
.catch((error) => {
// Ошибка
console.log(error);
});
}Я получаю ошибку User Denied. В чем проблема?
Основные замечания
- Неправильный доступ к данным: В ответе на
VKWebAppStorageGetданные находятся в свойствеdata.keys(массив объектов), а неdata.value. Вам нужно перебрать массив или обратиться к первому элементу. - Проверка разрешений: Ошибка
User Deniedможет возникать, если пользователь не предоставил приложению доступ к хранилищу. Убедитесь, что у вас есть необходимые права в настройках приложения VK. - Вызов в правильном контексте: Функция
zapisдолжна вызываться после успешной установки значения, иначе запись могла не завершиться.
Пример исправленного кода
const [test, setTest] = useState('');
async function zapis() {
try {
const data = await bridge.send('VKWebAppStorageGet', {
keys: ['test']
});
if (data.keys && data.keys.length > 0) {
setTest(data.keys[0].value); // Обращаемся к первому ключу
}
} catch (error) {
console.log('Ошибка получения данных:', error);
}
}Также проверьте, что вы вызываете zapis после успешного завершения go, например, в цепочке промисов.