输入区域
输入区域:会话列表、会话页、输入区与页面事件监听是 IMKit 的四类核心能力;本页给出组件组合与事件流。
适用场景
- 从零搭出会话列表/会话页
- 拦截页面事件做埋点或自定义导航
- 按类型聚合会话
前置条件
- 已导入 ImpIaaSIMKit
- IMLib 已连接
- 宿主有路由与页面容器
对应 Global UIKit 组件
由 ChatInputController 承载:输入区控制器
| 契约项 | 内容 |
|---|---|
| Props | viewModel options? |
| Events | send typing heightChanged |
| Behaviors | 草稿自动保存(防抖 500ms);空内容禁用发送;typing 节流(2s);@提及插入;发送失败保留输入并可重试 |
Swift / Objective-C 接入
// 声明:IMPChatInputController(viewModel: IMPChatViewModel, options: IMPChatInputOptions?)
let inputChatInputController = IMPChatInputController(viewModel: chatViewModel, options: nil)
// 由宿主持有并注入 ViewControllerIMPOSGlobalChatInputController *controller = [[IMPOSGlobalChatInputController alloc] initWithViewModel:self.viewModel options:nil];
// 由宿主 ViewController 持有并注入数据MVVM 边界
GlobalUIKit → IMKit → IMLib(公开接口);ViewController 不直连网络,Delegate 只回调、导航由宿主或 ChatRouter 完成。
与融云对应页 / 差异
| 项 | 内容 |
|---|---|
| 融云页面 | ios-im-uikit/key-functions/input(输入区域) |
| 融云接口状态 | 部分覆盖(主路径可用,子能力缺失) |
| 我方对应 | ChatInputController、MessageInput |
| 差异说明 | 文本/语音/图片/文件/位置/@ 可用;缺表情面板与扩展插件 |
相关错误码
| 错误码 | 名称 | 含义 | 处理 |
|---|---|---|---|
1001 | INVALID_PARAMETER | 参数错误 | 修正参数/权限后重试 |
1002 | INVALID_TOKEN | Token 无效或已过期 | 修正参数/权限后重试 |
1007 | MESSAGE_TOO_LARGE | 消息体过大(上限 5KB) | 修正参数/权限后重试 |
1009 | GROUP_MUTED | 你已被禁言 | 修正参数/权限后重试 |
1010 | SENSITIVE_WORD | 内容包含敏感词 | 修正参数/权限后重试 |
3001 | SDK_NOT_CONNECTED | 长连接未就绪 | 可重试(退避) |
3002 | SDK_TIMEOUT | 请求超时 | 可重试(退避) |
3003 | SDK_NETWORK_ERROR | 网络错误 | 可重试(退避) |
排查建议
- 继承/组合 Global UIKit 时先确认主题与 Dynamic Type 未被硬编码覆盖。
- DataSource/Delegate 回调在主线程;UI 更新不要跨线程。
- 自定义 Cell 通过 ChatCellModel 渲染,不要绕过 ViewModel 直接读数据库。