??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
]]>
理想情况下,您希望设计一个用戯为十分好用或者充满乐的应用E序。它使得用户能够通过 Facebook |络同他们的朋友q行沟通。您不能保证一个成功的应用E序Q这依赖于应用程序的核心概念Q,但是您可以保证如果这个概忉|成功的,那么您的应用E序可以被很好地集成?Facebook q_之中Qƈ且通过市场和虚拟的口口怼不断提升。所以,您可以从以下角度来看待问题:如何创徏一个能够大q提高用戯通性的应用E序Qƈ且通过 Facebook 的集成点扩大您的用户基础Qƈ且鼓q户随旉地的同您的应用程序进行交互?/p>
Facebook 为您的应用程序提供了许多集成点:其中两个主要的区域分别被UC应用E序的画布页面和剖面盒,除此之外Q还有大量的辅助集成炏V?/p>
您通过q些辅助点的最H出的和无所不在?Left Nav 讉K一个应用程序的d面。Left Nav ?Facebook 的左侧导航栏中的一个链接,它将 Facebook 中的所有其他的面整合hQƈ且列Z所有的当前用户已安装的应用E序Q除非用户在安装应用E序时去掉了q一选项Q。D例来_您可以点ȝ册应用程序的 Left Nav 链接Q请参见?8 中所C)?/p>
?8. 左侧定位链接
最后,用户可以通过 Applications 应用E序在他们的环境中限制一个应用程序的集成点,Applications 应用E序列出了所有已l安装的E序Q允许您对其q行删除或者编辑操作。点?Edit Settings 打开标准U有讄H口Q请参见?28 所C)?/p>
?28. 标准U有讄对话?/strong>
q里是私有设|的详细信息Q?/p>
在完成这些标准私有设|之后,应用E序q会提供其定刉|窗口,您可以通过标准U有讄H口中的 Other Privacy Settings 链接q行q一步的讄Q请参见?29 所C)?/p>
?29. 在标准私有设|对话框中的另一个私有设|链?/strong>
现在Q您已经回顾了用于集成您的应用程序的可用点,下面我们看一下如何ؓq些不同的集成点创徏您的应用E序的内宏V?/p>
![]() ![]() |
![]()
|
您需要提?Facebook 可以嵌入到其面中的内容Q但是您不能像在您自q|站上那P使用直接?HTML ?Javascript。Facebook 需要确保内容不包含M恶意?JavascriptQƈ且希望应用E序可能简单地?Facebook 环境中的信息包含在您的提交内容中?/p>
Facebook 对于q一问题的解x法就?FBMLQFaceBook 标记语言Q,一U当 Facebook 提交您的应用E序的内Ҏ所使用?XML 语言。您可以?Facebook 认ؓ是一个文本预处理器,像 XSLT 或?PHPQ它?FBML 内容转换?HTMLQ代替不同的 Facebook 标签下关于用h者环境的数据。ؓ了取代失ȝ Javascript 功能QFacebook 提供?FBJS 语言QFaceBook JavaScriptQ。ؓ了简化到 Facebook 数据库的复杂查询Qƈ且减所需的调用的数量QFacebook 提供?FQLQFaceBook 查询语言QSQL 的一个变体)。图 30 中描l了信息从您的应用程序服务器到用h览器的流E?/p>
?30. 从应用程序服务器到用h览器的信息通告的流E?/strong>
大多?FBML 标签在语法上?THML 标签都是一致的Q但?FBML q提供了许多行ؓ标签Q以及从 Facebook 数据库中提取信息q且包含在您的内容中的标{。您在W?2 部分中对相关内容做进一步的研究?/p>
至于 FBJSQFacebook JavascriptQ,它仅仅是做出某些修改后的 Javascript。Facebook 从语法上Ҏ常见?Javascript 代码q行了分析,q且在传递到览器之前做Z一些改变。它同样?DOM q行了修改,对于讉K和修改元素加入了限制。您在W?2 部分中看到更多关于这U改变的详细内容?/p>
Facebook q通过一?AJAX 对象提供了功能强大的 AJAX。所有的 AJAX h都通过 Facebook 的服务器被代理,从而您能够将 FBML 代码作ؓ一?AJAX h的结果返回。Facebook 对于 FBML 代码的处理同它对其他代码的处理一P在适当的位|(比如 <fb:name>
Q插?Facebook 数据Qƈ且您?AJAX 调用被返回一个对象,该对象能够通过一?DOM 元素?setInnerFBML()
函数讄元素?#8220;内部 FBML”。出于安全性的原因QFacebook q不支持“内部 HTML”Q但是一?setInnerXHTML()
函数正在试之中?/p>
![]() ![]() |
![]()
|
WebSphere Application Server ?Facebook 的服务器之间的通讯
我们的应用程序运行在 WebSphere 之下Q它必须?Facebook q行通讯Q而且 Facebook 也必d您的应用E序q行通讯。Facebook 同您?PHP 脚本之间的通讯被限制在d面h中,在那里用户可以进行某些活动。当用户q入您的应用E序的画布页?URL Ӟhttp://www.facebook.com/JakeTestAppQ,Facebook 代理q一h到您的远E服务器 URLQhttp://myserver.url/FacebookTestApp/index.phpQ,q且您的 index.php q回 FBML。类似地Q您?FBJS 代码发出一?AJAX hQ它通过同样的代理ƈ且向您的服务器发求?您的应用E序q需要同 Facebook q行通讯Q在一个请求期间或者是提取信息或者是发送信息。它通过 Facebook ?REST 接口完成q一操作Q这是一个将 API 暴露为您可以通过不同的请求参数进行特定调用的 URL ?HTTP 接口Qƈ且返?XML 或?JSON。您无需担心q些 HTTP 调用或者返回数据的l节Q这是因?Facebook 提供?PHP、Java ?Javascript 客户机程序库 —?REST 接口周围的封套处?HTTP h的徏造,q且返回数据整理ؓ在客hE序语言中可用的数据?/p>
![]() ![]() |
![]()
|
客户机程序库提供了一?Facebook 客户?API 对象Q它是一个将我们的方法调用{换ؓ?Facebook 服务器的h的一个代理对象。D例来_要获得当前用L朋友Q您只需要调用一?Facebook 对象上的函数卛_Q请参见列表 1 中所C)?/p>
列表 1. 通过 PHP 客户机程序库获得当前用户的朋?/strong>
$friends = $facebook->friends_get(); |
我们q可以将信息发送到 Facebook 中(对信息进行升U)。D例来_剖面盒同d面的工作方式是不同的(请参?剖面?/a> ?d面 节Q。您q不是等?Facebook 查询您的服务器以获得一位用L剖面盒的内容Q而是必须在希望改变时发出明确地内宏VFacebook 随后剖面盒内容存储在它的服务器上。这样做的意义在于,如果剖面盒内容不存储?Facebook 上面Q那?Facebook 在每次查看包含您的应用E序的用户剖面时讉K您的服务器,q且用户在讉K其他用户的剖面时p大量的时间。对于一个受Ƣ迎的应用程序来_q将D大量的服务器负蝲Qƈ且在加蝲剖面面时加长等待时间。ؓ了改变用户剖面上的您的应用程序的剖面盒的内容Q您只需要再ơ调用由 PHP 客户端程序库所提供?$facebook
对象上面的一个方法(请参见列?2 中所C)?/p>
列表 2. 在当前用L剖面面讄您的应用E序的剖面的内容
$facebook->profile_setFBML ('New profile box content', $user); |
每一ơ方法调用都?Facebook 发出一个明地h。随着您的应用E序变得愈加复杂Q您?PHP 代码也必d Facebook 查询来复杂的数据Qƈ且这些数据依赖于先前功能调用的结果。D例来_您可能希望取得当前用L册中的所有h的名字,q需要您首先调用 Facebook h所有的用户相册Q然后请求那些相册中的相片,然后h那些相片中的相片标签Q然后请求相片标{用户 —?大量的工作、大量的 Facebook 服务器请求、以及大量的 PHP 代码?/p>
![]() ![]() |
![]()
|
此外Q您可以使用单一?FQL 查询QFacebook 查询语言Q,它是 Facebook 提供的一U?SQL 的变体,用来直接查询数据库和核心应用E序的数据。FQL 只允许在 from
子句中出C个数据表Q但是允许在 select ?where 子句中用子查询Q所以下面的 FQL 查询所得到的结果同上面所描述的一_标签用户的名字)Q但是在一个单一的查询中Q我们的代码会更加明和易于dQ请参见列表 3 中所C)?/p>
列表 3. FQL CZ —?选择一个用L册中的所有标{L名字
select first_name from user where uid in (select subject from photo_tag where pid in (select pid from photo where aid in (select aid from album where owner = 563830447))) |
在列?3 中,563830447 是作者的 Facebook L。这一 FQL h返回一?XMLQƈ且作?Facebook REST 响应的一个实例(请参见列?4 中所C)?/p>
列表 4. FQL 查询响应
<?xml version="1.0" encoding="UTF-8"?> <fql_query_response xmlns="http://api.facebook.com/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" list="true"> <user> <first_name>Jake</first_name> </user> </fql_query_response> |
您可以对此进行检验,q且通过 FBML 片段q行实验。用的工具?Facebook 的开发器试控制収ͼhttp://developers.facebook.com/tools.php?api Q请参见?31 所C)?/p>
?31. Facebook API 试控制?/strong>
使用 FBML、FBJS、FQL ?Facebook 客户机程序库Q您可以开发出一个能够很好地被集成到环境之中Qƈ且能够提供强大功能的应用E序。现在,我们可以开始创建我们的应用E序了?/p>
![]() ![]() |
建类Q借书?nbsp; pȝ理?nbsp; 图书工作员