pushOfflineMessages
模式创建 Realtime ,需要开发者主动拉取未读消息。IMClient#getConversation
返回值类型定义的错误。messageType
和 messageField
类型定义的错误。Realtime#createIMClient
参数类型定义的错误。add
/ remove
更改为 invite
/ kick
,如果你使用了签名控制对话邀请、移除成员权限,需要更新对 action 的判断逻辑。支持使用点号语法获取 Conversation 的自定义属性:
conversation.get('attr.type');
messageType
和 messageField
类型定义的错误。ConversationQuery.or
与 ConversationQuery.and
支持对话组合查询。Cannot read property 'document' of undefined
异常的问题。为了保证兼容性,SDK 一直以来分发的都是 ECMAScript 5 版本的代码,并打包了所有需要的 Polyfills(比如 Promise)。
从这个版本起,SDK 将同时提供以最新版本 ECMAScript 为编译目标的版本。相比于以 ECMAScript 5 版本,最新 ECMAScript 版本的 SDK 拥有更小的体积与更好的运行时优化,适用于只需要兼容最新版本浏览器的使用场景。如果应用使用了 @babel/preset-env
或类似方案,也可以在转译时 include 最新 ECMAScript 版本的 SDK,由应用来决定要兼容的目标运行环境。
需要注意最新版本 ECMAScript 每年都会变,而该版本的目标即是提供与最新标准对齐的代码,因此由于引入了新版本 ECMASCript 特性导致不再支持某些非最新版本的运行环境将不被视为 Breaking change。当前 ECMAScript 的版本为 2020。
require('leancloud-realtime/es-latest')
来引入该版本的 SDK;dist/es-latest
目录下找到预编译的文件。这个版本中 SDK 新增了一个运行环境无关的版本,开发者可以在此基础上应用目标运行环境的 Adapters 来适配相应的运行平台。
/im
入口,这是一个运行环境无关的版本,需要配置 Adapters 后才能运行。可以通过以下方式引入该版本:const { Realtime, setAdapters } = require('leancloud-realtime/im');
| 原文件名 | 新文件名 |
| ----------------------------------------------- | ----------------------------------- |
| - | im.js(新) |
| realtime.js | im-node.js |
| realtime-browser.js
realtime-browser.min.js | im-browser.js
im-browser.min.js |
| realtime-weapp.js
realtime-weapp.min.js | im-weapp.js
im-weapp.min.js |
如果你使用了 CDN 或其他直接引用预编译版本的方式加载的 SDK,需要按照上面的对应关系更新文件名。
这个版本继续了对「更多运行环境支持」的探索,将 SDK 内置的多平台支持使用新的 Adapter
模式进行了重构。SDK 支持的运行平台、使用方法都没有变化。
setAdaptors
接口被重命名为 setAdapters
。作为正在进行的对「更多运行环境支持」探索的第一步,这个版本的 SDK 所以对平台提供的 API 的依赖被抽象为可替换的 Adapter
。开发者可以配置全部或一部分 Adapter
以支持包括小程序在内的各类平台。
setAdaptors
接口(已在 v5.0.0-rc.0 中重命名为 setAdapters
),支持配置自定义运行时。ConversationQuery#first
方法。Function
未定义的问题。offline
状态恢复到 online
状态时会立即开始尝试重连(之前会等待一秒)。Realtime
时必须通过 server
参数指定服务器地址。中国节点的应用必须要绑定自有域名后才能使用,这个改动是为让没有指定服务器地址时的异常更加明确。国际版应用不受影响。app-router.com
,中国节点应用不受影响。app-router.leancloud.cn
均不再使用。如果国际版应用在微信小程序等需要域名白名单的平台上运行,需要更新白名单配置,开发者可以访问应用的 LeanCloud 控制台获取最新的域名列表。Conversation#queryMessages
的一个错误的参数类型。Object.values
的运行环境会抛异常的问题。Realtime
的 server
参数现在允许指定协议了。 const { debug } = require('leancloud-realtime');
debug.enable();
debug.disable();
原有在浏览器中使用 localStorage,在 Node.js 中使用环境变量启用调试模式的方式仍然可用。
unique
参数的默认值修改为 true(之前是 false)。realtime-platform[.min].js
。如果你通过 CDN 或者其他直接引用文件的方式加载的 SDK,请调整对应的文件名。strict
模式。MESSAGE_UPDATE
与 MESSAGE_RECALL
事件现在会额外返回一个 reason
参数来指示修改、撤回的原因(如果有的话)。
region
参数不再使用的警告。在这个版本中,我们主要对话成员管理功能进行了一些调整。
ConversationMemberRole.OWNER
。现在对群主、管理员与成员的判断有了更一致的判断方法。Conversation#getAllMemberInfo
方法默认会利用缓存,因此开发者可以频繁的调用这个方法来获取最新的成员信息。Conversation#getAllMemberInfo
获取的成员信息中的角色全都是 MEMBER
的问题。ChatRoom
与 ServiceConversation
拥有成员管理相关的 API 的问题。EventEmitter
类无法接受 Event 枚举的问题。Realtime#createIMClient
返回 undefined
的问题。在这个版本的更新中我们主要做了以下几方面的事情:
name
属性用来进行异常的匹配,并为部分异常更新了更详细的 error.message
。Event
枚举来代替越来越长的事件名称字符串。我们还按照类型拆分了对话类,聊天室与服务号现在会显示为对应的类,并且有各自特有的 API。setData
了。我们还持续跟进了小程序 API 的更新,优化了 SDK 连接层的性能与稳定性。此外,SDK 现已支持微信小游戏。v4.0.0 是一个主版本更新,包含了一些不向前兼容的改动,具体的改动细节请参考 BREAKING CHANGES 部分的说明,你也可以参考 《v4.0 升级检查清单》进行升级。
v4.0.0 相比 v4.0.0-rc.0 没有改动。测试版本的更新日志参见《v4.0 pre releases changelog》。
AVMessage
接口原有的用来获取消息内容的 toJSON
方法现在改名为 getPayload
。内置的 Message
类及其子类均已更新,如果使用富文本消息插件(leancloud-realtime-plugin-typed-messages),需要更新插件至 v3.0.0 或以上版本。Message
类及其子类重新实现了 toJSON
方法用于获取该消息的有效信息。Conversation
类增加了 toJSON
方法用于获取该对话的有效信息。初始化 Realtime
现在需要 appKey
参数。
示例
const realtime = new Realtime({
appId: 'YOUR_APP_ID',
+ appKey: 'YOUR_APP_KEY',
});
</details>
现在所有异步 API 的异常都是以异步的方式抛出。我们还更新了 API 文档,标出了 API 的异步属性。
示例
// before
try {
conversation.send(message);
} catch (error) {
// handle `Connection unavailable` error
}
// after
conversation.add(members).catch(error => {
// handle `Connection unavailable` error
});
</details>
error.message
被更新为更详细的解释。这是一个不兼容的改动,考虑到开发者可能会对 error.message
进行字符串匹配。我们建议使用 error.code
或 error.name
进行异常匹配与处理。
请注意: 今后对 error.message
的改动将不被认为是不兼容的改动。
IMClient
#markAllAsRead
方法createConversation
的 options.attributes
参数'unreadmessages'
事件Conversation
attributes
属性#setAttributes
、#setAttribute
、#setName
与 #markAsRead
方法'receipt'
事件ConversationQuery
#withLastMessages
方法Message
needReceipt
与 transient
属性#setNeedReceipt
与 #setTransient
方法Conversation
与 ChatRoom
的 #add
与 #remove
方法现在不再返回当前的 Conversation 实例,而是返回一个包含部分成功与失败信息的 PartiallySuccess
对象。Realtime#createIMClient
方法现在支持使用一个已登录的 AV.User
登录 IM,详见 相关文档。Event
。SDK 派发的事件的名称是全小写风格的字符串。当事件的名称由多个单词组成时,全小写风格的命名会很难辩识(例如 unreadmessagescountupdate
)。SDK 现在提供了事件常量枚举 Event
,你可以使用 Event.UNREAD_MESSAGES_COUNT_UPDATE
来代替 unreadmessagescountupdate
了。Message#setMentionList
与 Message#mentionAll
方法用于指定消息提及的对话成员。Message#mentioned
属性判断当前用户是否被提及,通过 Message#mentionList
与 Message#mentionedAll
属性获取详细的信息。Conversation#unreadMessagesMentioned
属性指示当前用户是否在对话中被提及。该属性会在 UNREAD_MESSAGES_COUNT_UPDATE
事件发生时被更新,调用 Conversation#read
方法会重置该属性。ConversationMemberInfo
类用来存储对话成员的属性。相关的 API 有:
Conversation
与 ChatRoom
增加了 #getAllMemberInfo
与 #getMemberInfo
方法用于查询用户的角色信息。Conversation
与 ChatRoom
增加了 #updateMemberRole
方法用于设置用户的角色。ConversationMemberRole
枚举,包含了内置的 MANAGER
与 MEMBER
两种角色。Conversation
、ChatRoom
与 ServiceConversation
增加了 #blockMembers
、#unblockMembers
与 #queryBlockedMembers
方法。Conversation
、ChatRoom
与 ServiceConversation
增加了 #muteMembers
、#unmuteMembers
与 #queryMutedMembers
方法。Realtime#createIMClient
方法增加了指定黑名单的签名方法的参数 clientOptions.blacklistSignatureFactory
。BinaryMessage
,可以通过 ArrayBuffer
构造。Conversation#queryMessage
)现在支持按照从旧到新的方向查询,可以实现弹幕等需求。
direction
选项,其值为 MessageQueryDirection.NEW_TO_OLD
或 MessageQueryDirection.OLD_TO_NEW
。beforeTime
-> startTime
beforeMessageId
-> startMessageId
afterTime
-> endTime
afterMessageId
-> endMessageId
startClosed
与 endMessageId
选项用于指定查询区间的开闭。支持按照富媒体消息类型查询历史消息。Conversation#queryMessages
方法增加了 type
参数用于指定查询的消息的类型
示例
// 限定查询图片消息
conversation
.queryMessage({
type: ImageMessage.TYPE,
})
.then(console.log)
.catch(console.error);
</details>
Conversation
)ChatRoom
)ServiceConversation
)TemporaryConversation
)IMClient
提供了三种创建对话的方法(服务号不支持在客户端创建):
IMClient#createConversation
IMClient#createChatRoom
IMClient#createTemporaryConversation
IMClient
提供了三种查询对话的方法(临时对话没有查询的概念):
IMClient#getQuery
IMClient#getChatRoomQuery
IMClient#getServiceConversationQuery
ServiceConversation#subscribe
ServiceConversation#unsubscribe
Conversation
、ChatRoom
与 ServiceConversation
的属性现在会自动更新,并增加了 INFO_UPDATED
事件。IMClient
增加了 CONVERSATION_INFO_UPDATED
事件。INVITED
与 KICKED
事件,现在会在断线重连成功后收到。Realtime#createIMClient
方法的第二个参数 options
增加了用于单点登录的 tag
与 isReconnect
选项。原第三个参数 tag
已被废弃。console.log
Conversation 的问题。IMClient#close
方法会抛异常的问题。