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