【iOS开发】如何使用融云的消息扩展

225 阅读2分钟

【iOS开发】如何使用融云的消息扩展

从 【4.0.3 】版本开始,融云新增了消息扩展功能,文档如下: docs.rongcloud.cn/v4/views/im…

总结文档中的几个重点:

  • 4.0.3之前的版本无法使用。
  • 消息扩展是RCMessage类的属性,也就是说自定义消息也可以使用。
  • 单条消息只能设置300个kv,(某些场景不可用,比如在群里发400个人可领的红包)。
  • 仅支持单聊、群聊。
  • key和value都是字符串类型,并且key不能是中文,否则会报错INVALID_PARAMETER。
  • 用IMKit的UI发送消息时需要拦截一下,设置消息扩展开关。

使用步骤:

  1. 消息的发送端必须给需要消息扩展的消息开开关,没有全局设置,只能单条消息设置。分以下两种情况:
  • 如果使用的是IMKit提供的UI发送消息,或者使用RCConversationViewController中的sendMessage和sendMediaMessage方法发送消息,都会触发下面回调:
/*!
 准备发送消息的回调

 @param messageContent 消息内容

 @return 修改后的消息内容

 @discussion 此回调在消息准备向外发送时会回调,您可以在此回调中对消息内容进行过滤和修改等操作。
 如果此回调的返回值不为nil,SDK会对外发送返回的消息内容。
 */
- (RCMessageContent *)willSendMessage:(RCMessageContent *)messageContent;

在回调中判断如果是需要扩展的消息,就根据messageContent,自己构造一个RCMessage对象,并设置好canIncludeExpansion和expansionDic。

RCMessage *message = [[RCMessage alloc] initWithType:self.conversationType targetId:self.targetId direction:MessageDirection_SEND messageId:0 content:messageContent];
message.canIncludeExpansion = YES;
message.expansionDic = dict;

再调用RCIM中对应的send方法将消息发送出去,并且在准备发送消息的回调中return nil。

  • 如果是自己调用RCIM和RCIMClient接口发的消息,用RCMessageContent类的对象构造一个RCMessage对象,然后设置canIncludeExpansion和expansionDic再调用RCIM中对应的send方法将消息发送出去即可。
  1. 更新和删除扩展的操作可以参考官方文档。
  2. 想要实时捕获消息扩展的更改和删除,就需要设置回调,在回调中更新UI。设置回调可参考官方文档。