消息重发与转发
更新时间: 2024/03/14 17:08:37
网易云信 NIM iOS SDK 的NIMChatManagerDelegate
协议和NIMChatManager
协议,分别提供监听消息转发/重发的方法和转发/重发消息的方法。
前提条件
已完成 SDK 初始化。
API使用限制
发送消息的接口(包括重发和转发)调用存在频控,一分钟内默认最多可调用 300 次。
重发消息
如因网络问题等原因导致消息发送失败时,可以调用重发消息的 API 重新发送。
API调用时序
实现流程
-
调用
addDelegate
方法添加委托,注册sendMessage:didCompleteWithError:
回调函数,监听“发送消息完成”事件。 -
消息发送失败之后,调用
resendMessage:error:
方法,重发消息。该方法本身包含的回调只表示当前这个函数调用完成,需要后续的发送消息完成回调(
sendMessage:didCompleteWithError:
)才能判断消息是否已经发送至 IM 服务端。示例代码如下:
//message为在发送回调中发送失败的message [[[NIMSDK sharedSDK] chatManager] resendMessage:message error:nil];
重发消息相关
V9.10.0 新增重发拉黑状态消息相关开关,默认不开启。开启后使用优化的发送逻辑。如有需要,请联系商务经理或技术支持进行开启。优化后的重发拉黑消息逻辑如下:
- 若重发拉黑状态消息时,用户还处于黑名单中,此时会产生一条新消息,发送端会收到 7101 错误码,接收端则无法接收到该消息。
处于拉黑状态时,无论重发多少次消息,产生的新消息都是同一条,即同一个 msgid。
- 若重发拉黑状态消息时,用户已不在黑名单中,此时产生一条新消息,发送端会收到 200 状态码,接收端正常接收到该消息。
转发消息
网易云信 NIM iOS SDK 支持转发通知消息以外所有其他消息类型。可将消息转发至目标会话,包括单聊会话和群聊会话(仅限高级群,不含超大群)。
API调用时序
- 转发不同类型消息的实现方法类似,本节仅以转发一条文本消息为例进行介绍。
- 下文仅对图中标为橙色的流程进行详细说明,其他 API 调用流程请参考相应的文档。
实现流程
-
转发接收方C 注册
onRecvMessages:
回调函数,监听消息接收。 -
转发方B 接收到发送方A 发送的消息,采用如下任意一种方式转发消息至 C。
方式 说明 直接转发 调用 forwardMessage:toSession:error:
方法直接转发消息。先构建消息再转发(推荐) - 调用
makeForwardMessageFromMessage:error:
方法,构造一条待转发的消息。 - 调用
sendForwardMessage:toSession:error:
方法将构建的待转发消息发送至转发接收方。
相较于直接转发消息,先构建再转发的方式,可以得到转发消息的进度回调和是否转发成功回调。 - 参数说明
参数 类型 说明 message
NIMMessage
需要转发的消息 session
NIMSession
需要转发到的会话 error
NSError 出错原因 - 示例代码
先构建消息再转发(推荐)NSError *error = nil; NIMMessage *nMsg = [[NIMSDK sharedSDK].chatManager makeForwardMessageFromMessage:message error:&error]; [[NIMSDK sharedSDK].chatManager sendForwardMessage:nMsg toSession:session error:&error];
直接转发// message 发送成功的message [[NIMSDK sharedSDK].chatManager forwardMessage:message toSession:session error:&error];
- 调用
-
SDK 触发
onRecvMessages:
回调函数,用户C 通过该回调接收转发消息。
此文档是否对你有帮助?