消息多选

消息多选:通过替换数据源/回调、注册自定义 Cell、调整主题令牌来定制 IMKit 的展示与交互。

适用场景​

  • 自定义消息类型与气泡样式
  • 拦截/修改发送与接收流程
  • 会话列表多选与批量操作

前置条件​

  • 已理解 IMKit 组件边界(只依赖 IMLib 公开协议)
  • 宿主有自定义 Cell/菜单实现

rev28 契约状态​

已实现 / 部分覆盖

rev28 已冻结 IMKit features 8 组件与 Swift/ObjC 绑定;本页覆盖信息托管/群管理/联系人/多选/转发/引用的契约接入,未覆盖的特别关注/搜索用户等仍按能力边界说明。

组件:MessageMultiSelectController​

消息多选状态机(选择/取消/全选/批量删除/批量转发)

契约项内容
Propsmessages:[Message] selectedIds:Set<string>
EventsselectionChanged(ids) requestDelete(ids) requestForward(ids)
Behaviors进入/退出多选模式;按消息 id 去重选择;批量操作只回调宿主,不直接删/发

真实签名(bindings.ios.imkit.features)​

语言签名
SwiftIMPMessageMultiSelectController(messages: [IMPMessage], selectedIds: Set<String>)
Objective-C- (instancetype)initWithMessages:(NSArray<IMPOSMessage *> *)messages selectedIds:(NSSet<NSString *> *)selectedIds;

Swift 接入示例​

Swift
let multiSelect = IMPMessageMultiSelectController(messages: [message], selectedIds: ["m_10001"])

Objective-C 接入示例​

Objective-C
IMPOSMessageMultiSelectController *multiSelect = [[IMPOSMessageMultiSelectController alloc] initWithMessages:@[] selectedIds:[NSSet set]];

注入方式与回退策略​

  • 控制器只维护选择/转发/引用状态,不直接删除或发送消息;批量操作通过事件回调宿主。
  • 多选:selectionChanged(ids)、requestDelete(ids)、requestForward(ids);宿主调用 IMLib 批量接口。
  • 转发:selectConversation(conversation)、completed(result);合并转发使用 combineMessages + sendMessage。
  • 引用:quoteChanged(message?);发送时把 quote 写入 content,取消引用恢复普通输入。

与融云对应页 / 差异​

项内容
融云页面ios-imkit/customization/multi-select(消息多选)
融云接口状态部分覆盖(主路径可用,子能力缺失)
我方对应MessageMultiSelectController
差异说明rev27 多选状态机契约已冻结;批量删除/转发由宿主调用 IMLib

相关错误码​

错误码名称含义处理
1001INVALID_PARAMETER参数错误修正参数/权限后重试
1002INVALID_TOKENToken 无效或已过期修正参数/权限后重试
1007MESSAGE_TOO_LARGE消息体过大(上限 5KB)修正参数/权限后重试
1009GROUP_MUTED你已被禁言修正参数/权限后重试
1010SENSITIVE_WORD内容包含敏感词修正参数/权限后重试
3001SDK_NOT_CONNECTED长连接未就绪可重试(退避)
3002SDK_TIMEOUT请求超时可重试(退避)
3003SDK_NETWORK_ERROR网络错误可重试(退避)

相关页面​