アーカイブ : 2010年 11月

これからの学習タスク

MAX以降、おもしろそうな技術が目白押しで全然ついていけてない!!

これからやりたい事一覧!

  • Morehill 次期Flashで実装予定の低レベル3DAPI
  • Hero
  • PtoP,MultiCastのAdobe LiveCycle

どれもボリュームが多い。。。

とりあえずでかいHeroから攻略予定。

facebook OAuth認証について

facebookbookの認証は既にairforandroidでも使えるライブラリがリリースされています。
GraphAPI

メモ:
facebookの認証について
facebookの認証は以下の4つのプラットフォームに対応していている。
・javascript
・デスクトップアプリケーション
・モバイルウェブ
・キャンバス??
airforandroidで認証を行う場合、モバイルウェブかデスクトップアプリケーションの認証でライブラリのGraphAPI Desktop(HTMLLoaderを使った認証)を使えばクリアできそう。

アプリの登録はこちらから

Facebookデスクトップアプリケーション用の認証を使った簡易Auth認証サンプル

GraphAPIのoauth認証はHTMLLoaderを使っているのでstageWebViewで自作したもので差し替えてます。

Main.as(ドキュメントクラス)

package
{
	import flash.display.Sprite;

	import com.facebook.graph.FacebookDesktop;

	public class Main extends Sprite
	{
		private const API_KEY:String = "アプリID";
		private const API_PASS:String = "シークレットキー";
		private const API_CALLBACK:String = "コールバックするURL";
		private var token:String = "";
		private var auth:FaceBookAuth;

		public function Main()
		{
			StageReference.init(stage);
			init();
		}
		private function init():void {
			auth = new FaceBookAuth(stage, API_KEY, API_CALLBACK, authCallback);
		}

		public function authCallback(key:String):void {
			auth = null;
			//↓のtokenを保存しておけばOK
			token = key;
			//facebookDesktopの初期化
			FacebookDesktop.init(API_KEY, null, key);
			//自分のアカウントの友達一覧を取得します。
			FacebookDesktop.api('/me/friends', handleFriendsLoad);
		}
		private function handleFriendsLoad(response:Object, fail:Object):void {
			var friends:Array = response as Array;
			var l:int = friends.length;
			for (var i:int = 0; i < l; i++) {
				trace(friends[i].name, friends[i].id);
			}
		}
	}
}

FaceBookAuth.as

package
{
	import flash.display.Sprite;
	import flash.display.Stage;
	import flash.events.Event;
	import flash.geom.Rectangle;
	import flash.media.StageWebView;

	public class FaceBookAuth extends Sprite
	{
		private const API_URL_AUTH:String = "https://graph.facebook.com/oauth/authorize?";
		private const API_URL_GETTOKEN:String = "";
		private var apiKey:String;
		private var callBackURL:String;
		private var callBackFunc:Function;
		private var webview:StageWebView;

		public function FaceBookAuth(stg:Stage, apikey:String, callbackurl:String, callbackfunc:Function)
		{

			callBackFunc = callbackfunc;
			callBackURL = callbackurl;

			webview = new StageWebView();
			webview.stage = stg;
			webview.viewPort = new Rectangle(0, 0, StageReference.stageWidth, StageReference.stageHeight);
			webview.loadURL(createAuthorizeURL(apikey,callbackurl));
			webview.addEventListener(Event.LOCATION_CHANGE, onLocationChange);
		}

		private function createAuthorizeURL(apikey:String,callbackurl:String):String {
			var url:String = API_URL_AUTH;
			url += "client_id=" + apikey + "&";
			url += "redirect_uri=" + callbackurl + "&";
			url += "type=user_agent" + "&";
			url += "display=popup";
			return url;
		}

		private function onLocationChange(e:Event):void {
			var num:int = webview.location.indexOf(callBackURL);
			if (num >= 0) {
				var token:String = webview.location.split("n=")[1].split("&")[0];
				callBackFunc(token);
				webview.removeEventListener(Event.LOCATION_CHANGE, onLocationChange);
				webview.dispose();
			}
		}
	}
}