SHAPEVENT DAILY LOG

SHAPEVENT DAILY LOG

Cool stuff

IFrame Facebook Application(翻译)

参考地址:

http://www.adobe.com/devnet/facebook/articles/facebook_architecture_overview_02.html

(FACEBOOK APPLICATION是在基于Facebook Api运行的应用程序, 本文中简称为app)

当用户访问Facebook app时(比如http://apps.facebook.com/someapp),Facebook的server会针对app的类型(iFrame或FBML)对用户的请求做不同的处理。如果是iframe类型的app,Facebook server会返回一个Facebook的页面,页面的chrome(这里不是指谷歌的浏览器,chrome包括顶部的菜单,右边的广告栏,底部的状态栏和相关的快捷方式和中间的content部分)中的content就是加载了用户app的iframe。


图1.Iframe app的结构

1. 用户在facebook站点上访问app;浏览器向facebook server发送HTTP request。

2. Facebook server返回包含了Facebook chrome和其中的iFrame HTML标签的HTML/JavaScript (JS)页面。

3. 用户浏览器向app server发送请求以以显示iFrame中的内容,一般都是app的页面(如php,ColdFusion或JSP)。Session信息会被包含在GET URL中,app server就会知道是什么用户在从Facebook上发出了请求。

4. app相关的页面会引用数据库或其他需要的服务,包括引用Facebook的REST API。API调用必须包含包括app的api key和引用标识(signature)在内的验证信息,应用标识由发送的参数,当前用户的session key生成的MD5哈希值,app的secret key以及其他信息组成。一般来说,引用标识会在server端页面生成,之后该页面使用相关的library代码引用Facebook。目前Facebook官方支持的library有PHP5,JavaScript和ActionScript3.0, 其他的一些library都是由community开发完成。

5. Facebook server向app server返回XML或JSON格式的数据。

6. app server向用户浏览器返回HTML/JS页面,之后在IFrame中显示。

当用户与app交互时,会发生以下事情

1. 如果app有链接到新的页面,重复第3和第6步。

2. 或者app中包含有异步的JavaScript引用(ajax),那么第7和10步会执行,与 之前返回新的页面不同的是这次返回XML或JSON格式的数据,这些数据会由页面的JavaScript处理。

3. 还一种选择是在app页面中使用JavaScript直接引用Facebook server(第11和12步)。Facebook官方支持JavaScript Client API。你可以把一系列单个的API引用分组到一个向Facebook发出的HTTP request里。这种方法有好处也有坏处,它减少了向Facebook server发出的HTTP request总数,但它需要app将许多页面结合在一起,这样导致页面十分复杂。