我正致力于使用Adobe AIR将社交网络“vkontakte”集成到我的桌面应用程序中。应用程序中的授权流程如下:
使用网址打开网络浏览器,当用户输入登录名和密码时,重定向到somePage.html
。
通过该网址,我需要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);
}
}
}
答案 0 :(得分:2)
你的回答是用Flash标记的,所以我不确定这是否适用,因为我认为它只能在Flex SDK中使用。
Flex SDK包含一个HTML
组件,可让您在应用程序中显示HTML内容。
这实际上会为网页创建一个持有者 - 在这种情况下是您的授权页面。一旦用户授权您使用应用程序,您就可以监听应用程序将您重定向到成功或失败页面时发生的LOCATION_CHANGE
事件。
对于某些服务,他们会在他们重定向到的网址中传递访问令牌,这样您就可以检查新位置并从那里提取访问令牌。