![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jun 2012
Адрес: Татарстан
Сообщений: 118
|
APIConnection не срабатывают события об отработке запроса или ошибки.
То есть я отрабатываю запрос VK.api('users.get', { user_ids:1, fields:'city,sex' }, onProfileLoaded, onError); в котором я хочу узнать фио и пол, но никакого события не происходит. Помогите пожалуйста разобраться. package vk { import flash.display.*; import flash.events.*; import vk.APIConnection; import vk.events.*; import vk.ui.VKButton; import vk.events.CustomEvent; public class VkAPI { // получаем flashVars //public static var flashVars:Object; //public static var VK:APIConnection; public static var api_id:Number; public static var viewer_id:Number; public static var sid:String; public static var secret:String; //private private static var idUserVk:*; private static var idUserVk2:*; public function VkAPI() { } //Узнаём ИД пользователя, ФИО, секретный код, ИД сессии. public static function vkId(param1:String) { var flashVars:Object = Index.stage.loaderInfo.parameters as Object; // присваиваем переменным значения из flashVars ЭТИ МЕТОДЫ ОТРАБАТЫВАЮТ api_id = flashVars['api_id']; viewer_id = flashVars['viewer_id']; sid = flashVars['sid']; secret = flashVars['secret']; var VK:APIConnection = new APIConnection(flashVars); VK.api('users.get', { user_ids:1, fields:'city,sex' }, onProfileLoaded, onError);// запрос отправляется но в ответ ничего не приходит return idUserVk2; } private static function onProfileLoaded(data:Object) { idUserVk2 = data[0]['uid']; } private static function onError(data:Object):void { idUserVk2 = data.first_name; //trace(data.error_msg); } } } |
|
|||||
|
[+4 06.05.14]
|
Цитата:
Добавлено через 2 часа 3 минуты package outcomebet.controllers { import com.in4core.utils.logger.I4Logger; import flash.display.DisplayObjectContainer; import outcomebet.events.PlayerModelEvents; import outcomebet.models.BaseModel; import outcomebet.views.BaseView; /** * ... * @author in4core progression lab */ public final class BaseController extends Object { private var _host:DisplayObjectContainer = null; private var _baseModel:BaseModel = new BaseModel(); private var _baseView:BaseView = new BaseView(); private var _vkWrapper:VKWrapper = new VKWrapper(); public function BaseController(host:DisplayObjectContainer) { _host = host; } public function init():void { _vkWrapper.createAPI(); _vkWrapper.vkconnection.api("friends.get", _vkWrapper.getStandardFields(), onUsersInitialize, onVKCallBackError); } private function onVKCallBackError(o:Object):void { trace("4:VK api call back error"); } private function onUsersInitialize(o:Object):void { _baseModel.friendsModel.fillFriends( o as Array ); _baseModel.friendsModel.addEventListener(PlayerModelEvents.ALL_FRIENDS_PHOTOS_LOADED , onAllFriendsPhotosLoaded); } private function onAllFriendsPhotosLoaded(e:PlayerModelEvents):void { _vkWrapper.vkconnection.api("users.get", _vkWrapper.getStandardFields(), onClinetInitialize, onVKCallBackError); } private function onClinetInitialize(o:Object):void { var obj:Object = o[0] as Object; _baseModel.playerModel.addEventListener(PlayerModelEvents.USER_PHOTO_LOADED , onClientPhotoLoaded); _baseModel.playerModel.fillFields(obj); } private function onClientPhotoLoaded(e:PlayerModelEvents):void { I4Logger.print("App Ready!" , 0xFF0000); _baseView.baseModel = _baseModel; _host.addChild(_baseView); } } } package outcomebet.controllers { import flash.errors.IllegalOperationError; import flash.events.EventDispatcher; import vk.APIConnection; /** * ... * @author in4core progression lab */ public final class VKWrapper extends EventDispatcher { private var _vkconnection:APIConnection; public static var flashVars:Object = null; public function VKWrapper() { } public function createAPI():void { if (flashVars) _vkconnection = new APIConnection(flashVars); else throw new IllegalOperationError("FV - null"); } public function get vkconnection():APIConnection { return _vkconnection; } public function getStandardFields(id:uint = 0):Object { if (!id) id = flashVars["viewer_id"]; return { user_ids : id , fields : "nickname, screen_name, photo_100" }; } } } package { import com.in4core.utils.logger.I4Logger; import flash.display.Sprite; import flash.events.Event; import flash.system.Security; import outcomebet.controllers.BaseController; import outcomebet.controllers.VKWrapper; import vk.APIConnection; /** * ... * @author in4core progression lab */ [Frame(factoryClass="Preloader")] public class Main extends Sprite { public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); Security.loadPolicyFile("http://vk.com/crossdomain.xml"); var flashVars:Object = stage.loaderInfo.parameters as Object; if (!flashVars.api_id) { flashVars['api_id'] = 1; flashVars['viewer_id'] = 1; flashVars['sid'] = "XXX" flashVars['secret'] = "XXX"; } VKWrapper.flashVars = flashVars; I4Logger.print(flashVars); var base:BaseController = new BaseController(this); base.init(); } }
__________________
Марк Tween |
|
|||||
|
Регистрация: Jun 2012
Адрес: Татарстан
Сообщений: 118
|
Спасибо за пример. Я понял что этот скрипт получает данные только при старте флешке, получает и дальше продолжает отрабатывать другие методы. Но что делать если мне надо например прям в середине игры запросить и узнать какие то данные, то есть выполнить запрос _vkWrapper.vkconnection.api(); Как бы это могло выглядеть?
Добавлено через 9 минут Индекс это ссылка на сцену, идет из главного класса как статическая переменная. |
|
|||||
|
Регистрация: Jun 2012
Адрес: Татарстан
Сообщений: 118
|
кто такой Вид? получается если из любого класса то метод init в классе BaseController должен быть статическим?
|
|
|||||
|
Цитата:
![]() А Вы откуда тестируете? У меня предчувствие, что вся проблема из за того, что flashVars пустые (запуск локально).
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Регистрация: Jun 2012
Адрес: Татарстан
Сообщений: 118
|
Цитата:
{"error":{"error_code":101,"error_msg":"Invalid application API ID","request_params":[{"key":"format","value":"JSON"},{"key":"user_ids","value":"0"},{"key":"sig","value":"7eb76717bb32f434357cd95b316c7b9f"},{"key":"fields","value":"nickn ame, screen_name, photo_100"},{"key":"sid","value":"null"},{"key":"method","value":"users.get"},{"key":"api_id","value":"NaN"},{"key":"v","value":"3.0"}]}} это же сообщение получаю если даже сделать так, и компилировать flashVars['api_id'] = 1728947; flashVars['viewer_id'] = 1306422; flashVars['sid'] = 'a1006fd1e8gb9bd669e1119280166bc6cb9110b8a111550333bf041301'; flashVars['secret'] = '7ef8l6a4p8'; flashVars работает и присылает все данные, только что проверил вижу ид, секретный код и дт Добавлено через 1 минуту в статистике по приложению в АПИ вижу, что запросы в количестве 56 штук поступали к users.get Добавлено через 2 часа 28 минут Я нашел в чем причина, в моём коде package vk { import flash.display.*; import flash.events.*; import vk.APIConnection; import vk.events.*; import vk.ui.VKButton; import vk.events.CustomEvent; public class VkAPI { // получаем flashVars //public static var flashVars:Object; //public static var VK:APIConnection; public static var api_id:Number; public static var viewer_id:Number; public static var sid:String; public static var secret:String; //private private static var idUserVk:*; private static var idUserVk2:*; public function VkAPI() { } //Узнаём ИД пользователя, ФИО, секретный код, ИД сессии. public static function vkId(param1:String) { var flashVars:Object = Index.stage.loaderInfo.parameters as Object; // присваиваем переменным значения из flashVars ЭТИ МЕТОДЫ ОТРАБАТЫВАЮТ api_id = flashVars['api_id']; viewer_id = flashVars['viewer_id']; sid = flashVars['sid']; secret = flashVars['secret']; var VK:APIConnection = new APIConnection(flashVars); VK.api('users.get', { user_ids:1, fields:'city,sex' }, onProfileLoaded, onError); return idUserVk2; // Приходит ундифенд } private static function onProfileLoaded(data:Object) { idUserVk2 = data[0]['uid']; // и только потом сюда попадают данные } private static function onError(data:Object):void { idUserVk2 = data.first_name; //trace(data.error_msg); } } } Последний раз редактировалось razerw; 20.11.2013 в 16:13. |
|
|||||
|
[+4 08.09.13]
Регистрация: May 2012
Сообщений: 131
|
Вот это вообще наповал. Враппер для враппера.
Их (Вк-шные) классы из коробки уже сами по себе - враппер. По теме - научитесь разделять овец и баранов в коде. ID сессии ВК получается из GET параметров, которые передаются флешке параметрами. В зависимости от того, настроен ли у вас в приложении первый запрос к API - в эти параметры будет включен так же и результат запроса. В коде, который вы привели в самом начале - параметр в момент вызова будет скорее всего null или undefined. Вы отправляете к ВК серверу запрос на получение данных. И в этом же кадре обращаетесь к переменной, которая должна быть определена только после ответа сервера ВК. Вам следует вникнуть в азы работы клиент-серверных приложений. И только потом уже разбираться с API. |
|
|||||
|
Регистрация: Jun 2012
Адрес: Татарстан
Сообщений: 118
|
Цитата:
Подскажите пожалуйста как можно реализовать получение ответа после получения ответа от апи вк? |
|
|||||
|
Цитата:
Но, имхо, с колбэками гораздо удобнее. У меня вообще библиотека работы с вк и одноклассниками работает только через статические методы. Что-то типа Просто передаем туда ссылки на методы-колбэки, и один из них вызывается при получении ответа от вк или одноклассников. После чего ссылки на оба метода обнуляются. Не нужно никаких лишних подписок на события, все довольно удобно. |
![]() |
![]() |
Часовой пояс GMT +4, время: 21:18. |
|
|
« Предыдущая тема | Следующая тема » |
|
|