自定义消息类型

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

适用场景​

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

前置条件​

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

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
// ios-imkit/uikit/customization/message-customize
let messageCustomizeModel = IMPChatCellModel(message: message, showTime: true, showAvatar: true, readCount: nil, sendState: .sent)
print(messageCustomizeModel)

Objective-C 接入示例​

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

注入方式与回退策略​

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

与融云对应页 / 差异​

项内容
融云页面ios-im-uikit/customization/message-customize(自定义消息类型)
融云接口状态部分覆盖(主路径可用,子能力缺失)
我方对应ChatCellModel、MessageBubble.renderers
差异说明自定义内容渲染可用;缺 RChat 的 cell 注册/模板机制

相关错误码​

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

相关页面​