OpenSocial ActionScript3 客户端开发包正式发布!

6 views
Skip to first unread message

吴伊自

unread,
Jun 30, 2009, 3:17:04 AM6/30/09
to OpenSocial 中文讨论组
在6月5日,一年一度的谷歌开发者盛会 Google Developer Day 在北京胜利落下帷幕。在此次盛会上, 谷歌北京
OpenSocial 团队正式向广大 ActionScript 开发人员开源发布了 OpenSocial 上的 AS3 客户端编程库。通过这个
库,开发者可以在 OpenSocial 容器环境中,调用原生的AS3应用接口来完成小应用的开发。希望这可以大大平缓 ActionScript
开发者的学习曲线并减低开发难度。

该库的主页地址是:http://code.google.com/p/opensocial-as3-client

该编程库其实是过去一年来不断发展和演进的结晶。从 OpenSocial 初期的0.6版本开始,它就开始了设计和开发工作。经过0.7和0.8版的
发展,它已经为一些早期试用者所使用,在被应用于产品原型的同时也获得了各方面的反馈意见。此次随着 OpenSocial 0.81 稳定版本在广大
容器的广泛部署,这个编程库的整体架构也趋于稳定。在完成了大部分的编码和测试工作后,我们决定依照 Apache 开源许可2.0版正式将它发布出
来。也欢迎整个 OpenSocial 和开源社区能够审核并贡献代码,让我们大家一起对它进行完善和改进。

在此次发布中,该编程库主要包括了以下几个部分:

1. 一个较完整的OpenSocial APIs stack,囊括了除批量发送外 OpenSocial 0.81 版本的所有编程接口
(APIs) 。关于具体的函数调用方法,请参考代码文档首页:
http://opensocial-as3-client.googlecode.com/svn/trunk/doc/index.html

2. 一个完整的事件驱动开发模型。早期试用者们的反馈意见指出,相较于在 JavaScript 中被广泛使用的回调函数注册与触发机制而言,基于事
件驱动的开发模型是 ActionScript3 下比较常见的开发方法。具体的例子可在代码中找到,这里简述其基本使用流程:

// 构造请求参数
var reqOptions:XXXXRequestOptions = new XXXXRequestOptions(...).;

// 初始化请求对象
var reqObj:XXXRequest = new XXXXRequest(
Feature.SOME_FEATURE, reqOptions);

// 注册事件处理句柄
reqObj.addEventListener(Event.EVENT_TYPE_1, handler_1);
reqObj.addEventListener(Event.EVENT_TYPE_2, handler_2);

// 发送
reqObj.send(client);

3. 一个完整的基于 FlexUnit 的测试框架及对核心数据结构部分的测试用例,以方便开放源代码方式的协作开发。

4. 两类例子,分别对应于Flash和Flex开发环境。下面撷取的是一个在 Flash 环境下获取用户资料的真实例子:

// 初始化Client
var client:JsWrapperClient = new JsWrapperClient();
client.addEventListener(
OpenSocialClientEvent.CLIENT_READY, onReady);
client.start();

// 初始化完成后,开始进行数据交互
function onReady(event:OpenSocialEvent):void {
// API类型1. 同步地获取OpenSocial运行环境信息
var helper:SyncHelper = new SyncHelper(client);
var domain:String = helper.getDomain();
var view:String = helper.getCurrentView();

// API类型2. 异步地获取OpenSocial远程数据信息
// 构造请求及参数
var req:AsyncDataRequest = new AsyncDataRequest(
// 请求类型
Feature.PEOPLE_GET,
// 构造参数
new PeopleRequestOptions()
.setUserId("@me")
.setGroupId("@self"));
// 注册事件处理句柄
req.addEventListener(
ResponseItemEvent.COMPLETE, fetchMeEventHandler);

// 通过Client发送请求
req.send(client);
}

// 数据获取事件处理句柄
private function fetchMeEventHandler(e:ResponseItemEvent):void {
var person:Person = e.response.getData();
// 显示该用户
drawPerson(person);
}

在库中有一个特殊的,也是非常重要的抽象类型 OpenSocialClient,所有的 OpenSocial 请求都由这里发出。在目前这个版本
中,我们定义了它的一个参考实现 JsWrapperClient ----它寄生于 OpenSocial 容器环境下,通过调用外层的原生
Javascript APIs 完成功能。

以上是对OpenSocial上的ActionScript3客户端编程库的一些综合性描述,它的详细架构请参见英文文档:
http://opensocial-as3-client.googlecode.com/svn/trunk/doc/index.html

在现有的功能之外,该库还提供了非常优秀的扩展性,主要包括以下方面:

服务器端数据获取模式的扩展。众所周知,OpenSocial 规范支持多种数据获取模式,其中既包括了浏览器客户端的 JavaScript 模式,
也包括了 RESTful / RPC 的服务器间交互模式。未来,规范还可能支持更多的社交类数据获取方法。通过继承并实现抽象化的数据获取渠道
OpenSocialClient 类,您可以自由添加所需要支持的数据获取方式。目前在库中我们已经包含了一个参考实现
JsWrapperClient ,并希望在不久的将来提供直接与服务器交互的参考实现 RestfulClient(名称待定)。这种抽象的好处是大
大降低了您作为用户从一个 Client 转移到另一个 Client 上的成本----除了对于 Client 初始化的少量修改外,您的后续处理代
码可以无差别的继续沿用。这也将有助于浏览器端 Flash 和桌面 AIR 项目间共享功能性代码。

不同 OpenSocial 容器间支持功能的扩展。在不同的 OpenSocial 平台上,彼此的功能提供上可能会有些许的差别,如有的平台提供了
用户视频的管理而另一些并没有。通过继承对应的 JsWrapperClient 或者是其他的Client,并改写 Feature Book 部
分,您就可以根据容器的不同量体裁衣,在自由删补所需要功能的同时保持整体架构的稳定。

不同 OpenSocial 容器间数据结构的扩展。同样的功能在不同的 OpenSocial 平台上也可能由于数据存储结构的不同而有所差别,如有
的平台Person对象中包含了视频域而另一些则没有。对于 JsWrapperClient ,它会调用JS接口自动地发掘数据存储结构中的属性。我
们也期望在其他类型的Client上也能以相应的技术来实现数据域的扩展自适应。

如果您关于该库有更多疑问或建议,或是想直接参与到项目的开发过程中来,请访问 http://code.google.com/p/opensocial-as3-client
与我们联系。

更多内容请参见 OpenSocial 官方博客:
http://blog.opensocial.org/2009/06/new-addition-to-opensocial-family.html

我们期待您的参与和反馈,谢谢!

Reply all
Reply to author
Forward
0 new messages