Страницы

Поиск по вопросам

вторник, 16 июля 2019 г.

vk.api не работает проверка на репост

В разделе своего сайта я подключаю vk api.

Далее я создал функцию vk_share для обработки проверки на репост.
function vk_share() { VK.init({ apiId: my_id }); console.log(VK.Api); VK.Observer.subscribe("widgets.like.shared", function f(){ alert("Thank you for your shared."); }); }
И по клику я вызываю функцию:

Репост генерируется нормально, но алерт после совершения пользователем репоста не происходит. Подскажите как правильно проверять на репост вк. UPD1 по совету Александра попытался добавить виджет
VK.Widgets.Like("vk_like", {type: "button"});
Получаю следующую ошибку:
VK.Widgets: object #vk_like not found.
Также добавил onlyWidget true. Код функции проверки репоста сейчас вот такой
function vk_share() { VK.init({ apiId: 5216642, onlyWidgets: true }); VK.Widgets.Like("vk_like", {type: "button"}); console.log(VK.Api); VK.Observer.subscribe("widgets.like.shared", function f(){ alert("Thank you for your shared."); }); }


Ответ

Вариант – предлагать сделать wall.post() через API, и получать id созданного поста в ответ. Работающий пример
Подключаете OpenApi, делаете кнопку и примерно такой скрипт:
VK.init({ apiId: XXXXXX }); // id вашего приложения ВК, где в настройках прописан ваш домен document.getElementById('btn-podel').addEventListener('click', hClick); // ждём нажатий на кнопку
function hClick() { // обработчик нажатия VK.Api.call('wall.post', {message:"test"}, hPost); }
function hPost(r) { // обработчик окончания выполнения API запроса if(!r) throw "Bad response from VK"; if( r.error) { // если отказался постить console.log("Not posted. Error:", r.error); } else if( r.response) { if( r.response.post_id) { // это id свежесозданного поста console.log("Posted with id ", r.response.post_id); } else { console.log("No post id, no idea why", r); } } else { console.log("Not posted, no idea why", r); } }
Недостаток этого способа в том, что пост делается только на стену пользователя. Нет выбора, как у виджета, куда отправить: себе на стену, в сообщество, личным сообщением.
Преимущество – в том, что вы получаете id поста, и, сохранив его у себя, можете через какое-то время проверять, висит ли он ещё, и с тем ли содержанием. Я как-то реализовывал механику, где юзер делал репост, который должен провисеть, как минимум, сутки – только после этого юзер мог получить «награду» – скачать какой-то файл.

Комментариев нет:

Отправить комментарий