Revision: 50170
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at August 13, 2011 08:23 by ryanstewart
Initial Code
<?xml version="1.0" encoding="utf-8"?> <s:View xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" backgroundAlpha="0" actionBarVisible="false" title="TwitterAuthView" add="view1_addHandler(event)" creationComplete="view1_creationCompleteHandler(event)" removing="view1_removingHandler(event)"> <fx:Script> <![CDATA[ import mx.events.FlexEvent; import org.iotashan.oauth.OAuthConsumer; import org.iotashan.oauth.OAuthRequest; import org.iotashan.oauth.OAuthSignatureMethod_HMAC_SHA1; import org.iotashan.oauth.OAuthToken; import org.iotashan.utils.OAuthUtil; import spark.events.ViewNavigatorEvent; import vo.Profile; private var consumerKey:String = "your consumer key"; private var consumerSecret:String = "your consumer secret"; private var twitterRequestURL:String = "https://api.twitter.com/oauth/request_token"; private var twitterAuthURL:String = "https://api.twitter.com/oauth/authorize"; private var twitterTokenURL:String = "https://api.twitter.com/oauth/access_token"; private var requestToken:OAuthToken; private var twitterWebView:StageWebView; private var accessRequest:OAuthRequest; private var consumer:OAuthConsumer; private var accessToken:OAuthToken; private var thisProfile:Profile; override public function set data(value:Object):void { thisProfile = value as Profile; } override public function createReturnObject():Object { return thisProfile; } protected function view1_addHandler(event:FlexEvent):void { if(navigator.poppedViewReturnedObject) { thisProfile = navigator.poppedViewReturnedObject.object as Profile; } } protected function view1_creationCompleteHandler(event:FlexEvent):void { consumer = new OAuthConsumer(consumerKey,consumerSecret); var oauth:OAuthRequest = new OAuthRequest(OAuthRequest.HTTP_MEHTOD_GET,twitterRequestURL,null,consumer); var request:URLRequest = new URLRequest(oauth.buildRequest(new OAuthSignatureMethod_HMAC_SHA1())); var loader:URLLoader = new URLLoader(request); loader.addEventListener(Event.COMPLETE,onLoaderComplete); } protected function onLoadComplete(event:Event):void { // if(twitterWebView.location == 'https://api.twitter.com/oauth/authorize') // { // twitterWebView.loadURL("javascript:var myFunction=" // + "function(){document.location=document.body.innerHTML;}"); // twitterWebView.loadURL("javascript:myFunction();"); // } // twitterWebView.loadURL("javascript:var myFunction=" // + "function(){document.location=document.body.innerHTML;}"); // twitterWebView.loadURL("javascript:myFunction();"); trace(twitterWebView.location); } protected function onLocationChanging(event:LocationChangeEvent):void { trace(event.location); // trace('test'); } protected function onLoaderComplete(event:Event):void { var baseHeight:int = actionBar.height + twitterInstructions.height + tiPinNumber.height + btnFinished.height+25; requestToken = OAuthUtil.getTokenFromResponse(event.currentTarget.data); var authRequest:URLRequest = new URLRequest('http://api.twitter.com/oauth/authorize?oauth_token='+requestToken.key); twitterWebView = new StageWebView(); twitterWebView.viewPort = new Rectangle(0,baseHeight,stage.width,stage.height-baseHeight); twitterWebView.stage = this.stage; twitterWebView.assignFocus(); twitterWebView.loadURL(authRequest.url); twitterWebView.addEventListener(LocationChangeEvent.LOCATION_CHANGING,onLocationChanging); twitterWebView.addEventListener(Event.COMPLETE,onLoadComplete); } protected function button1_clickHandler(event:MouseEvent):void { var params:Object = new Object(); params.oauth_verifier = tiPinNumber.text; accessRequest = new OAuthRequest(OAuthRequest.HTTP_MEHTOD_GET,twitterTokenURL,params,consumer,requestToken); var accessUrlRequest:URLRequest = new URLRequest(accessRequest.buildRequest(new OAuthSignatureMethod_HMAC_SHA1())); var accessLoader:URLLoader = new URLLoader(accessUrlRequest); accessLoader.addEventListener(Event.COMPLETE,onAccessRequestComplete); // navigator.popView(); } protected function onAccessRequestComplete(event:Event):void { accessToken = OAuthUtil.getTokenFromResponse(event.currentTarget.data); thisProfile.twitterAccessKey = accessToken.key; thisProfile.twitterAccessSecret = accessToken.secret; twitterWebView.dispose(); navigator.pushView(ConfigureSocialNetworksView,thisProfile); } protected function view1_removingHandler(event:ViewNavigatorEvent):void { twitterWebView.dispose(); } ]]> </fx:Script> <s:layout> <s:VerticalLayout horizontalAlign="center" /> </s:layout> <s:ActionBar id="actionBar" skinClass="skins.MyActionBarSkin" width="100%" /> <fx:Style source="styles/MainStyle.css" /> <fx:Declarations> <!-- Place non-visual elements (e.g., services, value objects) here --> </fx:Declarations> <s:Label id="twitterInstructions" width="90%" styleName="LabelFont" text="Log into twitter in the box below, then authorize the application and put the PIN number in the box below." /> <s:TextInput id="tiPinNumber" width="90%" skinClass="skins.TextInputSkin" styleName="LabelFont" /> <s:Button id="btnFinished" label="Finished" click="button1_clickHandler(event)" styleName="ButtonLabel" width="90%" skinClass="skins.ContinueButtonSkin" /> </s:View>
Initial URL
Initial Description
Authenticating against Twitter within a Flex Mobile View. I do all of it within a StageWebView window so I can have them type the pin into the app while seeing it.
Initial Title
Twitter Authentication with Flex Mobile
Initial Tags
Initial Language
ActionScript 3