插入消息

更新时间: 2025/07/17 10:18:53

网易云信即时通讯 SDK(NetEase IM SDK,简称 NIM SDK)支持插入消息并更新插入的消息。

功能描述

插入消息只会将消息插入本地数据库,不会发送到服务端。

当有业务场景(例如本地提示类消息的 UI 展示)需要插入一条消息至本地数据库内而不发出时,可以参考本文实现。比如,向群里插入一条 群创建成功 的提示消息等场景。

您也可以对已插入的本地消息进行更新。

支持平台

本文内容适用的开发平台或框架如下表所示,涉及的接口请参考下文 相关接口 章节:

安卓 iOS macOS/Windows Web/uni-app/小程序 Node.js/Electron 鸿蒙 Flutter
✔️️️️ ✔️️️️ ✔️️️️ ✔️️️️ ✔️️️️ ✔️️️️ ✔️️️️

前提条件

在开始消息收发功能开发前,请确保:

插入本地消息

  1. 接收方 注册消息监听器,监听消息接收回调事件。

    安卓

    接收方调用 addMessageListener 方法注册消息监听器,监听消息接收回调事件 onReceiveMessages

    JavaV2NIMMessageService v2MessageService = NIMClient.getService(V2NIMMessageService.class);
    
    V2NIMMessageListener messageListener = new V2NIMMessageListener() {
    
        @Override
        public void onReceiveMessages(List<V2NIMMessage> messages) {
    
        }
    };
    v2MessageService.addMessageListener(messageListener);
    

    如需移除消息监听器,可调用 removeMessageListener

    JavaV2NIMMessageService 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

    TypeScriptnim.V2NIMMessageService.on("onReceiveMessages", function (messages: V2NIMMessage[]) {})
    

    如需移除消息相关监听器,可调用 off("EventName")

    TypeScriptnim.V2NIMMessageService.off("onReceiveMessages", function (messages: V2NIMMessage[]) {})
    
    Node.js/Electron

    调用 on("EventName") 方法注册消息监听器,监听消息接收回调事件 onReceiveMessages

    TypeScriptv2.messageService.on("receiveMessages", function (messages: V2NIMMessage[]) {})
    

    如需移除消息相关监听器,可调用 off("EventName")

    TypeScriptv2.messageService.off("receiveMessages", function (messages: V2NIMMessage[]) {})
    
    鸿蒙

    调用 on("EventName") 方法注册消息监听器,监听消息接收回调事件 onReceiveMessages

    TypeScriptnim.messageService.on("onReceiveMessages", function (messages: V2NIMMessage[]) {})
    

    如需移除消息相关监听器,可调用 off("EventName")

    TypeScriptnim.messageService.off("onReceiveMessages", function (messages: V2NIMMessage[]) {})
    
    Flutter

    调用 listen 方法注册消息监听器,监听消息接收回调事件 onReceiveMessages

    Dartsubsriptions.add(
        NimCore.instance.messageService.onReceiveMessages.listen((event) {
        //do something
        }));
    

    如需移除消息相关监听器,可调用 cancel

    Dartsubsriptions.forEach((subsription) {
    subsription.cancel();
    });
    
  2. 调用 createXXXMessage 方法,构建一条消息。

  3. 调用 insertMessageToLocal 方法,向本地数据库插入一条已构建的消息。插入消息成功后,本端会收到发送消息状态回调 onSendMessage 并通知 UI 界面更新。

    • 如果为单聊场景,可以插入一条发送或接收的消息。
    • 如果为群聊场景,可以插入一条任意群成员的消息。

    以文本消息为例:

    安卓
    JavaV2NIMMessageService 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) {
    
                }
            });
    
    iOS
    Objective-C[[[NIMSDK sharedSDK] v2MessageService] insertMessageToLocal:message
                                            conversationId:@"conversaionId"
                                                    senderId:@"senderId"
                                                createTime:1698809881
                                                    success:^(V2NIMMessage * _Nonnull result) {
        // result 插入消息成功
    } failure:^(V2NIMError * _Nonnull error) {
        // error 包含错误原因
    }];
    
    macOS/Windows
    C++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/Electron
    TypeScriptconst message = await v2.messageService.insertMessageToLocal(message, conversationId, senderId, createTime)
    
    鸿蒙
    TypeScriptconst messageResult:V2NIMMessage = await nim.messageService.insertMessageToLocal(message, conversationId)
    
    Flutter
    Dartawait NimCore.instance.messageService.insertMessageToLocal(message, conversationId, senderId, createTime);
    
  4. (可选)如需要更新本地插入的消息,可调用 updateLocalMessage 方法实现。

    仅更新本地插入的消息,如需要更新云端消息,请调用 modifyMessage 方法。

Android
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());
        }
    }
);
macOS/Windows
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
    });
Web/uni-app/小程序

因平台属性,暂不支持。

Node.js/Electron
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,
})
Flutter
dartNimCore.instance.messageService.updateLocalMessage(message, params).then((result) {
      
});

相关接口

安卓/iOS/macOS/Windows
API 说明
addMessageListener 注册消息相关监听器
removeMessageListener 取消注册消息相关监听器
createXXXMessage 消息构建,包括创建一条文本/图片/语音/视频/文件/地理/提示/自定义消息
insertMessageToLocal 插入本地消息
updateLocalMessage 更新本地消息
Web/uni-app/小程序/Node.js/Electron/鸿蒙
API 说明
on("EventName") 注册消息相关监听器
off("EventName") 取消注册消息相关监听器
createXXXMessage 消息构建,包括创建一条文本/图片/语音/视频/文件/地理/提示/自定义消息
insertMessageToLocal 插入本地消息
updateLocalMessage 更新本地消息
Flutter
API 说明
listen 注册消息相关监听器
cancel 取消注册消息相关监听器
createXXXMessage 消息构建,包括创建一条文本/图片/语音/视频/文件/地理/提示/自定义消息
insertMessageToLocal 插入本地消息
updateLocalMessage 更新本地消息
此文档是否对你有帮助?
有帮助
去反馈
  • 功能描述
  • 支持平台
  • 前提条件
  • 插入本地消息
  • 相关接口