综述
facebook开放平台是基于Oauth2.0协议工作的,本文将介绍下如何进行Facebook平台开发,将本人的经验分享出来,避免其他同学走坑。
正文
1.注册应用
首先,得注册一个应用,地址:https://developers.facebook.com/
在“我的应用”可以注册一个新应用(无需任何权限限制,只要一个facebook账号就行了,比twitter宽松很多)
这里:比较重要的就是
- 应用编号 appId
- 应用密钥 appSecret
- 产品:至少需要"facebook登陆"才能进行用户资源操作
然后,以上都是正式发布后需要的信息。
2.应用设置
特别地,介绍一下,我们开发环境,经常需要使用的测试工具和信息。
-
用户身份
可以添加开发者,测试者,还可以生成测试账号(某些操作必须要应用审核发布后才能使用,所以开发时候可以用自己账号或者测试账号来进行调试)
3.facebook文档和工具
- 文档
https://developers.facebook.com/docs/
facebook文档大部分支持中文,还是比较好阅读的,比较常用也就是facebook login, group api, page api,点击可以自己查看详情
+工具
https://developers.facebook.com/tools/explorer/
图谱调试工具:进行facebook所有api进行访问,支持get,post,delete方法,因为facebook是利用oauth2.0协议进行资源访问和控制的,每次获取access_token是相当麻烦的过程的,这里用图谱工具可以直接获取access token,然后用access_token进行访问api,比如上图获取用户信息。
常用api
-
/me/accounts
获取用户的主页信息(page)
-
/me/groups
获取用户的小组信息
4.SDK: https://developers.facebook.com/docs/apis-and-sdks#third-party-sdks
对于facebook推荐的java sdk有
- Spring Social:已经很久没维护了
- BlackBerry:已经很久没维护了
- Kinvey:貌似是个收费服务网站,没太明白
- RestFB: 目前还在维护的开源facebook sdk
下面就来着重介绍下RestFB
地址:https://restfb.com/
restfb:RestFB is a simple and flexible Facebook Graph API client written in Java.
在restfb的文档中,都详细介绍了怎么使用
这里我列下关键的代码:
如何服务器不能直接访问外网,第一种:可以开启程序全局代理socket5代理(方法见//www.greatytc.com/p/0a93d7ef35ad);第二种:下面的局部代理方式(只有使用restfb才代理,推荐这种方式)。
/**
* 根据accessToken生成FacebookClient,将该方法封装,方便其他方法使用,避免重复代
* @param accessToken
* @return
*/
private FacebookClient getFacebookClient(String accessToken) {
FacebookClient facebookClient = new DefaultFacebookClient(accessToken,
this.getWebRequestor(), new DefaultJsonMapper(), fbVersion);
return facebookClient;
}
/**
* 设置facebook sdk restFB的代理, 供getFacebookClient使用
* @return
*/
private WebRequestor getWebRequestor() {
return new DefaultWebRequestor(){
// 重写 openConnection 方法,注入代理配置
@Override
protected HttpURLConnection openConnection(URL url) throws IOException {
InetSocketAddress proxyLocation = new InetSocketAddress(proxyHost, proxyPort);
Proxy proxy = new Proxy(Proxy.Type.HTTP, proxyLocation);
return (HttpURLConnection)url.openConnection(proxy);
}
};
}