消息转发
更新时间: 2024/08/22 10:11:37
NetEase IM SDK(以下简称 NIM SDK)支持消息转发。
消息转发与发送不同类型(如文本、音频、视频等)的消息的方法一致,需要先构建待转发的消息(createForwardMessage
),再调用 sendMessage
方法将其发送至目标会话。
本文主要介绍转发单条消息场景的实现过程。
- 除了通知消息、提示消息、机器人消息以及音视频通话外,其他类型消息均支持转发给其他会话。
- 转发的消息必须是已发送成功的消息。
前提条件
在实现消息转发之前,请确保:
频控限制
发送消息(sendMessage
)方法一分钟内默认最多可调用 300 次。
转发单条消息
本节通过以下 API 时序图中用户A、B、C 的消息交互场景为例,介绍转发单条消息的实现流程。
转发不同类型消息的实现方法类似,本节仅以转发一条文本消息为例进行介绍。
API调用时序
实现流程
以下仅介绍主要步骤,登录等常见步骤省略,具体请参考登录 IM章节。
-
用户 B 和 C 注册消息监听器,监听消息接收回调事件。
Android/iOS/macOS/Windows
用户 B 和 C 调用
addMessageListener
方法注册消息监听器,监听消息接收回调事件onReceiveMessages
。示例代码:
Androidjava
V2NIMMessageService v2MessageService = NIMClient.getService(V2NIMMessageService.class); V2NIMMessageListener messageListener = new V2NIMMessageListener() { @Override public void onReceiveMessages(List<V2NIMMessage> messages) { } }; v2MessageService.addMessageListener(messageListener);
iOSobjective-c
[[[NIMSDK sharedSDK] v2MessageService] addMessageListener:listener];
macOS/Windowscpp
V2NIMMessageListener listener; listener.onReceiveMessages = [](nstd::vector<V2NIMMessage> messages) { // receive messages }; messageService.addMessageListener(listener);
Web/uni-app/小程序/Harmony
用户 B 和 C 调用
on("EventName")
方法注册消息监听器,监听消息接收回调事件onReceiveMessages
。示例代码:
Web/uni-app/小程序typescript
nim.V2NIMMessageService.on("onReceiveMessages", function (messages: V2NIMMessage[]) {});
Harmonytypescript
nim.messageService.on("onReceiveMessages", function (messages: V2NIMMessage[]) {})
-
用户 A 调用
createTextMessage
方法构造一条文本消息,然后调用sendMessage
方法发送给用户 B。用户 B 会通过回调接收到用户 A 发送的消息
V2NIMMessage
。示例代码:
Androidjava
V2NIMMessageService v2MessageService = NIMClient.getService(V2NIMMessageService.class); // 创建一条文本消息 V2NIMMessage v2Message = V2NIMMessageCreator.createTextMessage("xxx"); // 以单聊类型为例 String conversationId = V2NIMConversationIdUtil.conversationId("xxx", V2NIMConversationType.V2NIM_CONVERSATION_TYPE_P2P); // 发送消息 v2MessageService.sendMessage(v2Message, conversationId, sendMessageParams, new V2NIMSuccessCallback<V2NIMSendMessageResult>() { @Override public void onSuccess(V2NIMSendMessageResult v2NIMSendMessageResult) { // TODO: 发送成功 } }, new V2NIMFailureCallback() { @Override public void onFailure(V2NIMError error) { // TODO: 发送失败 } } );
iOSobjective-c
// 创建一条文本消息 V2NIMMessage *message = [V2NIMMessageCreator createTextMessage:@"v2 message"]; V2NIMSendMessageParams *params = [[V2NIMSendMessageParams alloc] init]; // 发送消息 [[[NIMSDK sharedSDK] v2MessageService] sendMessage:message conversationId:@"conversationId" params:params success:^(V2NIMSendMessageResult * _Nonull result) { // 发送成功回调 } failure:^(V2NIMError * _Nonnull error) { // 发送失败回调, error 包含错误原因 } }];
macOS/Windowscpp
// 以单聊类型为例 auto conversationId = V2NIMConversationIdUtil::p2pConversationId("target_account_id"); // 创建一条文本消息 auto message = V2NIMMessageCreator::createTextMessage("hello world"); auto params = V2NIMSendMessageParams(); // 发送消息 messageService.sendMessage( message, conversationId, params, [](V2NIMSendMessageResult result) { // send message succeeded }, [](V2NIMError error) { // send message failed, handle error });
Web/uni-app/小程序typescript
try { // 创建一条文本消息 const message: V2NIMMessage = nim.V2NIMMessageCreator.createTextMessage("hello"); // 发送消息 const res: V2NIMSendMessageResult = await nim.V2NIMMessageService.sendMessage(message, 'test1|1|test2'); // todo success } catch (err) { // todo error }
Harmonytypescript
try { // 创建一条文本消息 const message: V2NIMMessage = nim.messageCreator.createTextMessage("hello") // 发送消息 const res: V2NIMSendMessageResult = await nim.messageService.sendMessage(message, 'test1|1|test2') // todo Success } catch (err) { // todo error }
-
用户 B 调用
createForwardMessage
构建一条转发消息,调用时将message
参数设置为接收到的消息V2NIMMessage
。调用
createForwardMessage
方法成功后,会重新返回一个V2NIMMessage
(转发消息体)。示例代码:
Androidjava
// V2NIMMessage v2Message = ; // 被转发的消息 V2NIMMessage v2ForwardMessage = V2NIMMessageCreator.createForwardMessage(v2Message);
iOSobjective-c
V2NIMMessage *message = [V2NIMMessageCreator createForwardMessage:originalMessage];
macOS/Windowscpp
auto forwardMessage = V2NIMMessageCreator::createForwardMessage(message); if (!forwardMessage) { // create forward message failed }
Web/uni-app/小程序javascript
try { const newMessage = nim.V2NIMMessageCreator.createForwardMessage(message); } catch (err) { // todo: error }
Harmonyjavascript
try { const newMessage = nim.messageCreator.createForwardMessage(message) } catch(err) { // todo error }
-
用户 B 调用
sendMessage
方法,将转发消息发送给用户 C。参数说明:
Android参数名称 类型 是否必填 默认值 描述 message
V2NIMMessage
是 - 消息对象,通过调用 createForwardMessage
接口创建。如果为空或不存在则返回 191004 参数错误。conversationId
String 是 - 会话 ID,通过调用 V2NIMConversationIdUtil
的对应函数创建。
组成方式:发送者用户账号|会话类型(V2NIMConversationType)|接收者用户账号或群组 ID。此处的接收者需要设为用户 C。如果为空或不存在则返回 191004 参数错误。params
V2NIMSendMessageParams
否 null 消息发送配置参数,包括发送、推送、抄送、反垃圾等配置。 success
V2NIMSuccessCallback
是 - 消息发送成功回调,返回 V2NIMSendMessageResult
。failure
V2NIMFailureCallback
是 - 消息发送失败回调,返回错误码。 progress
V2NIMProgressCallback
否 null 附件上传进度回调,用于图片、语音、视频、文件类型消息。 iOS参数名称 类型 是否必填 默认值 描述 message
V2NIMMessage
是 - 消息对象,通过调用 createForwardMessage
接口创建。如果为空或不存在则返回 191004 参数错误。conversationId
NSString * 是 - 会话 ID,通过调用 V2NIMConversationIdUtil
的对应函数创建。
组成方式:发送者用户账号|会话类型(V2NIMConversationType)|接收者用户账号或群组 ID。此处的接收者需要设为用户 C。如果为空或不存在则返回 191004 参数错误。params
V2NIMSendMessageParams
否 null 消息发送配置参数,包括发送、推送、抄送、反垃圾等配置。 success
V2NIMSuccessCallback
是 - 消息发送成功回调,返回 V2NIMSendMessageResult
。failure
V2NIMFailureCallback
是 - 消息发送失败回调,返回错误码。 progress
V2NIMProgressCallback
否 null 附件上传进度回调,用于图片、语音、视频、文件类型消息。 macOS/Windows参数名称 类型 是否必填 默认值 描述 message
V2NIMMessage
是 - 消息对象,通过调用 createForwardMessage
接口创建。如果为空或不存在则返回 191004 参数错误。conversationId
nstd::string 是 - 会话 ID,通过调用 V2NIMConversationIdUtil
的对应函数创建。
组成方式:发送者用户账号|会话类型(V2NIMConversationType)|接收者用户账号或群组 ID。此处的接收者需要设为用户 C。如果为空或不存在则返回 191004 参数错误。params
V2NIMSendMessageParams
否 null 消息发送配置参数,包括发送、推送、抄送、反垃圾等配置。 success
V2NIMSuccessCallback
是 - 消息发送成功回调,返回 V2NIMSendMessageResult
。failure
V2NIMFailureCallback
是 - 消息发送失败回调,返回错误码。 progress
V2NIMProgressCallback
否 null 附件上传进度回调,用于图片、语音、视频、文件类型消息。 Web/uni-app/小程序参数名称 类型 是否必填 默认值 描述 message
V2NIMMessage
是 - 消息对象,通过调用 createForwardMessage
接口创建。如果为空或不存在则返回 191004 参数错误。conversationId
string 是 - 会话 ID,通过调用 V2NIMConversationIdUtil
的对应函数创建。
组成方式:发送者用户账号|会话类型(V2NIMConversationType)|接收者用户账号或群组 ID。此处的接收者需要设为用户 C。如果为空或不存在则返回 191004 参数错误。params
V2NIMSendMessageParams
否 null 消息发送配置参数,包括发送、推送、抄送、反垃圾等配置。 progress
V2NIMProgressCallback
否 null 附件上传进度回调,用于图片、语音、视频、文件类型消息。 Harmony参数名称 类型 是否必填 默认值 描述 message
V2NIMMessage
是 - 消息对象,通过调用 createForwardMessage
接口创建。如果为空或不存在则返回 191004 参数错误。conversationId
string 是 - 会话 ID,通过调用 V2NIMConversationIdUtil
的对应函数创建。
组成方式:发送者用户账号|会话类型(V2NIMConversationType)|接收者用户账号或群组 ID。此处的接收者需要设为用户 C。如果为空或不存在则返回 191004 参数错误。params
V2NIMSendMessageParams
否 null 消息发送配置参数,包括发送、推送、抄送、反垃圾等配置。 progress
V2NIMProgressCallback
否 null 附件上传进度回调,用于图片、语音、视频、文件类型消息。 示例代码:
Androidjava
V2NIMMessageService v2MessageService = NIMClient.getService(V2NIMMessageService.class); // V2NIMMessage v2Message = ; // 被转发的消息 V2NIMMessage v2ForwardMessage = V2NIMMessageCreator.createForwardMessage(v2Message); // 以单聊类型为例 String conversationId = V2NIMConversationIdUtil.conversationId("xxx", V2NIMConversationType.V2NIM_CONVERSATION_TYPE_P2P); // 发送消息 v2MessageService.sendMessage(v2Message, conversationId, sendMessageParams, new V2NIMSuccessCallback<V2NIMSendMessageResult>() { @Override public void onSuccess(V2NIMSendMessageResult v2NIMSendMessageResult) { // TODO: 发送成功 } }, new V2NIMFailureCallback() { @Override public void onFailure(V2NIMError error) { // TODO: 发送失败 } } );
iOSobjective-c
// 被转发的消息 V2NIMMessage *message = [V2NIMMessageCreator createForwardMessage:originalMessage]; V2NIMSendMessageParams *params = [[V2NIMSendMessageParams alloc] init]; // 发送消息 [[[NIMSDK sharedSDK] v2MessageService] sendMessage:message conversationId:@"conversationId" params:params success:^(V2NIMSendMessageResult * _Nonull result) { // 发送成功回调 } failure:^(V2NIMError * _Nonnull error) { // 发送失败回调, error 包含错误原因 } }];
macOS/Windowscpp
// 以单聊类型为例 auto conversationId = V2NIMConversationIdUtil::p2pConversationId("target_account_id"); // 被转发的消息 auto forwardMessage = V2NIMMessageCreator::createForwardMessage(message); auto params = V2NIMSendMessageParams(); // 发送消息 messageService.sendMessage( message, conversationId, params, [](V2NIMSendMessageResult result) { // send message succeeded }, [](V2NIMError error) { // send message failed, handle error });
Web/uni-app/小程序javascript
try { // 被转发的消息 const newMessage = nim.V2NIMMessageCreator.createForwardMessage(message); // 发送消息 const res = await nim.V2NIMMessageService.sendMessage(message, 'test1|1|test2'); // todo success } catch (err) { // todo error }
Harmonyjavascript
try { // 被转发的消息 const newMessage = nim.messageCreator.createForwardMessage(message) // 发送消息 const res = await nim.messageService.sendMessage(message, 'test1|1|test2'); // todo success } catch (err) { // todo error }
-
用户 C 会通过回调接收到用户 B 转发的消息。