AIR for AndroidでOAuth 2.0を試した時のメモ
AIR for AndroidでGoogle API、foursquare APIのOAuth 2.0を試してみました。
簡単にですがまとめたいと思います。
はじめに
はじめに、どちらにも共通する内容についてまとめます。
・UIについて
今回はあるViewクラスでボタンが押された時にStageWebViewクラスを使って、Google、またはfoursquareの認証画面を表示させ、リダイレクトされた画面からアクセストークンを取得するようにしました。
・処理について
どちらも処理の流れは下記のようになります。
- StageWebViewクラスを作成して、アクセストークンを含むリダイレクトが返された時のイベントハンドラを登録をする
- 認証用URLをloadする
- 登録したイベントハンドラで、アクセストークンを取得する
private function createStageWebView():void { webView = new StageWebView(); webView.addEventListener(Event.COMPLETE, webViewCompleteHandler); webView.addEventListener(LocationChangeEvent.LOCATION_CHANGE, webViewLocationChangeHandler); webView.stage = stage; webView.viewPort = new Rectangle(0, 0, stage.stageWidth, stage.stageHeight); // 認証URL webView.loadURL(getAuthenticationURL()); } private function webViewCompleteHandler(event:Event):void { // アクセストークンを取得 } private function webViewLocationChangHandler(event:LocationChangeEvent):void { // アクセストークンを取得 }
この後、Google API、foursquare APIで異なる部分についてまとめます。
Google APIについて
OAuth 2.0を使用する為のアプリケーション登録時と、認証用URLのパラメーターに指定するリダイレクトURLは、mobile用の指定のものが用意されています。
また、サンプルの認証URLが用意されているので簡単にテストをすることができました。
・公式ドキュメント
http://code.google.com/intl/en/apis/accounts/docs/OAuth2.html
・認証URLに指定するリダイレクトURL
指定のmobile用文字列
・アクセストークン取得イベント
Event.COMPLETE
・アクセストークンの取得の仕方
StageWebView#title
private function webViewCompleteHandler(event:Event):void { var _title:String = webView.title; var _index:int = _location.indexOf("code="); if(_index != -1) { trace(_title.substring(_index + "code=".length)); } }
foursquare APIについて
Google APIと違い、リダイレクトURLを各自で用意しなければいけません。
また、リダイレクトURLは有効なものでないと、アクセストークンが取得できるイベント発生前にエラーが発生してしまいます。
・公式ドキュメント
https://developer.foursquare.com/docs/oauth.html
・認証URLに指定するリダイレクトURL
各自で、有効なURLを用意する(リダイレクトに対応する必要はなし。有効でエラーにならず表示されるURLならOK)
・アクセストークン取得イベント
LocationChangeEvent.LOCATION_CHANGE
・アクセストークンの取得の仕方
LocationChangeEvent#location
private function webViewLocationChangHandler(event:LocationChangeEvent):void { var _location:String = event.location; var _index:int = _location.indexOf("#access_token="); if(_index != -1) { trace(_title.substring(_index + "#access_token=".length)); } }
以上です。 やり方は他にもありますし、また他のAPIのOAuth 2.0ではそれぞれ少し異なる点があると思います。