插入消息
更新时间: 2025/07/17 10:18:53
网易云信即时通讯 SDK(NetEase IM SDK,简称 NIM SDK)支持插入消息并更新插入的消息。
功能描述
插入消息只会将消息插入本地数据库,不会发送到服务端。
当有业务场景(例如本地提示类消息的 UI 展示)需要插入一条消息至本地数据库内而不发出时,可以参考本文实现。比如,向群里插入一条 群创建成功 的提示消息等场景。
您也可以对已插入的本地消息进行更新。
支持平台
本文内容适用的开发平台或框架如下表所示,涉及的接口请参考下文 相关接口 章节:
安卓 | iOS | macOS/Windows | Web/uni-app/小程序 | Node.js/Electron | 鸿蒙 | Flutter |
---|---|---|---|---|---|---|
✔️️️️ | ✔️️️️ | ✔️️️️ | ✔️️️️ | ✔️️️️ | ✔️️️️ | ✔️️️️ |
前提条件
在开始消息收发功能开发前,请确保:
插入本地消息
-
接收方 注册消息监听器,监听消息接收回调事件。
安卓接收方调用
addMessageListener
方法注册消息监听器,监听消息接收回调事件onReceiveMessages
。Java
V2NIMMessageService v2MessageService = NIMClient.getService(V2NIMMessageService.class); V2NIMMessageListener messageListener = new V2NIMMessageListener() { @Override public void onReceiveMessages(List<V2NIMMessage> messages) { } }; v2MessageService.addMessageListener(messageListener);
如需移除消息监听器,可调用
removeMessageListener
。Java
V2NIMMessageService v2MessageService = NIMClient.getService(V2NIMMessageService.class); v2MessageService.removeMessageListener(messageListener);
iOS接收方调用
addMessageListener
方法注册消息监听器,监听消息接收回调事件onReceiveMessages
。Objective-C
[[[NIMSDK sharedSDK] v2MessageService] addMessageListener:listener];
如需移除消息监听器,可调用
removeMessageListener
。Objective-C
[[[NIMSDK sharedSDK] v2MessageService] removeMessageListener:listener];
macOS/Windows接收方调用
addMessageListener
方法注册消息监听器,监听消息接收回调事件onReceiveMessages
。C++
V2NIMMessageListener listener; listener.onReceiveMessages = [](nstd::vector<V2NIMMessage> messages) { // receive messages }; messageService.addMessageListener(listener);
如需移除消息监听器,可调用
removeMessageListener
。C++
messageService.removeMessageListener(listener);
Web/uni-app/小程序调用
on("EventName")
方法注册消息监听器,监听消息接收回调事件onReceiveMessages
。TypeScript
nim.V2NIMMessageService.on("onReceiveMessages", function (messages: V2NIMMessage[]) {})
如需移除消息相关监听器,可调用
off("EventName")
。TypeScript
nim.V2NIMMessageService.off("onReceiveMessages", function (messages: V2NIMMessage[]) {})
Node.js/Electron调用
on("EventName")
方法注册消息监听器,监听消息接收回调事件onReceiveMessages
。TypeScript
v2.messageService.on("receiveMessages", function (messages: V2NIMMessage[]) {})
如需移除消息相关监听器,可调用
off("EventName")
。TypeScript
v2.messageService.off("receiveMessages", function (messages: V2NIMMessage[]) {})
鸿蒙调用
on("EventName")
方法注册消息监听器,监听消息接收回调事件onReceiveMessages
。TypeScript
nim.messageService.on("onReceiveMessages", function (messages: V2NIMMessage[]) {})
如需移除消息相关监听器,可调用
off("EventName")
。TypeScript
nim.messageService.off("onReceiveMessages", function (messages: V2NIMMessage[]) {})
-
调用
createXXXMessage
方法,构建一条消息。 -
调用
insertMessageToLocal
方法,向本地数据库插入一条已构建的消息。插入消息成功后,本端会收到发送消息状态回调onSendMessage
并通知 UI 界面更新。- 如果为单聊场景,可以插入一条发送或接收的消息。
- 如果为群聊场景,可以插入一条任意群成员的消息。
以文本消息为例:
安卓Java
V2NIMMessageService v2MessageService = NIMClient.getService(V2NIMMessageService.class); // 构建被插入的消息 V2NIMMessage v2NIMMessage = V2NIMMessageCreator.createTextMessage("xxx"); V2NIMConversationType conversationType = V2NIMConversationType.V2NIM_CONVERSATION_TYPE_P2P; String conversationId = V2NIMConversationIdUtil.conversationId("xxx", conversationType); v2MessageService.insertMessageToLocal(v2NIMMessage, conversationId, "xxx", 0, new V2NIMSuccessCallback<NIMMessage>() { @Override public void onSuccess(NIMMessage nimMessage) { } }, new V2NIMFailureCallback() { @Override public void onFailure(V2NIMError error) { } });
iOSObjective-C
[[[NIMSDK sharedSDK] v2MessageService] insertMessageToLocal:message conversationId:@"conversaionId" senderId:@"senderId" createTime:1698809881 success:^(V2NIMMessage * _Nonnull result) { // result 插入消息成功 } failure:^(V2NIMError * _Nonnull error) { // error 包含错误原因 }];
macOS/WindowsC++
auto conversationId = V2NIMConversationIdUtil::p2pConversationId("target_account_id"); auto message = V2NIMMessageCreator::createTextMessage("hello world"); messageService.insertMessageToLocal( message, conversationId, "target_account_id", 0, [](V2NIMMessage message) { // Insert local message succeeded }, [](V2NIMError error) { // Insert local message failed, handle error });
Web/uni-app/小程序因平台属性,暂不支持。
Node.js/ElectronTypeScript
const message = await v2.messageService.insertMessageToLocal(message, conversationId, senderId, createTime)
鸿蒙TypeScript
const messageResult:V2NIMMessage = await nim.messageService.insertMessageToLocal(message, conversationId)
FlutterDart
await NimCore.instance.messageService.insertMessageToLocal(message, conversationId, senderId, createTime);
-
(可选)如需要更新本地插入的消息,可调用
updateLocalMessage
方法实现。仅更新本地插入的消息,如需要更新云端消息,请调用
modifyMessage
方法。
Java// 假设已有一个本地消息对象(serverId为0的消息)
V2NIMMessage localMessage = getLocalMessage(); // 获取本地消息的方法
// 构建更新参数
V2NIMUpdateLocalMessageParams params = V2NIMUpdateLocalMessageParams.V2NIMUpdateLocalMessageParamsBuilder
.builder()
.withText("更新后的消息内容")
.withSubType(1)
.withLocalExtension("{\"updated\":true,\"timestamp\":" + System.currentTimeMillis() + "}")
.withSendingState(V2NIMMessageSendingState.V2NIM_MESSAGE_SENDING_STATE_SUCCEEDED)
.build();
// 调用接口
NIMClient.getService(V2NIMMessageService.class).updateLocalMessage(localMessage, params,
new V2NIMSuccessCallback<V2NIMMessage>() {
@Override
public void onSuccess(V2NIMMessage updatedMessage) {
System.out.println("Update local message success");
System.out.println("Updated message text: " + updatedMessage.getText());
System.out.println("Updated message ID: " + updatedMessage.getMessageClientId());
}
},
new V2NIMFailureCallback() {
@Override
public void onFailure(V2NIMError error) {
System.out.println("Update local message failed, code: " + error.getCode() +
", message: " + error.getDesc());
}
}
);
C++V2NIMMessage message;
//...
V2NIMUpdateLocalMessageParams params;
params.text = "New text";
messageService.updateLocalMessage(
message,
params,
[](V2NIMMessage message) {
// update local message succeeded
},
[](V2NIMError error) {
// update local message failed, handle error
});
因平台属性,暂不支持。
TypeScriptconst message = await v2.messageService.updateLocalMessage(message, {
text: 'Hello NTES IM'
TypeScript// prepare a to-be-updated message
const updatedLocalMessage: V2NIMMessage = await nim.messageService.updateLocalMessage(this.msg, {
text: 'updated message text',
subType: 199,
attachment: {
raw: 'raw',
},
localExtension: 'localExtension',
sendingState: V2NIMMessageSendingState.V2NIM_MESSAGE_SENDING_STATE_FAILED,
})
dartNimCore.instance.messageService.updateLocalMessage(message, params).then((result) {
});
相关接口
API | 说明 |
---|---|
addMessageListener |
注册消息相关监听器 |
removeMessageListener |
取消注册消息相关监听器 |
createXXXMessage |
消息构建,包括创建一条文本/图片/语音/视频/文件/地理/提示/自定义消息 |
insertMessageToLocal |
插入本地消息 |
updateLocalMessage |
更新本地消息 |
API | 说明 |
---|---|
on("EventName") |
注册消息相关监听器 |
off("EventName") |
取消注册消息相关监听器 |
createXXXMessage |
消息构建,包括创建一条文本/图片/语音/视频/文件/地理/提示/自定义消息 |
insertMessageToLocal |
插入本地消息 |
updateLocalMessage |
更新本地消息 |
API | 说明 |
---|---|
listen |
注册消息相关监听器 |
cancel |
取消注册消息相关监听器 |
createXXXMessage |
消息构建,包括创建一条文本/图片/语音/视频/文件/地理/提示/自定义消息 |
insertMessageToLocal |
插入本地消息 |
updateLocalMessage |
更新本地消息 |