丹尼爾 寫於 2007年7月25日
當你想用Java寫一Facebook的應用?你把在facebook的帳號中加入的程序開發模塊,下載了相關的java類庫。忽然你發現不得不停下來:開發相關的入門介紹,樣例代碼和文檔說明在哪兒?這樣的挫敗感令人憤怒,而最終導致你不得不放棄。
"我覺得缺乏良好的Java開發相關的說明文檔是令人不安的" 。
但願有人會盡快寫一個不錯的應用Java 開發facebook應用的入門指南。也許只需要你給我些好吃的巧克力,我們可以寫些相關的介紹文檔,老實說我們的確也解決了不少相關的問題。這裡有一些技巧幫助你使用java開始建立自己的 facebook應用。 這並不是一個完整的入門指南,但他可以幫你在著手做時少走些彎路。
八個注意事項輔助你構建Java/facebook應用
1.為了你的幸福和健康,建議你使用5.0或更高的JDK開發包。
2.不用看facebook java開發包中的列子,因為那些例子是針對java桌面應用程序的。而通常你是需要寫一個web應用,這兩種應用的區別還是很大的。 一開始,你需要一個web應用服務容器,你可以能會選擇tomcat,但我不會,這裡面有另一個故事,我會找個合適的時間再告訴你。Facebook的網絡應用有一個不常見的調用模式。大多數你的頁面會被facebook調用。用戶請求一個facebook的頁面,頁面中的主要內容會從你的服務器中返回給用戶。你體統的內容會融合到facebook的頁面裡返回給用戶。大多數情況下這些流程不需要你的干預就能很好的執行。但需要注意的是你服務器端產生的頁面中的javascript是不能執行的,這就意味著普通的ajax不再在facebook中應用。如果你需要使用AJAX的技術實現facebook 提供的 mock-ajax不能完成的功能,則需要通過facebook的頁面跳到你服務配器上的一般頁面。
3.配置你在facebook上的應用程序
不要忘了填寫facebook應用的配置文件,你應該設置:
應用程序的回調網址。
應用程序的名字- 這個名字用來表示標識在facebook的頁面。(這些頁面可以是用iframe嵌入到facebook的導航頁,也可以是用FBML標記的頁面)。一但設定,比如http://apps.facebook.com/yourappname/yourpagename 這個頁面就會從facebok產生一個請求到你的服務器 。對於新用戶來說,這就是一個你的應用程序的歡迎頁面,邀請用戶來使用傳播你的這個應用。
4.用facebookrestclient
最重要的階級,在客戶端類庫中最重要的類是facebookrestclient。這個類中包含一系列調用facebook服務端的方法,並涵蓋了大部分你需要的功能。可惜facebookrestclient是不是個架構清晰的類。幾乎所有的請求,需要一個facebookrestclient 這是建造一個會話密鑰 。用戶登陸後可以從CGI變量中獲得會話的密鑰。(參考 FacebookParam.SESSION_KEY.toString())沒有登陸的用戶需要引導到一個登陸頁面。 試試以下方法:
// 創建一個無會話狀態的FacebookRestClient
FacebookRestClient.auth_getSession() 以我的經驗基本沒用。他的作用是把一個無會話的client變成一個有會話的。我發現從CGI變量中獲取會話要比試用這個方法簡單。
FacebookRestClient client = new FacebookRestClient ( 你的api密鑰 , 你的加密密鑰 ) ;
String token = client.authcreateToken () ;
String loginURL = “http : //www.facebook.com/login.php?v=1.0&apikey=&”+ YOUR APIKEY +“&auth_token =”+ token ;
// 這裡轉向到登陸頁面
// 登陸後就會返回會話key
當有一個會話key的FacebookRestClient,你可以調用這個類提供的各種facebook編輯方法。這些方法可以很方便與facebook進行交換操作。但不幸的事這些方法返回的是未經處理的XML文檔,這些文檔後續的處理會比較麻煩。
比如 friends_get()返回的是
<document>
<friendsgetresponse>
<uid>1</uid>
<uid>2</uid>
<uid>3</uid>
</friendsgetresponse>
</document>
你也許想封裝一些提取信息的方法,例如調用friends_get(),試試這個
Document d = client . friends_get () ;
這樣friends的列表裡就填充好了用戶的id。
NodeList userIDNodes = d . getElementsByTagName ( " uid " ) ;
int fcount = ids . getLength () ;
List < Integer > friends = new ArrayList < Integer > () ;
for ( int i = 0 ; i < fcount ; i ++ )
{ Node node = userIDNodes . item ( i ) ;
String idText = node . getTextContent () ;
Integer id = Integer . valueOf ( idText ) ;
friends . add ( id ) ; }
5.servlet返回局部頁面
當你生產在facebook中的頁面時,比如這樣的一個地址http://apps.facebook.com/yourappname/yourpagename,你必須返回的一個HTML或FBML標記的頁面片段,而不是一個完全的HTML頁面。
6.學習FBML 。
FBML這是一套特有的facebook標簽。試用標簽可以讓你很方便的完成很多功能(比如顯示用戶的名稱和圖片)。
7.用戶邀請好友
你想完成病毒式推廣的邀請好友?facebook最近修改了他的api(2007.11)。新版本主要改進了一個特殊的form,fb:form。具體的說明在這裡:http://wiki.developers.facebook.com/index.php/Fb:request-form。
原來完成這功能的方法FacebookRestClient.notifications_sendRequest()已經不再使用了,如果你不慎調用將會得到一個異常。
8.用戶檔案信息顯示頁面
要想將一些信息放入用戶的檔案信息頁面,使用FacebookRestClient.profile_setFBML()。這個方法復寫了你在應用裡設定的默認信息頁面。當你設定了用戶的個人檔案的FBML頁面,這些頁面被流量時,facebook會緩存這些頁面信息而不會即時更新。這樣就使得用戶信息的動態更新會麻煩一些。當一個事件觸發用戶信息改變時,你需要重新調用profile_setFBML()更新這些信息。幸運的時既然你已經有一個登陸的客戶端可以做任何事情,所以這個客戶端也可以任意設置你的用戶資料的數據項。
好了,就這些
我還是一個facebookapi的初學者,如果你是專家,請留言斧正。
祝福你們在構建web2.0的路上一路順風。