navigateToURL处理重定向事件

时间:2012-02-23 01:25:13

标签: flash air oauth-2.0 vk

我正致力于使用Adobe AIR将社交网络“vkontakte”集成到我的桌面应用程序中。应用程序中的授权流程如下:

  1. 使用网址打开网络浏览器,当用户输入登录名和密码时,重定向到somePage.html

  2. 通过该网址,我需要access_token签署所有未来的API请求。

  3. 所以问题实际上是:我如何监听一个事件,该事件表明用户已成功登录,或未能获得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);
            }
        }
    }
    

1 个答案:

答案 0 :(得分:2)

你的回答是用Flash标记的,所以我不确定这是否适用,因为我认为它只能在Flex SDK中使用。

Flex SDK包含一个HTML组件,可让您在应用程序中显示HTML内容。

这实际上会为网页创建一个持有者 - 在这种情况下是您的授权页面。一旦用户授权您使用应用程序,您就可以监听应用程序将您重定向到成功或失败页面时发生的LOCATION_CHANGE事件。

对于某些服务,他们会在他们重定向到的网址中传递访问令牌,这样您就可以检查新位置并从那里提取访问令牌。