Виджет ВКонтакте «Мне нравится» кэширует параметры

Думаю, все знают что делает виджет «Мне нравится». Для числа несведущих поясню – виджет добавляет на HTML страницу одноименную кнопку, при нажатии на которую увеличивается счетчик. Пользователь также может рассказать о странице на своей стене ВКонтакте. Многие используют этот виджет, но нет ни одного упоминания в свободном интернете о серьезном подводном валуне. Дело в том, что после первого использования, параметры виджета навсегда кэшируются на серверах ВКонтакте и нет возможности их поменять не сбрасывая счетчика.

Чтобы продемонстрировать проблему, возьмем стандартный скрипт для виджета с официальной страницы для разработчиков ВКонтакте:

<!-- Put this script tag to the <head> of your page -->
<script type="text/javascript" src="http://vk.com/js/api/openapi.js?64"></script>

<script type="text/javascript">
  VK.init({apiId: YOUR_APP_ID, onlyWidgets: true});
</script>

<!-- Put this div tag to the place, where the Like block will be -->
<div id="vk_like"></div>
<script type="text/javascript">
VK.Widgets.Like("vk_like", {type: "full", pageTitle: "TEST_TITLE", pageDescription: "TEST_DESC"});
</script>


Нужно вставить этот код в страницу, которая будет в домене приложения ВК. Например, для приложения выбран базовый домен example.com, тогда страницу нужно разместить в этом домене или одном из его поддоменов: example.com/vktest.html, local.example.com/vktest.html, и пр.

После нажатия на кнопку, авторизации и нажатия на «Рассказать друзьям», на вашей стене ВКонтакте появится соотвествующая запись. Теперь вернемся на нашу страницу и снова нажмем на «Мне нравится» – счетчик обнулится, запись со стены пропадет. Проблема решена? Можно проверить, меняем параметры виджета на другие.

VK.Widgets.Like("vk_like", {type: "full", pageTitle: "REAL_TITLE", pageDescription: "REAL_DESC"});


Обновляем страницу, снова жмем на «Мне нравится» и «Рассказать друзьям». Во всех моих тестах я видел старые TEST_TITLE и TEST_DESC.

Этот пример, конечно, не слишком точен. Возможно, достаточно подождать какое-то время и кэш для виджета с нулем использований сбросится сам. Однако это отличная демонстрация проблемы. Если вы настроили виджет с тестовыми данными и счетчик больше нуля, вы уже не сможете поменять параметры виджета. К параметрам виджета относятся заголовок, описание, изображение.

Единственный способ обновить эти параметры – сбросить счетчик. Об этом мне сообщили в тех. поддержке ВК:



Сбросить счетчик можно либо указав третьим параметром page_id, или поменяв URL страницы. Очевидно, это не подходит для страницы, где уже больше 500 «лайков».

Я разрабатывал интеграцию для нескольких социальных сетей. Должен сказать, с подобной неприятностью сталкиваюсь впервые. Да уже и не помню когда в последний раз видел что нельзя сбросить кэш в системе. Более того, об этой особенности в документации ВКонтакте не сказано ни слова.

Разработчикам интеграций совет – тестируйте виджет на фальшивых URL, например example.com/fake.html. Или же меняйте page_id перед релизом страницы.

