我正在使用 Adobe AIR 将社交网络“ vkontakte ”集成到我的桌面应用程序中。应用中的授权流程如下:
使用 url 打开网络浏览器,当用户输入登录名和密码时,重定向到
somePage.html
.从那个 URL,我需要得到一个
access_token
来签署所有未来的 API 请求。
所以真正的问题是:我怎样才能监听一个事件,这将表明用户已经成功登录,或者没有得到那个access_token
?
这是我正在使用的代码:
package
{
import air.net.URLMonitor;
import flash.display.Sprite;
import flash.events.ErrorEvent;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.StatusEvent;
import flash.net.*;
public class VKPlayer extends Sprite
{
private var url:URLRequest;
public function VKPlayer()
{
this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
}
private function onAddedToStage(event:Event):void
{
this.removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
//draw black background
with( graphics )
{
beginFill(0x0)
drawRect(0, 0, stage.stageWidth, stage.stageHeight);
}
init();
}
private function init():void
{
trace("Starting application");
//vk init params
var scope:String = "friends,video,audio";
var appID:String = "1111111";
var redirect_uri:String = "http://oauth.vkontakte.ru/blank.html";
var browserType:String = "popup";
var response_type:String = "token";
var baseURL:String = "http://oauth.vkontakte.ru/authorize?client_id=";
var initUrl:String = baseURL + appID + "&scope=" + scope + "&redirect_uri="+redirect_uri+"&display="+browserType+"&response_type="+response_type;
trace(initUrl);
url = new URLRequest(initUrl);
navigateToURL(url, "_blank");
makeQueries();
}
private function makeQueries():void
{
var str:String = "https://api.vkontakte.ru/method/getProfiles?uid=36396528&access_token=23ef280b0482a7604aa9191a414bef70b421bd54bc475e1cc7fa3d8a854d8ac";
var req:URLRequest = new URLRequest(str);
var uLdr:URLLoader = new URLLoader(req);
uLdr.addEventListener(Event.COMPLETE, onComplete);
uLdr.addEventListener(ErrorEvent.ERROR, onErrorHandler);
uLdr.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
}
private function onComplete(event:Event):void
{
trace(event);
}
private function onErrorHandler(event:ErrorEvent):void
{
trace(event);
}
private function ioErrorHandler(event:IOErrorEvent):void
{
trace(event);
}
}
}