2012-02-23 47 views
1

我正在使用Adobe AIR将社交网络“vkontakte”集成到我的桌面应用程序中。授权的应用中的流程如下:navigateToURL句柄重定向事件

  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); 
     } 
    } 
} 

回答

2

你的答案是标记与Flash,所以我不知道,因为我认为它可能只在Flex SDK可这是适用的。

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

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

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

+1

非常感谢,我也发现我可以使用StageWebView类 - 而不是默认浏览器。 – yozhik 2012-02-23 11:56:52