1
我正在使用Adobe AIR将社交网络“vkontakte”集成到我的桌面应用程序中。授权的应用中的流程如下:navigateToURL句柄重定向事件
打开网络浏览器与一个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);
}
}
}
非常感谢,我也发现我可以使用StageWebView类 - 而不是默认浏览器。 – yozhik 2012-02-23 11:56:52