修改消息的展示样式

修改消息的展示样式:会话列表、会话页、输入区与页面事件监听是 IMKit 的四类核心能力;本页给出组件组合与事件流。

适用场景​

  • 从零搭出会话列表/会话页
  • 拦截页面事件做埋点或自定义导航
  • 按类型聚合会话

前置条件​

  • 已导入 ImpIaaSIMKit
  • IMLib 已连接
  • 宿主有路由与页面容器

rev28 契约状态​

已实现 / 部分覆盖

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

组件:MessageRendererRegistry​

消息单元格渲染注册表:为文件/语音/视频/位置/名片/自定义/合并转发等类型注册渲染器,ChatView 按 content.type 选择

契约项内容
Propsregister(type: IMPContentType, renderer: IMPMessageRenderer) renderer(for:)
EventsrendererRegistered(type)
Behaviors默认注册文本/图片/文件/语音/位置/自定义/合并转发;未知类型回退统一占位并显示类型名;宿主可覆盖默认渲染器,不重启会话生效

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

语言签名
SwiftIMPKitFacade.shared.messageRendererRegistry
Objective-CIMPOSKitFacade.shared.messageRendererRegistry

Swift 接入示例​

Swift
let registry = IMPKitFacade.shared.messageRendererRegistry

Objective-C 接入示例​

Objective-C
IMPOSMessageRendererRegistry *registry = IMPOSKitFacade.shared.messageRendererRegistry;

注入方式与回退策略​

  • registry 暴露默认类型渲染器(text/image/file/voice/video/location/custom 等);宿主按 content.type 注册自定义 renderer 覆盖默认实现。
  • 未知类型回退到 custom 占位渲染并保留原文,不抛错;注册/注销只影响后续渲染。
  • 宿主覆盖需在主线程注册,renderer 返回的 view 由消息列表复用。

与融云对应页 / 差异​

项内容
融云页面ios-imkit/key-functions/customize-message-item(修改消息的展示样式)
融云接口状态部分覆盖(主路径可用,子能力缺失)
我方对应MessageBubble.renderers(custom 等 9 类)
差异说明自定义渲染器可注册;缺「模板替换」与复杂文本异步渲染

相关错误码​

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

相关页面​