Facebook API 开发记录
注册App
Application里有个应用叫Developer,加入后可以注册新应用。点击“set up new application”输入应用的信息提交即可。开发者首页好像没有相关的链接入口,这点不方便。
权限验证
现在的社交、微博网站大多都采用标准的OAuth验证,Facebook也不例外,这点必须滴。用户登录是在Facebook的网站页面输入帐号密码,登录成功后会重定向到你的页面从而获取Token,之后访问API使用Token来验证。你的应用只需要拿到用户的Token即可,整个过程你是接触不到用户的帐号和密码的。即使你拿到帐号也没用,API只认Token。相比HTTP Basic Authentication(HTTP Header中增加Bae64过的帐号和密码),整个做法复杂化了,但是安全了。Basic Authentication时代开发者可以随心所欲,做各种各样的应用。OAuth之后最麻烦的就是验证,特别是对桌面或移动应用,一般都在窗体中嵌入一个浏览器控件来完成。
获取Token
1) 访问https://graph.facebook.com/oauth/authorize?client_id={app_id}&redirect_uri={app_url},如果用户没有登录,则登录,提示用户是否允许应用访问自己的数据,既是否授权允许。Facebook返回到你的应用,带一个code参数: {app_url}?code={code}
2)访问https://graph.facebook.com/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网站验证,如果是做客户端应用会影响体验。
访问API
访问需验证的Function加上access_token参数即可,GET或POST看具体函数而定,API统一返回JSON格式的数据,没有别的选择,不像Twitter的选择很多。请求中也不用做签名。
权限
Facebook的权限分得异常的细,默认你只能访问用户最基本的信息,比如你想获取一个设置了隐私(只对朋友开放)的用户的statu,需要read_stream权限,你想post statu需要publish_stream权限,你想获取用户的email帐号需要email权限等等。所以最好根据你的应用确定需要那些权限,在用户首次使用做权限验证时开通相应的权限,否则后面使用中会达不到你期望的结果。
提升权限
访问:https://graph.facebook.com/oauth/authorize?client_id={app_id}&redirect_uri={app_url}&scope=publish_stream,offline_access,user_status,read_stream
scope后面跟的就是权限,每个用逗号分开,可以有多个。
更新通知
Real-time Updates,当你的用户有更新时,Facebook可以通知你,这是一个很有用的功能,可以实时接受用户的更新。
1) 创建一个订阅,默认你的应用是没有更新通知的,你需要先创建一个订阅,告诉Facebook我需要更新通知。
POST数据到https://graph.facebook.com/{app_id}/subscriptions?access_token={token},这个token是应用的token不是用户的token,注意url是https,不是http(文档是错的),参数:object,fields(你需要监视用户的那些更新),callback_url,verify_token(你自己指定一个验证用),提交这个请求后就创建了一个订阅。提交POST时候你的callback_url必须存在且可以访问,Facebook会Get此url验证是否存在。
2) 接受更新,创建好订阅后当用户有更新时,Facebook会通知此url告诉你有更新(POST),你将收到的更新内容为JSON格式,如:“{"object":"user","entry":[{"uid":"100001548188940","id":"100001548188940","time":1301731097,"changed_fields":["feed"]}]}”,表示该用户更新了状态,不包括更新的内容。当然,返回可能是个集合。
你收到数据后可以做相应的更新处理,根据你的应用这个post频率可能会高(监视的是使用你应用的所有用户),得考虑的你的程序性能。
小结
Facebook是一个很全面的社交网站,其API也很丰富,有Friends,Feed,Like,Music,Photo,Events,Checkin...等等,文档也比较多。但具体使用上就简单了,至少每次请求API不用签名,相比Twitter,Douban等省事多了。关键得花时间研究透他的文档,文档里有详细的说明,问题都可以通过文档解决。
http://chy710.cnblogs.com/