圈组消息更新
更新时间: 2024/03/15 15:19:11
NIM SDK 的QChatMessageService
接口提供圈组消息更新的方法,支持在发送消息后更新消息。
前提条件
- 已开通圈组功能。
- 已完成圈组初始化。
实现流程
API 调用时序
以下时序图可能因为网络问题而显示异常。如显示异常,一般刷新当前页面即可正常显示。
具体流程
本节仅对上图中标为橙色的流程进行说明,其他流程请参考相关文档。例如:
-
接收方在登录圈组前,注册
observeReceiveMessage
消息接收观察者和observeMessageUpdate
消息更新观察者,分别监听圈组消息接收和消息更新。示例代码如下:
注册消息接收观察者NIMClient.getService(QChatServiceObserver.class).observeReceiveMessage(new Observer<List<QChatMessage>>() { @Override public void onEvent(List<QChatMessage> qChatMessages) { //收到消息qChatMessages for (QChatMessage qChatMessage : qChatMessages) { //处理消息 } } }, true);
注册消息更新观察者NIMClient.getService(QChatServiceObserver.class).observeMessageUpdate(new Observer<QChatMessageUpdateEvent>() { @Override public void onEvent(QChatMessageUpdateEvent event) { //收到更新后的消息qChatMessage QChatMessage message = event.getMessage(); } }, true);
-
发送方在发送消息后,调用
updateMessage
方法更新消息。该方法入参结构
QChatUpdateMessageParam
中必须传入更新操作通用参数、消息所属的服务器的ID(serverId
)、消息所属的频道的 ID(channelId
)、消息发送时间以及消息服务端 ID。可以修改消息中的内容、自定义扩展和消息服务端状态,其中消息服务端状态值必须大于或等于 1000,否则会返回 414 错误码。
示例代码如下:
QChatUpdateParam updateParam = new QChatUpdateParam(); updateParam.setPostscript("附言"); updateParam.setExtension("操作扩展字段"); QChatUpdateMessageParam updateMessageParam = new QChatUpdateMessageParam(updateParam, 943445L, 885305L, currentMessage.getTime(), currentMessage.getMsgIdServer()); updateMessageParam.setBody("修改消息内容"); //修改消息自定义扩展 updateMessageParam.setExtension(getExtension()); //修改消息自定义服务端状态 updateMessageParam.setServerStatus(10001); NIMClient.getService(QChatMessageService.class).updateMessage(updateMessageParam) .setCallback(new RequestCallback<QChatUpdateMessageResult>() { @Override public void onSuccess(QChatUpdateMessageResult result) { //更新成功,返回更新后的消息 QChatMessage message = result.getMessage(); } @Override public void onFailed(int code) { //更新失败,返回错误code } @Override public void onException(Throwable exception) { //更新异常 } });
-
observeMessageUpdate
观察者回调函数触发,将更新后的消息投递至接收方。
相关信息
圈组各端 (Android、iOS、Windows 和 含圈组版 Web)监听消息更新、消息撤回和消息删除的方式略有差异,具体为:Android 将消息更新、消息撤回和消息删除三个事件进行区分;而其他端的消息撤回和消息删除事件,都并入消息更新事件,不进行区分。
各端的相关事件回调接口如下:
Android | iOS | Windows | 含圈组版 Web | |
---|---|---|---|---|
监听消息更新 | observeMessageUpdate |
onMessageUpdate: |
RegUpdatedCb |
messageUpdate |
监听消息撤回 | observeMessageRevoke |
|||
监听消息删除 | observeMessageDelete |
此文档是否对你有帮助?