跳到主要内容

扩展消息

消息扩展功能可为消息对象(RCMessage)增加基于 Key/Value 的状态标识。消息的扩展信息可在发送前、后设置或更新,可用于实现消息评论、礼物领取、订单状态变化等业务需求。

提示
  • 一条消息是否可携带或可设置扩展信息,由发送消息时 RCMessage 的可扩展(canIncludeExpansion)属性决定,该属性必须在发送前设置,发送后无法修改。
  • 单条消息单次最多可设置 20 个扩展信息 KV 对,总计不可超过 300 个扩展信息 KV 对。在并发情况下如出现设置超过 300 个的情况,超出部分会被丢弃。
  • 如已开通历史消息云存储功能,从服务端获取的历史消息也会携带已设置的扩展信息。
  • 每次设置消息扩展将会产生内置通知消息,频繁设置扩展会产生大量消息。

监听消息处理

您可以通过设置 setRCUltraGroupMessageChangeDelegate 代理来监听远端用户对消息扩展的修改操作:

  1. 设置 setRCUltraGroupMessageChangeDelegate: 代理:
Objective C
[[RCChannelClient sharedChannelManager] setRCUltraGroupMessageChangeDelegate:self];
  1. 实现 onUltraGroupMessageExpansionUpdated: 消息扩展变更代理方法:
Objective C

/*!
消息扩展更新,删除

@param messages 消息集合
*/
- (void)onUltraGroupMessageExpansionUpdated:(NSArray<RCMessage*>*)messages {

}

发送消息前设置消息扩展信息

您可以构建新消息后,设置 RCMessagecanIncludeExpansion 属性打开或关闭某条消息的可扩展属性。

提示
  • 必须在发送消息前设置 canIncludeExpansion 属性。

示例代码

Objective C
RCTextMessage *txt = [RCTextMessage messageWithContent:text];

RCMessage *msg = [[RCMessage alloc] initWithType:ConversationType_ULTRAGROUP targetId:self.targetId direction:(MessageDirection_SEND) messageId:-1 content:txt];
msg.canIncludeExpansion = YES;
msg.expansionDic = @{@"key1":@"value1",@"key2":@"value2"};

[[RCIMClient sharedRCIMClient] sendMessage:msg pushContent:nil pushData:nil successBlock:^(RCMessage *successMessage) {

} errorBlock:^(RCErrorCode nErrorCode, RCMessage *errorMessage) {

}];

更新消息扩展信息

您可以通过 updateUltraGroupMessageExpansion: 方法更新消息扩展信息,仅支持更新已打开可扩展属性的消息。更新消息扩展信息后,更新发起者应在成功回调里处理 UI 数据刷新,会话对端可通过消息扩展监听器收到更新的数据。

接口原型

Objective C
//更新消息扩展
- (void)updateUltraGroupMessageExpansion:(NSString *)messageUId
expansionDic:(NSDictionary<NSString *, NSString *> *)expansionDic
success:(void (^)(void))successBlock
error:(void (^)(RCErrorCode status))errorBlock

参数说明

参数类型说明
expansionDicNSDictionary要更新的消息扩展信息键值对。
  • Key 支持大小写英文字母、数字、 特殊字符+ = - _ 的组合方式,不支持汉字。最大 32 个字符。
  • (SDK < 5.2.0)Value 最大 64 个字符
  • (SDK ≧ 5.2.0)Value 最大 4096 个字符
messageUIdNSString消息 messageUId。
successBlockBlock成功的回调。
errorBlockBlock失败的回调。status 包含失败的错误码 [RCErrorCode]

示例代码

Objective C
[[RCChannelClient sharedChannelManager] updateUltraGroupMessageExpansion:message.messageUId expansionDic:dic success:^{

} error:^(RCErrorCode status) {

}];

删除消息扩展信息

您可以在消息发送后调用 removeUltraGroupMessageExpansion: 方法删除消息扩展信息中特定的键值对,仅支持删除已打开可扩展属性的消息中的扩展信息。删除消息扩展信息后,您应在成功回调里处理删除后的 UI 数据刷新,会话对端可通过消息扩展监听器收到通知。

接口原型

Objective C
//删除消息扩展
- (void)removeUltraGroupMessageExpansion:(NSString *)messageUId
keyArray:(NSArray *)keyArray
success:(void (^)(void))successBlock
error:(void (^)(RCErrorCode status))errorBlock

参数说明

参数类型说明
keyArrayNSArray消息扩展信息中待删除的 key 的列表。
messageUIdNSString消息 messageUId。
successBlockBlock成功的回调。
errorBlockBlock失败的回调。status 包含失败的错误码 [RCErrorCode]。

示例代码

Objective C
[[RCChannelClient sharedChannelManager] removeUltraGroupMessageExpansion:keyArray messageUId:messageUId success:^{

} error:^(RCErrorCode status) {

}];