注冊App Application里有個應用叫Developer,加入后可以注冊新應用。點擊“set up new application”輸入應用的信息提交即可。開發(fā)者首頁好像沒有相關的鏈接入口,這點不方便。
權限驗證 現(xiàn)在的社交、微博網(wǎng)站大多都采用標準的OAuth驗證,F(xiàn)acebook也不例外,這點必須滴。用戶登錄是在Facebook的網(wǎng)站頁面輸入賬號密碼,登錄成功后會重定向到你的頁面從而獲取Token,之后訪問API使用Token來驗證。你的應用只需要拿到用戶的Token即可,整個過程你是接觸不到用戶的賬號和密碼的。即使你拿到賬號也沒用,API只認Token。相比HTTP Basic Authentication(HTTP Header中增加Bae64過的賬號和密碼),整個做法復雜化了,但是安全了。Basic Authentication時代開發(fā)者可以隨心所欲,做各種各樣的應用。OAuth之后最麻煩的就是驗證,特別是對桌面或移動應用,一般都在窗體中嵌入一個瀏覽器控件來完成。
獲取Token 1) 訪問https://graph./oauth/authorize?client_id={app_id}&redirect_uri={app_url},如果用戶沒有登錄,則登錄,提示用戶是否允許應用訪問自己的數(shù)據(jù),既是否授權允許。Facebook返回到你的應用,帶一個code參數(shù): {app_url}?code={code}
2)訪問https://graph./oauth/access_token?client_id={app_id}&redirect_uri={url}&client_secret={app_secret}&code={code} Facebook返回到你的應用,body中有access_token,你可以在你的應用里存儲用戶token,默認60分鐘過期,你可以增加offline_access權限讓它不過期。 整個過程是比較簡單的,不用作簽名之類的。麻煩的是必須跳到facebook網(wǎng)站驗證,如果是做客戶端應用會影響體驗。
訪問API 訪問需驗證的Function加上access_token參數(shù)即可,GET或POST看具體函數(shù)而定,API統(tǒng)一返回JSON格式的數(shù)據(jù),沒有別的選擇,不像Twitter的選擇很多。請求中也不用做簽名。
權限 Facebook的權限分得異常的細,默認你只能訪問用戶最基本的信息,比如你想獲取一個設置了隱私(只對朋友開放)的用戶的statu,需要read_stream權限,你想post statu需要publish_stream權限,你想獲取用戶的email賬號需要email權限等等。所以最好根據(jù)你的應用確定需要那些權限,在用戶首次使用做權限驗證時開通相應的權限,否則后面使用中會達不到你期望的結果。 提升權限 訪問:https://graph./oauth/authorize?client_id={app_id}&redirect_uri={app_url}&scope=publish_stream,offline_access,user_status,read_stream scope后面跟的就是權限,每個用逗號分開,可以有多個。
更新通知 Real-time Updates,當你的用戶有更新時,F(xiàn)acebook可以通知你,這是一個很有用的功能,可以實時接受用戶的更新。
1) 創(chuàng)建一個訂閱,默認你的應用是沒有更新通知的,你需要先創(chuàng)建一個訂閱,告訴Facebook我需要更新通知。
POST數(shù)據(jù)到https://graph./{app_id}/subscriptions?access_token={token},這個token是應用的token不是用戶的token,注意url是https,不是http(文檔是錯的),參數(shù):object,fields(你需要監(jiān)視用戶的那些更新),callback_url,verify_token(你自己指定一個驗證用),提交這個請求后就創(chuàng)建了一個訂閱。提交POST時候你的callback_url必須存在且可以訪問,F(xiàn)acebook會Get此url驗證是否存在。
2) 接受更新,創(chuàng)建好訂閱后當用戶有更新時,F(xiàn)acebook會通知此url告訴你有更新(POST),你將收到的更新內容為JSON格式,如:“{"object":"user","entry":[{"uid":"100001548188940","id":"100001548188940","time":1301731097,"changed_fields":["feed"]}]}”,表示該用戶更新了狀態(tài),不包括更新的內容。當然,返回可能是個集合。
你收到數(shù)據(jù)后可以做相應的更新處理,根據(jù)你的應用這個post頻率可能會高(監(jiān)視的是使用你應用的所有用戶),得考慮的你的程序性能。
小結
Facebook是一個很全面的社交網(wǎng)站,其API也很豐富,有Friends,Feed,Like,Music,Photo,Events,Checkin...等等,文檔也比較多。但具體使用上就簡單了,至少每次請求API不用簽名,相比Twitter,Douban等省事多了。關鍵得花時間研究透他的文檔,文檔里有詳細的說明,問題都可以通過文檔解決。
|