1

我正在使用 Adob​​e AIR 将社交网络“ vkontakte ”集成到我的桌面应用程序中。应用中的授权流程如下:

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

  2. 从那个 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);
        }
    }
}
4

1 回答 1

2

您的答案带有 Flash 标记,因此我不确定这是否适用,因为我认为它可能仅在 Flex SDK 中可用。

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

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

对于某些服务,它们会在将您重定向到的 url 中传递访问令牌,因此您可以检查新位置并从那里提取访问令牌。

于 2012-02-23T11:40:51.030 回答