Документация к виджету на сайте разработчиков ВКонтакте.
Share post
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 23

    +1
    Спасибо за предупреждение, почему то, никогда раньше не обращал на это внимание.
      +5
      Вконтакте API — вещица вещица странная. С одной стороны вроде бы и все хорошо: обилие методов, мультиязычная документация, простота применения. Но если капнуть поглубже, то все оказывается совсем наоборот. Очень многие нужные методы либо не созданы, либо работают не так, как хотелось бы. Документация убога чуть более, чем полностью, а англоязычную версию так вообще не обновляют годами. Миф о простоте применения и интеграции развеивается уже после часа плотной работы с API. Буквально недавно вконтакт порадовал меня очередным «сюрпризом». Обновился payments API и мне пришлось обновлять под него две игры, которые я на от момент поддерживал. И вот какая штука, сервера игр у меня висят на 80** порту, а новый API требует наличие callback-скрипта ТОЛЬКО на 80 порту. Спрашивается, нахрена? В результате пришлось подымать на продакшн серверах дополнительно 80-й порт только ради одного паршивого метода API вконтакте. Делайте выводы.
        +6
        — С одной стороны вроде бы и все хорошо
        Нифига там не хорошо, API кошмарный. Вот что им стоило бы перенять у фейсбука — так это апи. Я без матов об этом говорить не могу: документация плохая, юзкейсы не приведены (нужно угадывать). SSL вообще только недавно ввели. Возможности ограничены, везде приходится костыли нагромождать. Они вроде что-то меняют (например, сделали оффлайн-доступ), но пережитки ужасного прошлого сохранились.
          +2
          Аналогично, 8 часов мата, чтобы узнать, что ошибка в документации, которой уже год.
          Предложил сделать нормальную Wiki по API в теме во вконтакте «Замеченные ошибки в API или документации» и разместил на ru.wikipedia.org в обсуждения положил предложение для начала, думал другие поддержат — фиг там, все поудаляли, так понимаю, что подобное отношение к другим разработчикам дает почувствать такими себе крутыми гуру, знающими особенности вконтакта.

          Вот текст с вики на всякий случай (тоже бан получил, поскольку поддержка вк его удаляла, а я добавлял, не удивительно, что в гугл выдает так мало информации по вк API со сторонних сайтов):

          == Особенности VK API ==

          API имеет ряд проблем:
          * Кроме того предложения в[http://Xvk.com/topic-1_21972169?offset=2840 группе] с ссылкой на данный текст удаляются, поскольку решение пробем с VK API считается «оффтопом». Удаляют также эту запись, что очень прискорбно.

          1. Документация не соответствует действительности.
          Например, в [http://Xvk.com/developers.php?oid=-1&p=%D0%A0%D0%B0%D1%81%D1%88%D0%B8%D1%80%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D1%8B_API Расширенные методы API] определено:

          '''Доступ к этим методам ограничен и предоставляется только для Desktop/Mobile-приложений''',
          однако для метода [http://Xvk.com/developers.php?oid=-1&p=wall.post wall.post]' ''– добавляет запись на стену'', написана противоречивая информация:

          '''Данный метод доступен также Flash и IFrame приложениям, использующим функцию VK.api в Javascript API''', в результате для публикации на стену необходимо вызывать '''Устаревшие методы''', поскольку верен 1й вариант.

          Таким образом, получаетя «принцип нумерации вагонов с конца поезда», который является подводной скалой, коих к сожалению в документации множество.

          Техническая поддержка также далека от совершенства и ведется в основном в неудобном формате ленты VK [http://Xvk.com/topic-1_21972169?offset=1720 80 страниц «технической документации»], видимо про Wiki, Github, даже Redmine никто никогда ничего не слышал, а пиком совершенства VK считаются форумы (аля [http://www.flasher.ru/forum/blog.php?b=333 flasher.ru])

          2. Код

          Есть негативные отзывы, по-типу: ''вы еще код сервера не видели''

          3. Архитетура

          Поскольку п.1, архитектура далека от совершенства.

          Решением может служить полноценный раздел VK API на ru.wikipedia.org с актуальной информацией, что приведет повышению уровня знаний программистов VK, а соответственно и сети в целом.
            0
            Забавно, те же мысли возникали. А серьезно, давайте wiki поднимем с документацией по ВК? Можно на моем сервере.
              –1
              А смысл? В официальной группе ВКонтакте для разработчкиков приложений есть обсуждения с поиском. Ищите, спрашивайте.
                +2
                Чтобы не искать и не спрашивать, а спокойно делать RTFM актуальной информации. Кому удобнее искать и спрашивать, кому изучать без лишних движений.
                  –1
                  Вы смеетесь? Вы видели те обсуждения?
                    0
                    Видел и информацию о проблеме с кэшем нашел изначально там.
                  0
                  Интересная, кстати, идея. Причем особо много времени не займет — только движок поставить. Проблема в том, что нужно эту хрень как-то в массы пропихнуть, а это сложно.
                    0
                    Кому надо, тот наткнется на такой проект. Делаем?
                      +2
                      В момент «работы с вк API» я готов был заплатить за нормальную документацию, учесть масштабы трагедии, проект можно не только монетизировать, а смело объявлять стартапом и подключать инвесторов.
                        0
                        Давайте тогда где-нибудь конфу устроим и решим что дальше делать.
                        Мои контакты есть в профиле, если что.
                    0
                    Меня вообще заморозили на сутки, решив что я рассылаю спам в группы с помощью Open API методом photos.save:)
                +3
                Фейсбук тоже кеширует, кстати, но у них в документации хотя бы написано, как сбросить кеш.
                0
                Совсем недавно столкнулся с этим.
                Кстати к виджету комментариев это тоже относится.
                  0
                  Только сегодня общался по этой проблеме
                  Увы, единственный выход — обновление кэша виджета с помощью page_id и, как следствие, утрата значения счетчика
                    +1
                    fb тоже кеширует лайки на 24 часа, ключем вероятно является адрес страницы, т.к изменение адреса (например добавлением get параметра) решает проблему.
                    0
                    Нашел неплохой метод для ручного ввода ссылки на ВКонтакте — достаточно добавить что-то вроде «?vk» к ссылке.
                      0
                      Обновил page_id
                      Лайки пропали, названия остались…
                        0
                        Тоже самое… Уже часа два бьюсь, сбросить кэш удалось только добавлением гет-параметра к ссылке в og:url. Так что документация обманывает и тут…

                      Only users with full accounts can post comments. Log in, please.