|
Using
Инструкции по использованию библиотеки.
Featured Для использования скрипта, необходимо скачать его, разместить на своем сайте в любом каталоге, а затем, непосредственно в приложении, добавить его к странице: <!-- В данном случае, скрипт расположен в каталоге
с соответствующим HTML-файлом -->
<script src="vk_api.js" type="text/javascript"></script>Далее нужно создать объект, с которым и будет проходить вся дальнейшая работа: //Создаем объект от vk_api(). Вся дальнейшая работа должна проходить
//только с объектом api.
var api = new vk_api(
//Это Секрет, он указан на странице редактирования приложения
'hGtsH5G0',
//Эта функция будет вызвана, если инициализация API пройдет успешно.
//Хорошее место для установки всех callback-функций через
//addCallback()
function() {
//Вызываем окно изменения настроек с отмеченными настройками для
//доступа к друзьям и к стене. Пользователь не сможет закрыть
//вызванное окно, пока не установит требуемые настройки.
api.makeSettings(api.SETT_FRIENDS | api.SETT_WALL);
//Добавляем функцию, которая запустится, если пользователь добавит
//приложение к себе на страницу.
api.addCallback(
'onApplicationAdded',
function() {
//действия
}
);
},
//Эта функция вызывается, если инициализация API не состоялась.
//В этом случае, невозможно использовать внешние (external) вызовы.
function() {
//сообщение об ошибке
}
); Ну и самое интересное, то, ради чего и писался этот скрипт — вызовы методов API: //Вызываем метод API через функцию call()
api.call(
//Название метода API.
//Допустим, получение расширенной информации о профилях.
'getProfiles',
//Это объект с параметрами метода API. Если параметров нет,
//то этот аргумент можно не указывать.
{
uids: '4124584,2327412,1237975',
//Можно указывать массивы, которые будут автоматически
//преобразованы в строки.
fields: [
'first_name', 'last_name', 'nickname',
'bdate', 'city' , 'country', 'photo'
]
},
//Эта функция будет вызвана, когда будет получен ответ от сервера.
//data - это готовый к использованию объект, созданный из строки
//JSON, полученной от сервера.
function(data) {
//Действия с объектом data
}
);Ниже приведен пример использования внешних функций через external.: <a href="#" onclick="api.external.showSettingsBox(api.SETT_FRIENDS | api.SETT_WALL);">
Изменить настройки
</a>А через params можно получить доступ к параметрам, переданным приложению при запуске: //Выводим в контейнер с id="text" все параметры, переданные
//приложению при запуске.
for (var key in api.params) {
document.getElementById('text').innerHTML +=
'api.params.' + key + ' = ' + api.params[key] + '<br />';
}Кстати, при инициализации объекта, необходимо указывать api_secret. Было бы нехорошо оставлять его в коде в открытом виде, даже если вы обфусцируете код. Оптимальный вариант — простенькое кодирование, хотя бы для того, чтобы в исходном коде секрет не встречался. Так вот, такое кодирование уже реализовано! Конструктору vk_api() в качестве первого параметра можно передавать специальным образом закодированный Секрет. В этом случае, секрет будет автоматически раскодирован. Закодировать секрет вы можете, используя специальный сервис, размещенный по адресу: http://xinit.ru/vk_app_secret/. Ниже приведен пример использования закодированного секрета при создании объекта. var api = new vk_api(
//Так выглядит закодированный секрет. Можно передавать
//как кодированные, так и некодированные строки.
'sx--73l40l85l84l41l22l40l17l',
//Выполнить после успешной инициализации.
function() {}
);
|
//Эта функция будет вызвана, если инициализация API пройдет успешно. НЕТ
на практике, эта функция будет вызвана всегда. почему? даже при указании левого секретного кода и запуска и-фрейма не из вконтакта.
>на практике, эта функция будет вызвана всегда. почему? >даже при указании левого секретного кода и запуска >и-фрейма не из вконтакта. Потому что под инициализацией понимается совсем другое. На данном этапе секретный ключ не проверяется, а откуда запущен ифрейм - по барабану. Если VK успешно загрузился и готов к работе (а это бывает в подавляющем большинстве случаев), то функция будет вызвана.
Кстати, я бы таки настоятельно рекомендовал использовать VK.api(), по синтаксису абсолютно аналогичный api.call().
при использовании данной библиотеки возвращается ошибка: MD5 is not defined
с MD5 я разобрался, моя ошибка. а вот test_mode = true; не работает и апи возвращает ошибку: Application is disabled. Enable your application or use test mode
Что-то в примере не описано. Можно ли как-то получить параметры переданные в url при запуске приложения? (типа vkontakte.ru/app123456?parms=someparms или vkontakte.ru/app123456#parms). А параметры, переданные vkontakte.ru/app123456 в post запросе?
mifrith, В чем была проблема? У меня такая же ...
Ну собственно, включите приложение.
and7ey, можно получить параметры после #, и параметры GET-запроса типа flashvars.
И еще раз. Для новых приложений используйте VK.api(). Старые старайтесь постепенно тоже переводить - синтаксис одинаковый, это будет не сложно.
описываю проблему в работе с этой либой под САФАРИ и как ее решить. Проблема: сафари не дает ставить вконтакту куки в ифрейм пока пользователь не проинтерактивит с ифреймом как то сам. в результате api_url и тому подобное, если в ифрейме грузить разные страницы, тупо теряются из this_proxy.params - document.location.href их уже не содержит, а в куках они не сохранены. т.е. после первой навигации по любой внутренней ссылке внутри приложения работа с вконтактом заканчивается ничем (ничего не рабоает, потому что this_proxy.params не содержит ничего)
Решение: 1) на строке 372 VK.loadParams(document.location.href); заменяем на VK.loadParams(url?url:document.location.href); 2) дописываем метод в либу: // Function used to fix parameters because safary/opera loose cookies some times (security issues) this.fixParams = function (originalUrl){ if(originalUrl && !this_proxy.params.api_url){
} }3) vk_api.call(...) приходится вызывать так: function plat_callVkApi(a,b,c) {
}где $.Storage - jQueryевский плагин для кеширования данных на клиенте (кешируем урл со всеми данными - самый первый - и потом подсовываем его либо чтобы this_proxy.params из него проинициализировался)