2010年9月9日 星期四

AS3 Class 簡易FaceBook連線授權與發文 API

前一陣子自己作了一些臉書的flash社群遊戲,使用了官方建議的AS3 API,但是使用後總覺得相當不順手,bug又多,反倒是javascript提供的api,功能比較完整,又好用....所以乾脆自己用js的api打包在as3裡面,感覺整個速度也快很多(我是用js來呼叫Graph API)

目前主要提供四個比較常用的功能

  1. 登入授權,順便取得一些發文的授權
  2. 取回user的詳細資料,名子呀,生日呀.....等等
  3. 取回好友的uid跟name
  4. 自動發文到你的塗鴉板
雖然不多,但是如果只是要應用臉書的好友串聯功能,已經差不多夠用了,反正如果要用其他的Graph API功能,access_token都在cookies裡面,可以在自己拿去用...

API 與 說明文件 範例下載

雖然文件都有說明,還是大概說一下功能與要注意的地方

首先當然要取得一個自己的api_key
請到這裡來申請

之後你會取得一個api key

下載我所提供的Class
把Cain_fb_api.swc跟你的fla放在同一層資料夾

再來是html有幾個地方要注意

一定要先嵌入這個js,因為終究我的api是透過js api來操作

另外body裡面請放入這個div, js api會用到fb-root這個id



flash外掛的allowScriptAccess屬性請設always....這應該不用解釋了,不然swf沒辦法呼叫js
且它的id與name屬性記得都要設定,且要一樣

好了之後終於可以開始進入as部分了,先把class匯入

import Cain.fb.event.*;
import Cain.fb.*;



API初始化 api key請填上自己去申請的
var fb:Fb_API = new Fb_API("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");


進行認證
fb.login();
認證完會觸發Fb_API.onLOGIN事件
fb.addEventListener(Fb_API.onLOGIN, onFB_LOGIN);
觸發後如果fb.data的值是true代表授權成功,使用者登入,這時候access_token已經在cookies裡面了,之後要下什麼Graph API請隨意

如果要取得自己的資料請下
fb.getUser();
取得後觸發GetUserEvent.RESPONSE事件

fb.addEventListener(GetUserEvent.RESPONSE, onGetUser);
回傳的事件裡面有個user物件,所有資料都在裡面
如果你要名子,可以用user.name取得(其他的請自己看說明文件User 的屬性)

如果要取得朋友列表
fb.getFriends();
取得後觸發GetFriendsEvent.RESPONSE事件

fb.addEventListener(GetFriendsEvent.RESPONSE, onGetFriends);

回傳的事件裡面有個data陣列,你可以依序取出,每一欄是一個Object
裡面有name跟uid屬性,就是朋友的名子與她的uid



ps.理論上如果要取得朋友的詳細資料可以下fb.getUser(它的uid)
不過有時候可能沒有經過允許有時會取不到..


訊息發布
fb.publishStream(new PublishMessage("要發布的訊息"));
發布後觸發PublishStreamEvent.RESPONSE事件
fb.addEventListener(PublishStreamEvent.RESPONSE, onPublishStream);
回傳的事件有個success屬性,代表發文成功與否
如果發文成功,還會有個id屬性,就是這篇文章的id

目前僅需要這先些功能,估計以後會再增加

18 則留言:

annie 提到...

啊~~不好意思,我快要瘋,我下你的檔案下來,做,但是我直連線,一直沒有任何的反應呢~~~為什麼呢,這是我的MAIL, 救救我~~
annielee0416@gmail.com,現在正在被老闆追殺中呢~~救救我啦

Unknown 提到...

用這個吧!這篇是很久以前的文章.. http://cainmaxdesign.blogspot.com/2011/07/as3-class-cain-facebook-api-20-fb.html

annie 提到...

我快哭了啦~~還是不行~~
不好意思啦~~一直打擾你~~
我想問一下,為什麼我都import進來了,但是他還是說C:\Documents and Settings\Administrator\桌面\測式\annietest\demo\Main.as,字行 95 1046: 找不到 Type,或它不是編譯時期常數:PublishStreamEvent。

Unknown 提到...

你確定你有 import PublishStreamEvent 這個物件?? 有import的話不會找不到... 可能是我程式有少加這行吧

annie 提到...

不好意思有沒有你的聯絡方式,我直接去請教你呢?

Unknown 提到...

程式碼貼出來吧,我幫你看看.... 別找我 我好怕XD

Unknown 提到...

程式碼貼出來吧,我幫你看看.... 別找我 我好怕XD

annie 提到...

程式碼好多,你有沒有mail,我傳過去給你~~~嗚~~真的很感謝你~~~感謝

Unknown 提到...

u0yuogt8oq5lw39@jetable.org 寄到這吧

annie 提到...

你好~~我己用我GMAIL傳送過去了~~不好意思一直打擾~~

Unknown 提到...
作者已經移除這則留言。
Unknown 提到...

我直接輸出後,按下連線按鈕,有papa認證視窗呀...認證後一切正常呀? 有取得資料無誤。 所以這個是正確的,你的問題是按下連線後沒有papa視窗出來嗎? 不會被瀏覽器檔掉了吧。或者是FB APP 沒有正確?

Unknown 提到...

http://www.yourhouse.tw/fbtest/ 這是我直接把程式放上Web Server的demo....忘了跟你說,測試時要放在WebServer測試才回產生效用,直接輸出當然不會有任何反應。我自己是都在本機裝Apache來測試,當然這時候APP的網站位置我會設成 http://127.0.0.1/ 等到實際上線線時才會改

annie 提到...

有了有,哈哈~~有加了~~但是我要call朋友該怎麼用呢~~~

annie 提到...

有了有了,那我要call朋友列表該怎麼用呢~~你的朋友列表有範列嗎??謝謝你

annie 提到...

其怪,你的可以呢,我放上去 按了開始,會出現
https://www.facebook.com/dialog/permissions.request?api_key=1ab39e31ce65f755dd0335d59b4965ad&app_id=1ab39e31ce65f755dd0335d59b4965ad&display=popup&fbconnect=1&locale=en_US&next=http%3A%2F%2Fstatic.ak.fbcdn.net%2Fconnect%2Fxd_proxy.php%3Fversion%3D3%23cb%3Df3dc93ad6e66bca%26origin%3Dhttp%253A%252F%252F192.168.50.21%252Ff36aab056a54768%26relation%3Dopener%26transport%3Dflash%26frame%3Df31053e6d650c9c%26result%3D%2522xxRESULTTOKENxx%2522&perms=read_stream%2Coffline_access%2Csms%2Ccreate_event%2Crsvp_event&return_session=1&sdk=joey&session_version=3
這樣子的狀況~~

annie 提到...

有時可以有時不行,但是out的地方一直是空的,我想抓朋友,都抓不到~~

Unknown 提到...

你先參考一下我的教學文章串吧,包括如何取得好友列表都有說明...