使用Java开发Facebook应用程式

原文作者:Daniel 原文连结:Tips for writing FaceBook applications in Java

这篇原文似乎已经找不到了,看起来Daniel已经从人间蒸发掉了一样,剩的只有简体翻译,虽然Facebook官方不再继续支援Java了,不过熟Java的ㄧ也不用灰心,应该还是会有出路的,ㄚ琪试着将简体文转成繁体来看,并且检视看看还能不能操作。

[adsense][/adsense]

当你想用Java写一Facebook的应用程式,你把在facebook的帐号中加入的程式开发模组,下载了相关的java函式库。忽然你发现不得不停下来:开发相关的入门介绍、样板程式和文件说明在哪儿?这样的挫败感令人愤怒,而最终导致你不得不放弃。

“我觉得缺乏良好的Java开发相关的说明文件是令人不安的” 。

但愿有人会尽快写一个不错的应用Java 开发Facebook应用的入门指南。也许只需要你给我些好吃的巧克力,我们就可以写些相关的介绍文件,老实说我们的确也解决了不少相关的问题。这里有一些技巧帮助你使用Java开始建立自己的 Facebook应用程式。 这并不是一个完整的入门指南,但它可以帮你在着手做时少走些弯路。

八个注意事项辅助你建构Java/Facebook应用程式

1.为了你的幸福和健康,建议你使用5.0或更高的JDK。

2.不用看Facebook Java程式套件中的例子,因为那些例子是针对Java桌面应用程式使用的。而通常你是需要写一个Web应用程式,这两种应用的区别还是很大的。 一开始,你需要一个Web应用服务容器,你可能会选择Tomcat,但我不会,这里面有另一个故事,我会找个合适的时间再告诉你。Facebook的网路应用有一个不常见的调用模式。大多数你的页面会被Facebook调用。用户请求一个Facebook的页面,页面中的主要内容会从你的伺服器中返回给用户。你系统的内容会融合到Facebook的页面里返回给用户。大多数情况下这些流程不需要你的干预就能很好的执行。但需要注意的是你伺服器端产生的页面中的Javascript是不能执行的,这就意味着普通的AJAX不再在Facebook中应用。如果你需要使用AJAX的技术实现Facebook 提供的 mock-ajax不能完成的功能,则需要通过Facebook的页面跳到你伺服器上的一般页面。

3.设定你在Facebook上的应用程式

不要忘了填写Facebook应用的设定档,你应该设置:

应用程式的回调网址。

应用程式的名字- 这个名字用来表示标识在Facebook的页面。(这些页面可以是用iframe嵌入到Facebook的导航页,也可以是用FBML标记的页面)。一但设定,比如http://apps.facebook.com/yourappname/yourpagename 这个页面就会从Facebok产生一个请求到你的伺服器 。对于新用户来说,这就是一个你的应用程式的欢迎页面,邀请用户来使用传播你的这个应用。

4.用Facebookrestclient

最重要的阶级,在用户端类别库中最重要的类别是facebookrestclient。这个类中包含一系列调用Facebook服务端的方法,并涵盖了大部分你需要的功能。可惜facebookrestclient不是个架构清晰的类别。几乎所有的请求,需要一个facebookrestclient 这是建造一个会话密钥 。用户登录后可以从CGI变数中获得会话的密钥。(参考 FacebookParam.SESSION_KEY.toString())没有登录的用户需要引导到一个登录页面。 试试以下方法:

// 创建一个无会话状态的FacebookRestClient

FacebookRestClient client = new FacebookRestClient ( 你的API密钥 , 你的加密密钥 ) ;

String token = client.authcreateToken () ;

String loginURL = “http : //www.facebook.com/login.php?v=1.0&apikey=&”+ YOUR APIKEY +“&auth_token =”+ token ;

// 这里转向到登录页面

// 登录后就会返回会话key

FacebookRestClient.auth_getSession() 以我的经验基本没用。他的作用是把一个无会话的client变成一个有会话的。我发现从CGI变数中获取会话要比试用这个方法简单。

当有一个会话key的FacebookRestClient,你可以调用这个类别提供的各种Facebook编辑方法。这些方法可以很方便与Facebook进行交换操作。但不幸的是这些方法返回的是未经处理的XML文档,这些文档后续的处理会比较麻烦。

比如 friends_get()返回的是

<document>

<friendsgetresponse>

<uid>1uid>

<uid>2uid>

<uid>3uid>

friendsgetresponse>

document>

你也许想封装一些提取资讯的方法,例如调用friends_get(),试试这个

Document d = client . friends_get () ;

NodeList userIDNodes = d . getElementsByTagName ( ” uid ” ) ;

int fcount = ids . getLength () ;

List < Integer > friends = new ArrayList < Integer > () ;

for ( int i = 0 ; i < fcount ; i ++ )

{ Node node = userIDNodes . item ( i ) ;

String idText = node . getTextContent () ;

Integer id = Integer . valueOf ( idText ) ;

friends . add ( id ) ; }

这样friends的列表里就填充好了用户的id。

5.servlet返回局部页面

当你生产在Facebook中的页面时,比如这样的一个位址http://apps.facebook.com/yourappname/yourpagename,你必须返回的一个HTML或FBML标记的页面片段,而不是一个完全的HTML页面。

6.学习FBML 。

FBML这是一套特有的Facebook标签。试用标签可以让你很方便的完成很多功能(比如显示用户的名称和图片)。

7.用户邀请好友

你想完成病毒式推广的邀请好友?Facebook最近修改了他的API(2007.11)。新版本主要改进了一个特殊的form,fb:form。具体的说明在这里:http://developers.facebook.com/docs/reference/fbml/request-form/

原来完成这功能的方法FacebookRestClient.notifications_sendRequest()已经不再使用了,如果你不慎调用将会得到一个异常。

8.用户档案资讯显示页面

要想将一些资讯放入用户的档案资讯页面,使用FacebookRestClient.profile_setFBML()。这个方法复写了你在应用里设定的默认资讯页面。当你设定了用户的个人档案的FBML页面,这些页面被流量时,Facebook会缓存这些页面资讯而不会即时更新。这样就使得用户资讯的动态更新会麻烦一些。当一个事件触发用户资讯改变时,你需要重新调用profile_setFBML()更新这些资讯。幸运的时既然你已经有一个登录的用户端可以做任何事情,所以这个用户端也可以任意设置你的用户资料的资料项目。

好了,就这些

我还是一个Facebookapi的初学者,如果你是专家,请留言斧正。

祝福你们在构建web2.0的路上一路顺风。