Разработка приложения для Vkontakte
Мой сайт Четверг
08.12.2016
03:05
Приветствую Вас Гость | RSS Главная | Регистрация | Вход
Меню сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Форма входа

Главная » 2014 » Июнь » 25 » Разработка приложения для Vkontakte
21:13

Разработка приложения для Vkontakte





Всем доброго дня!
Недавно опубликовал своё приложение во Vkontakte.ru, которое было успешно принято в каталог образовательных приложений. Не хватает сообщений чтобы написать в блок, по этому решил поделиться опытом на форуме.
Приложение писал на php + mysqli + js для обращений к VK.API.

Идея приложения
Идеей приложения является повышение кулинарных навыков аудитории путем прохождения простых тестов с элементами юмора.

Приложение было задумано как вееральное, т.е. по прохождении каждого теста, пользователю предлагается похвастаться результатами прохождения друзьям.

Кстати, уже на этом шаге есть небольшие проблемы, связанные с ограничениями vkontakte (об этом напишу ниже).

Первые шаги разработчика приложений
Основные проблемы, которые возникли (и кстати говоря, как оказалось - не у одного меня) связаны с не точностью описания методов api. Данную проблему можно решить только перебором и тестовым отправлением запросов к серверу api.
Из опыта перебора скажу, что нужно в предоставляемом файле - обертке к api закомментировать строку:
PHP код:

$params['timestamp'] = time(); 

Как оказалось временную метку передавать в запросе не нужно.
Следующие подводные камни были вызваны тем, что ранее я не имел достаточного опыта работы с JS, по этому в статье их описывать не стоит...

Архитектурные решения
На начало разработки приложения у меня было смутное представление о работе с VK.API, и официальная документация не описывает всех необходимых подробностей взаимодействий.

Авторизация пользователей в приложении
При посещении пользователем приложения (первый вход, обновление страницы приложения) методом GET передаются авторизационные данные пользователя (viewer_id - идентификатор пользователя, по нему можно вычислить страницу профиля пользователя - http://vkontakte.ru/id{viewer_id}, auth_key - строка, при помощи которой осуществляется авторизация, она должна быть равна
PHP код:

md5($api_id."_".$viewer_id."_".$secret_key) 

где viewer_id нам уже известен, а api_id и secret_key - выдаются при регистрации приложения).
После того, как авторизация пользователя успешно произведена - можно запросить метод getProfiles и сохранить в базе приложения данные о пользователе (я сохраняю эти данные для вывода блока "Наши кулинары")

При последующих авторизациях пользователя так же запрашиваю getProfiles с целью обновления информации (у пользователя может измениться аватар, имя и прочие данные).

Организация тестирования
За тестирование отвечают 3 таблицы в базе (думаю не стоит останавливаться на них очень подробно):
1) Тесты. В таблице сохраняется информация о тестах, количестве вопросов в тесте и прочая вспомогательная информация;
2) Вопросы. В таблице хранятся вопросы и варианты ответов по всем тестам, сопоставляются с тестом по id теста.
3) Статусы. По факту прохождения теста в таблицу заносится id пользователя (внешний id - viewer_id), статус прохождения (начал проходить не не дошел до конца, прошел с ошибками, прошел без ошибок) - на основе этого статуса в конце теста выводится уведомление о прохождении теста (с ошибками или без), так же на основе статуса подбираются тесты для вывода пользователю (пройденные не выводятся), и есть идеи в будущем развивать приложение опять же на основе этих статусов (считать пользователю уровень, и в зависимости от уровня добавлять различные "плюшки").

Вееральная составляющая
Как и написано выше, по факту прохождения теста пользователю выводится предложение похвастаться результатом. По клику на кнопку вызывается метод friends.get - при помощи которого приложение получает список друзей пользователя (но не более 1000, но думаю этого более чем достаточно). Далее id первого друга + текст сообщения + attachments (фотография) передаются методу wall.post. Основная проблема этой схемы в vkontakte - запрос подтверждения при каждом размещении записи (т.е. нельзя разместить записи у всех друзей сразу, нужно спрашивать подтверждение по каждому другу, в этом и заключается основное отличие от api facebook). И из-за этого ограничения пришлось реализовывать генерацию json строк с следующим id друга, и асинхронно запрашивать их по факту размещения предыдущей записи.
Ещё считаю нужным заметить, что в вееральной составляющей был реализован механизм защиты от повторной отправки сообщения одному и тому же пользователю на стену. Т.е. при формирования json строки, id проверяется в соответствующей таблице, и если в течении последних 24 часов из приложения данному пользователю отправлялся пост на стену, то запрашивается следующий id, и так до момента, пока не найдется пользователь, которому пост ещё не отправлялся...

Вместо заключения
В настоящее время ведется работа над вторым релизом приложения. Буду рад комментариям, замечаниям, предложениям...
Линк на приложение: http://vkontakte.ru/app2660899
Просмотров: 111 | Добавил: active | Рейтинг: 0.0/0
Всего комментариев: 0
Поиск

Календарь
«  Июнь 2014  »
ПнВтСрЧтПтСбВс
      1
2345678
9101112131415
16171819202122
23242526272829
30

Архив записей

Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz


  • Copyright MyCorp © 2016 Конструктор сайтов - uCoz