(貼心提醒:在閱讀之前,最好先瞭解 facebook graph api 認證與授權的原理喔)
Play framework也有整合了與 facebook graph api溝通的module,名稱叫做 fbgraph,有分 0.1版及0.2版,而這個module主要是整合一個叫做「restfb」的套件,而我在一開始在使用restfb的時候,發現他並沒有把取得access token的流程整合進來,所以這個部分要自行處理,像C# facebook API 就有包含這部分。
而以下是在 Play Framework 使用 fbgraph的流程。
1. Play Install fbgraph-0.2
2.設定application.conf , module.fbgraph=${play.path}/modules/fbgraph-0.2
3.重新產生eclipse的專案(我是用eclipse開發), import project 即可。
API實際用法可以參考 : http://restfb.com/
而如果你看了該網站的示範之後,會發現一開始的範例就直接開始使用access_token,裏面並沒有把「取得access_token」這個部分的流程包到這個module 來,所以自已要額外的去做一些取得 access_token 流程的處理。如果這時你不太清楚facebook graph api 驗證、授權流程,需要先看這裏。
所以我就另外擴充了FacebookOauthClient類別,主要是用來處理「取得Access_Token」這一段流程,擴充類別如下圖:

介面:
- FacebookApplication : 包含了所有appid、secretid、domain等等定義,需要類別實作。
- FacebookOauthClient:針對實作FacebookApplication介面的類別實體來與facebook graph api做rest溝通,用來取得login url,code以及 access token。
- FacebookUtils:一些參數轉換的工作。
1 .定義實作FacebookApplication的類別。
public class DemoFbApp implements FacebookApplication {
public String getAppId() {
// TODO Auto-generated method stub
return "app id";
}
public String getAppSecret() {
// TODO Auto-generated method stub
return "secret id";
}
public String getCancelUrlPath() {
// TODO Auto-generated method stub
return null;
}
public String getSiteUrl() {
// TODO Auto-generated method stub
return "http://localhost/";
}
}
2.在Controller用取得 facebook login url,並導向。//自行定義的 demofbapp
protected static FacebookApplication app = new DemoFbApp();
//定義要導回來的url
protected static String RedirectUrl = "http://localhost:1112/HomeController/LogOk";
public static void Oauth()
{
FacebookOauthClient oauthClient = new FacebookOauthClient(app);
oauthClient.setReturnUrl(new URI(RedirectUrl));
//可額外定義參數,例如防止CSRF的Status或者授權項目的scope
//有關 授權項目的 scope
//請參考:http://developers.facebook.com/docs/authentication/permissions/
HashMap ppp = new HashMap();
String url = oauthClient.getLoginUri(ppp).toString();
redirect(url);
}
將會導向登入畫面。
3.在導回來的url中,取得 code 的參數,再拿這個code 去跟 facebook graph api 要到 access_token。
public static void LogOk(String code){
FacebookOauthClient oauthClient = new FacebookOauthClient(app);
oauthClient.setReturnUrl(new URI(RedirectUrl));
HashMap ppp = new HashMap();
ppp.put("code", code);
String accessToken = oauthClient.getAccessToken(ppp);
//即取得 accessToken 及 Expire ,再自行反序列化成物件即可。
renderText(accessToken);
}
是的,成功取得Access Token之後,就可以開始使用restfb來使用你想要的功能了,應該算方便又容易使用的架構,enjoy it!




0 意見:
張貼意見