扩展消息
消息扩展功能可为消息对象(RCMessage)增加基于 Key/Value 的状态标识。消息的扩展信息可在发送前、后设置或更新,可用于实现消息评论、礼物领取、订单状态变化等业务需求。
提示
- 一条消息是否可携带或可设置扩展信息,由发送消息时 
RCMessage的可扩展(canIncludeExpansion)属性决定,该属性必须在发送前设置,发送后无法修改。 - 单条消息单次最多可设置 20 个扩展信息 KV 对,总计不可超过 300 个扩展信息 KV 对。在并发情况下如出现设置超过 300 个的情况,超出部分会被丢弃。
 - 如已开通历史消息云存储功能,从服务端获取的历史消息也会携带已设置的扩展信息。
 - 每次设置消息扩展将会产生内置通知消息,频繁设置扩展会产生大量消息。
 
监听消息处理
您可以通过设置 setRCUltraGroupMessageChangeDelegate 代理来监听远端用户对消息扩展的修改操作:
- 设置 
setRCUltraGroupMessageChangeDelegate:代理: 
Objective C
[[RCChannelClient sharedChannelManager] setRCUltraGroupMessageChangeDelegate:self];
- 实现 
onUltraGroupMessageExpansionUpdated:消息扩展变更代理方法: 
Objective C
/*!
 消息扩展更新,删除
 @param messages 消息集合
 */
- (void)onUltraGroupMessageExpansionUpdated:(NSArray<RCMessage*>*)messages {
}
发送消息前设置消息扩展信息
您可以构建新消息后,设置 RCMessage 的 canIncludeExpansion 属性打开或关闭某条消息的可扩展属性。
提示
- 必须在发送消息前设置 
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
参数说明
| 参数 | 类型 | 说明 | 
|---|---|---|
| expansionDic | NSDictionary | 要更新的消息扩展信息键值对。
  | 
| messageUId | NSString | 消息 messageUId。 | 
| successBlock | Block | 成功的回调。 | 
| errorBlock | Block | 失败的回调。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
参数说明
| 参数 | 类型 | 说明 | 
|---|---|---|
| keyArray | NSArray | 消息扩展信息中待删除的 key 的列表。 | 
| messageUId | NSString | 消息 messageUId。 | 
| successBlock | Block | 成功的回调。 | 
| errorBlock | Block | 失败的回调。status 包含失败的错误码 [RCErrorCode]。 | 
示例代码
Objective C
[[RCChannelClient sharedChannelManager] removeUltraGroupMessageExpansion:keyArray messageUId:messageUId success:^{
} error:^(RCErrorCode status) {
}];