#content .entry-content h3 {color:#2b2b2b; font-weight:700;} #content .entry-content ul {margin-top:-1.5em;} .hanging {margin-left:-.5em;}
今天我们高兴地宣布 LeanCloud 下一代 JavaScript 实时通讯 SDK 的 3.0 beta 版本发布了!我们不仅为这一新版本(以下简称 v3)带来了性能提升,还加入了很多令人激动的新功能和改进,包括单点登录、未读消息通知、按条件查询对话、自动更新的对话和消息状态、自定义消息类型、更好的断线重连机制,以及重新设计的 API 等等。
在 v3 中我们改进的重点是 SDK 的易用性,为此我们设计了全新的 API。除了一些细小的命名与特性的区别,JavaScript SDK v3 的 API 与其他平台 SDK 的 API 已经统一。随着平台差异性的减少,开发者在为各平台应用设计与实现阶段所投入的工作量也会降低。
相较于 v2,v3 API 对易用性的改进体现在以下几个方面:
v2 中封装了各种操作指令与事件,但是在真实的项目中,你仍然需要额外维护一些状态,这些状态包括了:
v3 中这些状态都会由 SDK 自动更新。这将大大简化业务逻辑的代码,比如当你使用类 MV* 框架时,你可以直接将这些实例与 View 层绑定,就像下面这个使用 Angular 展示消息列表的例子一样:
<ul class="list-group">
<li class="list-group-item" ng-repeat="conversation in conversations">
<span class="badge">{{conversation.unreadMessagesCount}}</span>
<h4 class="list-group-item-heading">{{conversation.name}}</h4>
<p class="list-group-item-text">{{conversation.lastMessageAt | date:'medium'}}</p>
</li>
</ul>Live demo: http://jsplay.avosapps.com/fuk/embed?html,js,output
所有的异步 API 将返回 Promise 实例。相比于 v2 中回调的方式,Promise 将会避免回调嵌套过深的问题,同时解决了 v2 异步操作异常被 SDK 隐藏的问题。
// 使用 Promise 以链式方法登录、创建会话、发送消息
realtime
.createIMClient('three-bodies')
.then(tom => tom.createConversation({ member: ['the-earth'] }))
.then(conversation => conversation.send(new TextMessage('不要回答!'))
.then(message => { /* 成功 */ })
.catch(error => { /* 处理异常 */ });v3 中的事件 API 使用的依然是 Node.js 中 EventEmitter 的设计。与 v2 中所有事件都在 RealtimeObject 上派发不同,v3 中不同类型的事件会在不同的层面派发:
Realtime 实例上派发。IMClient 实例上派发。Conversation 实例上派发,同时也会在其隶属的 IMClient 实例上派发。详细的事件列表与描述,请参阅 API 文档 的 Events 部分。
自定义一个消息类型从来没有像现在这么简单:
@AV.messageType(3)
@AV.messageField('foo')
class CustomMessage extends AV.TypedMessage {
constructor(foo) {
super();
this.foo = foo;
}
}Live demo: http://jsplay.avosapps.com/xor/embed?js,console
当然,这个例子中用到了继承与装饰器,你还需要 TypeScript 或者 Babel 才能运行。这里还有个 ES5 的例子。
同时,基于 LeanCloud 存储服务,SDK 还提供了常见的富媒体消息类型(文件、图片、视频、音频、位置)。为了避免实时通讯 SDK 与存储 SDK 的耦合,这些富媒体消息类型是一个独立发布的插件,关于富媒体消息的详细内容请参阅《JavaScript 实时通信开发指南 - 富媒体消息》。
JavaScript 的 API 与其他平台 SDK 的 API 的统一意味着以下功能已得到支持:
SDK 的连接层也被重新设计,断线重连机制变得更加可靠,存在于 v2 中的 crash 与漏报已被消除。
除了 disconnect 与 reconnect ,v3 中增加了两个新事件 schedule 与 retry ,通过它们你就可以了解到 SDK 在断线重连的过程中正在做什么,进而向用户给出更友好的提示。关于断线重连机制的细节请参阅《JavaScript 实时通信开发指南 - 网络状态响应》。
v3 还包含了一些底层上的改进:
v3 API 不兼容 v2。对于正在使用 v2 的用户,尽管 v2 中所有的 API 在 v3 中有对应的实现(参见《JavaScript 实时通信 SDK v3 迁移指南》),我们仍然需要提醒,迁移到 v3 意味着一定的迁移成本。
此外,必须指出的是,v3 去掉了对 IE9 及以前版本的支持,如果需要兼容这部分运行环境,请继续使用 v2。在 v3 正式发布后,v2 依然会得到至少 6 个月的安全更新。
详细的 SDK 使用指南,请参阅《 JavaScript 实时通讯开发指南》。在使用过程中有任何问题与建议,欢迎通过我们的 论坛 与 工单 进行反馈。