Skip to content

使用 Demo 进行二次开发

最省事的做法不是从空项目重新拼接 IM,而是先运行 XHIM Demo,再逐步替换登录、页面和 业务消息。本页按实际开发顺序说明。

第一步:先运行原始 Demo

在修改代码前,先确认原始 Demo 能完成:

  1. 登录两个测试账号;
  2. 打开会话列表;
  3. 创建单聊并互发一条文本消息;
  4. 查看联系人和群组;
  5. 退出后重新登录,确认历史消息仍在。

如果原始 Demo 还不能完成这些步骤,先处理环境、账号或 Server 配置,不要同时修改页面。

第二步:替换成你的账号体系

保留 Demo 的 SDK 会话管理,只替换“业务登录成功后如何取得 XHIM 登录信息”这一段:

text
用户登录你的 App
  -> 你的业务后台返回 XHIM 登录所需信息
  -> 创建一个 XHIM Client
  -> 先监听事件
  -> 调用 connect
  -> 连接成功后进入主界面

Token 只保存在系统安全存储或短期内存中,不要放进页面参数、普通配置文件或日志。 同一个登录账号只保留一个 Client;切换账号时先关闭旧账号会话。

第三步:替换页面和主题

建议按功能逐页替换,不要一次删除整个 Demo:

  1. 替换颜色、字体、图标和导航;
  2. 替换会话列表的 Cell 或组件;
  3. 替换聊天页的气泡和输入区;
  4. 替换联系人、群组和个人资料页;
  5. 每替换一页就重新验证登录、收发消息和退出。

页面只调用平台公开 SDK,不要读取 SDK 数据库,也不要复制 Core 源码到 App。

第四步:接入页面数据

页面首次打开时查询一次数据,收到 SDK 事件后再重新查询受影响的列表:

text
打开会话页 -> 查询会话列表 -> 显示
收到会话变化事件 -> 再查询会话列表 -> 更新显示

打开聊天页 -> 查询本地消息 -> 显示
收到新消息事件 -> 再查询当前会话消息 -> 更新显示

不要把事件保存成另一套消息数据库。分页返回的游标只需要原样传入下一页。

第五步:增加业务消息

订单、审批、红包或系统提醒建议使用版本化业务消息,并保留一段普通文字作为旧版本 无法识别时的提示:

text
消息类型 + 版本 + JSON 数据 + fallbackText

页面只解析自己支持的版本。解析失败或收到未来版本时显示 fallbackText,不要让整条 消息消失。后台通知应使用 BusinessNotification,不要让普通用户账号模拟通知账号。

推荐目录

下面的目录适合 MVC、MVVM、MVP 等常见架构,可按平台习惯改名:

text
App/                 App 启动、登录态和页面入口
SDK/                 XHIM Client、事件监听和凭据读取
Features/
  Conversations/     会话列表
  Chat/              聊天页
  Contacts/          联系人
  Groups/            群组
  Profile/           个人资料
UI/                  主题、图标和通用组件
Tests/               页面逻辑、SDK 合同和安装验证

重点是让页面、SDK 会话和业务账号代码分开,方便以后替换 UI 或升级 SDK。

上线前自检

  • [ ] 原始 Demo 和修改后的 App 都能用两个账号互发消息;
  • [ ] 监听事件早于 connect
  • [ ] 同一账号只有一个 Client;
  • [ ] 退出或换号后,旧账号事件不会更新新页面;
  • [ ] 页面退出时取消不再需要的请求和订阅;
  • [ ] 日志不包含 Token、消息正文或业务通知数据;
  • [ ] 未知消息类型会显示 fallbackText
  • [ ] 在空白工程中可以只依赖正式 SDK 包完成构建。

客户端接入总览选择平台;具体方法、参数和完整示例请查 SDK API Reference

独立 Demo 仓库

每个 Demo 都是独立仓库,可以单独克隆、构建和调试:

平台Demo
iOSxhim-ios-app
Android(Java 为主)xhim-android-app
HarmonyOSxhim-harmony-app
macOSxhim-macos-app
Windowsxhim-windows-app
Webxhim-web-app
Electronxhim-electron-app
Flutterxhim-flutter-app
React Nativexhim-react-native-app
Unityxhim-unity-app
uni-appxhim-uni-app
微信 / 通用小程序xhim-mini-program-app

Demo 仓库只保存应用、UI、固定版 SDK 引用和测试,不提交 Token、管理员密钥、 服务端环境文件或开发机上的临时 Core 构建目录。

XHIM 客户端 SDK 与服务端文档