5.0 KiB
5.0 KiB
腾讯云 IM SDK 到 OpenIM 迁移指南
迁移状态
✅ 已完成的工作
-
依赖项迁移
- 从
build.gradle.kts中移除了腾讯云 IM SDK 依赖 (libs.imsdk.plus) - 从
gradle/libs.versions.toml中移除了相关版本定义 - 保留了 OpenIM SDK 依赖 (
io.openim:android-sdk,io.openim:core-sdk)
- 从
-
核心组件迁移
- ✅
TrtcHelper.kt- 完全迁移到 OpenIM API - ✅
Chat.kt实体类 - 更新为 OpenIM 消息模型 - ✅
AgentChatListViewModel.kt- 部分迁移到 OpenIM API - ✅
OpenIMManager.kt- 完整的 OpenIM 管理器 - ✅
OpenIMService.kt- OpenIM 后台服务 - ✅
AppState.kt- 已使用 OpenIM 进行初始化和登录
- ✅
-
兼容层创建
- 创建了
TencentIMCompat.kt兼容层,避免编译错误 - 所有使用腾讯云 IM 的文件都已添加兼容层导入
- 创建了
-
配置清理
- AndroidManifest.xml 已经是干净的,无需额外清理
🔄 需要进一步完成的工作
1. 完整的 ViewModel 迁移
以下文件仍在使用兼容层,需要完全迁移到 OpenIM:
ChatViewModel.kt- 聊天功能核心ChatAiViewModel.kt- AI 聊天功能GroupChatViewModel.kt- 群聊功能FriendChatListViewModel.kt- 好友聊天列表GroupChatListViewModel.kt- 群聊列表MessageListViewModel.kt- 消息列表MineAgentViewModel.kt- 我的智能体CreateGroupChatViewModel.kt- 创建群聊
2. UI 组件迁移
以下 Screen 文件需要更新以使用新的数据模型:
ChatScreen.ktChatAiScreen.ktGroupChatScreen.kt
3. 消息类型映射
需要完善 OpenIM 消息类型到应用内部类型的映射:
// OpenIM 消息类型
101 -> TEXT
102 -> IMAGE
103 -> AUDIO
104 -> VIDEO
105 -> FILE
OpenIM 集成状态
✅ 已集成的功能
- SDK 初始化 -
OpenIMManager.initSDK() - 用户登录 -
AppState.loginToOpenIM() - 连接监听 - 连接状态、踢下线、token 过期
- 消息监听 - 新消息、消息撤回、已读回执等
- 会话管理 - 会话变化、未读数统计
- 用户信息管理 - 用户资料更新
- 好友关系管理 - 好友申请、添加、删除等
- 群组管理 - 群信息变更、成员管理等
🔧 需要实现的功能
-
消息发送
// 需要实现 OpenIMClient.getInstance().messageManager.sendMessage(...) -
历史消息获取
// 需要实现 OpenIMClient.getInstance().messageManager.getAdvancedHistoryMessageList(...) -
会话列表获取
// 已在 AgentChatListViewModel 中部分实现 OpenIMClient.getInstance().conversationManager.getAllConversationList(...) -
图片消息处理
- 需要适配 OpenIM 的
PictureElem结构 - 更新图片显示逻辑
- 需要适配 OpenIM 的
迁移步骤建议
第一阶段:核心聊天功能
- 完成
ChatViewModel.kt的完整迁移 - 实现消息发送和接收
- 实现历史消息加载
- 测试基本聊天功能
第二阶段:会话管理
- 完成各种 ChatListViewModel 的迁移
- 实现会话列表的正确显示
- 实现未读消息统计
第三阶段:高级功能
- 群聊功能迁移
- 文件、图片等多媒体消息
- 消息状态和已读回执
第四阶段:清理和优化
- 删除兼容层
TencentIMCompat.kt - 清理所有临时代码
- 性能优化和测试
关键 API 对比
消息发送
// 腾讯云 IM
V2TIMManager.getMessageManager().sendMessage(message, receiver, null, ...)
// OpenIM
OpenIMClient.getInstance().messageManager.sendMessage(message, receiver, ...)
获取会话列表
// 腾讯云 IM
V2TIMManager.getConversationManager().getConversationList(...)
// OpenIM
OpenIMClient.getInstance().conversationManager.getAllConversationList(...)
消息监听
// 腾讯云 IM
V2TIMManager.getMessageManager().addAdvancedMsgListener(listener)
// OpenIM
OpenIMClient.getInstance().messageManager.setAdvancedMsgListener(listener)
注意事项
- 数据结构差异:OpenIM 和腾讯云 IM 的数据结构有所不同,需要仔细映射
- 回调机制:OpenIM 使用不同的回调接口
- 消息 ID:OpenIM 使用
clientMsgID,腾讯云使用msgID - 时间戳:注意时间戳的单位和格式差异
- 用户 ID:确保用户 ID 在两个系统中的一致性
测试建议
- 单元测试:为每个迁移的组件编写测试
- 集成测试:测试完整的聊天流程
- 兼容性测试:确保与现有数据的兼容性
- 性能测试:对比迁移前后的性能表现
删除兼容层的时机
当以下条件都满足时,可以安全删除 TencentIMCompat.kt:
- 所有 ViewModel 都已完全迁移到 OpenIM
- 所有功能都已测试通过
- 没有编译错误
- 应用运行正常
删除步骤:
- 删除
app/src/main/java/com/aiosman/ravenow/compat/TencentIMCompat.kt - 从所有文件中移除
import com.aiosman.ravenow.compat.* - 清理所有相关的临时注释