设置会话扩展信息
2026-11-06
功能简介
会话扩展信息(extendedData)是由业务侧自定义并维护的 JSON 字符串,可附着在会话上,用于存储会话的自定义业务数据。
自 3.3.0 版本起,ZIM 支持为会话设置扩展信息。设置后,在查询会话列表或收到会话变更通知时,扩展信息会通过 ZIMConversation 的 extendedData 字段返回。
说明
会话扩展信息与会话标记相互独立:设置或取消会话标记不会清除会话扩展信息。
实现流程
调用 setConversationExtendedData 接口,传入 ZIMConversationExtendedData 列表(包含会话 ID、会话类型及扩展信息),即可批量设置多个会话的扩展信息。extendedData 传空字符串,可删除对应会话的扩展信息。
注意事项:
- 仅支持单聊和群聊会话,其他会话类型(如房间)会在本地设置失败。
- 即使回调中
errorInfo.code为成功,也仍应检查failedConversationInfos,在本地被拒绝的条目会通过该列表返回。
示例代码
// 构造会话扩展信息列表
ArrayList<ZIMConversationExtendedData> extendedDataList = new ArrayList<>();
ZIMConversationExtendedData data = new ZIMConversationExtendedData();
data.setConversationID("convId");
data.setConversationType(ZIMConversationType.PEER);
data.setExtendedData("{\"key\":\"value\"}");
extendedDataList.add(data);
// 设置会话扩展信息
zim.setConversationExtendedData(extendedDataList, new ZIMConversationExtendedDataSetCallback() {
@Override
public void onConversationExtendedDataSet(ArrayList<ZIMConversationBaseInfo> failedConversationInfos, ZIMError errorInfo) {
// 设置会话扩展信息的结果回调
// failedConversationInfos 为设置失败的会话基础信息列表
}
});// 构造会话扩展信息列表
ArrayList<ZIMConversationExtendedData> extendedDataList = new ArrayList<>();
ZIMConversationExtendedData data = new ZIMConversationExtendedData();
data.setConversationID("convId");
data.setConversationType(ZIMConversationType.PEER);
data.setExtendedData("{\"key\":\"value\"}");
extendedDataList.add(data);
// 设置会话扩展信息
zim.setConversationExtendedData(extendedDataList, new ZIMConversationExtendedDataSetCallback() {
@Override
public void onConversationExtendedDataSet(ArrayList<ZIMConversationBaseInfo> failedConversationInfos, ZIMError errorInfo) {
// 设置会话扩展信息的结果回调
// failedConversationInfos 为设置失败的会话基础信息列表
}
});示例代码
// 构造会话扩展信息列表
ZIMConversationExtendedData *data = [[ZIMConversationExtendedData alloc] init];
data.conversationID = @"convId";
data.conversationType = ZIMConversationTypePeer;
data.extendedData = @"{\"key\":\"value\"}";
// 设置会话扩展信息
[[ZIM getInstance] setConversationExtendedData:@[data] callback:^(NSArray<ZIMConversationBaseInfo *> * _Nonnull failedConversationInfos, ZIMError * _Nonnull errorInfo) {
// 设置会话扩展信息的结果回调
if (errorInfo.code == ZIMErrorCodeSuccess) {
// 设置成功,注意检查 failedConversationInfos 中设置失败的会话
} else {
// 可以打印错误码和错误信息,参考 ZIM 官网错误码文档排查错误原因
}
}];// 构造会话扩展信息列表
ZIMConversationExtendedData *data = [[ZIMConversationExtendedData alloc] init];
data.conversationID = @"convId";
data.conversationType = ZIMConversationTypePeer;
data.extendedData = @"{\"key\":\"value\"}";
// 设置会话扩展信息
[[ZIM getInstance] setConversationExtendedData:@[data] callback:^(NSArray<ZIMConversationBaseInfo *> * _Nonnull failedConversationInfos, ZIMError * _Nonnull errorInfo) {
// 设置会话扩展信息的结果回调
if (errorInfo.code == ZIMErrorCodeSuccess) {
// 设置成功,注意检查 failedConversationInfos 中设置失败的会话
} else {
// 可以打印错误码和错误信息,参考 ZIM 官网错误码文档排查错误原因
}
}];示例代码
// 构造会话扩展信息列表
const extendedDataList: ZIMConversationExtendedData[] = [
{ conversationID: 'xxx', conversationType: 0, extendedData: '{"key":"value"}' }
];
// 设置会话扩展信息
zim.setConversationExtendedData(extendedDataList)
.then((res: ZIMConversationExtendedDataSetResult) => {
// 设置成功,注意检查 res.failedConversationInfos 中设置失败的会话
})
.catch((err: ZIMError) => {
// 设置失败
});// 构造会话扩展信息列表
const extendedDataList: ZIMConversationExtendedData[] = [
{ conversationID: 'xxx', conversationType: 0, extendedData: '{"key":"value"}' }
];
// 设置会话扩展信息
zim.setConversationExtendedData(extendedDataList)
.then((res: ZIMConversationExtendedDataSetResult) => {
// 设置成功,注意检查 res.failedConversationInfos 中设置失败的会话
})
.catch((err: ZIMError) => {
// 设置失败
});示例代码
// 构造会话扩展信息列表
std::vector<zim::ZIMConversationExtendedData> extendedDataList;
zim::ZIMConversationExtendedData data;
data.conversationID = "conv_id";
data.conversationType = zim::ZIMConversationType::ZIM_CONVERSATION_TYPE_PEER;
data.extendedData = "{\"key\":\"value\"}";
extendedDataList.push_back(data);
// 设置会话扩展信息
zim_->setConversationExtendedData(
extendedDataList,
[=](const std::vector<zim::ZIMConversationBaseInfo> &failedConversationInfos,
const zim::ZIMError &errorInfo) {
// 设置会话扩展信息的结果回调
if (errorInfo.code == zim::ZIMErrorCode::ZIM_ERROR_CODE_SUCCESS) {
// 设置成功,注意检查 failedConversationInfos 中设置失败的会话
} else {
// 可以打印错误码和错误信息,参考 ZIM 官网错误码文档排查错误原因
}
});// 构造会话扩展信息列表
std::vector<zim::ZIMConversationExtendedData> extendedDataList;
zim::ZIMConversationExtendedData data;
data.conversationID = "conv_id";
data.conversationType = zim::ZIMConversationType::ZIM_CONVERSATION_TYPE_PEER;
data.extendedData = "{\"key\":\"value\"}";
extendedDataList.push_back(data);
// 设置会话扩展信息
zim_->setConversationExtendedData(
extendedDataList,
[=](const std::vector<zim::ZIMConversationBaseInfo> &failedConversationInfos,
const zim::ZIMError &errorInfo) {
// 设置会话扩展信息的结果回调
if (errorInfo.code == zim::ZIMErrorCode::ZIM_ERROR_CODE_SUCCESS) {
// 设置成功,注意检查 failedConversationInfos 中设置失败的会话
} else {
// 可以打印错误码和错误信息,参考 ZIM 官网错误码文档排查错误原因
}
});示例代码
// 构造会话扩展信息列表
ZIMConversationExtendedData data = ZIMConversationExtendedData();
data.conversationID = "convId";
data.conversationType = ZIMConversationType.peer;
data.extendedData = '{"key":"value"}';
// 设置会话扩展信息
ZIM.getInstance().setConversationExtendedData([data]).then((value){
// 设置成功,注意检查 value.failedConversationInfos 中设置失败的会话
}).catchError((onError){
// 可以打印错误码和错误信息,参考 ZIM 官网错误码文档排查错误原因
});// 构造会话扩展信息列表
ZIMConversationExtendedData data = ZIMConversationExtendedData();
data.conversationID = "convId";
data.conversationType = ZIMConversationType.peer;
data.extendedData = '{"key":"value"}';
// 设置会话扩展信息
ZIM.getInstance().setConversationExtendedData([data]).then((value){
// 设置成功,注意检查 value.failedConversationInfos 中设置失败的会话
}).catchError((onError){
// 可以打印错误码和错误信息,参考 ZIM 官网错误码文档排查错误原因
});