navigateToURL обрабатывает событие перенаправления - PullRequest
1 голос
/ 23 февраля 2012

Я работаю над интеграцией социальной сети " vkontakte " в настольное приложение с помощью Adobe AIR. Процесс авторизации в приложении выглядит следующим образом:

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

1 Ответ

2 голосов
/ 23 февраля 2012

Ваш ответ помечен Flash, поэтому я не уверен, применимо ли это, поскольку я думаю, что он может быть доступен только во Flex SDK.

Flex SDK содержит компонент HTML, который позволяетотображать HTML-контент в вашем приложении.

По сути, это создаст держатель для веб-страницы - в данном случае для вашей страницы авторизации.После того как пользователь авторизовал ваше приложение, вы можете прослушать событие LOCATION_CHANGE, которое произойдет, когда приложение перенаправит вас на страницу успеха или сбоя.

В некоторых службах они передают маркер доступа вURL, на который вас перенаправляют, чтобы вы могли осмотреть новое местоположение и извлечь из него токен доступа.

...