扩展消息
消息扩展功能可为消息对象(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) {
}];