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

(Ответов: 3, Просмотров: 5055)
  1. Новичок
    • Регистрация: 02.11.2011
    • Сообщений: 6
    • Репутация: 2
    Всем доброго дня!
    Недавно опубликовал своё приложение во 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
    • 3

    Спасибо сказали:

    Jeremen(07.01.2012), quadrat(07.01.2012), Демиург(06.01.2012),
  2. Дипломник
    • Регистрация: 02.08.2011
    • Сообщений: 126
    • Репутация: 4
    У меня тоже есть как мне кажется хорошая тема для создание приложения.
    Вот только не умею программировать... Когда пробовал создать приложения через adobe flash, но ничего не получилось и за большого количества ошибок.
    • 0
  3. Квадрат, такой кубический Аватар для quadrat
    • Регистрация: 19.09.2011
    • Сообщений: 427
    • Репутация: 74
    • Webmoney BL: ?
    Не плохо вышло:) я только сайты на флеше делал, вполне забавно выходило, но было это давноооо))
    • 0
  4. Студент Аватар для WinnyPooh
    • Регистрация: 06.11.2011
    • Сообщений: 74
    • Репутация: 13
    Не плохо сделано. Очень интересно реализована отправка сообщений друзьям о своем результате
    • 0

Похожие темы

Темы Раздел Ответов Последний пост
Вконтакте | Рассылка приглашений в группу, на встречу , Приложения
Социальные сети 21 10.11.2011 02:43
Приложения для Iphone и Ipad, Ipod для Вебмастеров
Софт, скрипты, лицензии 0 09.07.2011 01:36
Вконтакте | Рассылка приглашений в группу, на встречу , Приложения
Услуги по SMM, SMO 18 25.01.2011 16:27
Вконтакте | Рассылка приглашений в группу,Встречу,Приложения
Прочее 1 04.01.2011 21:26

Интересные темы

вывод данных с таблицы wordpress

Не знаешь как сделать вывод данных из нужных полей с таблицы для wordpress, читай здесь.

как добавить в друзья в контакте

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

как сделать ссылку на человека в статусе в контакте

Вся необходимая информация о том, как сделать ссылку на человека в статусе в контакте, читай далее.

У кого попросить инвайт?

Вы можете попросить инвайт у любого модератора:

Информеры