Files
rider-pro-android-app/MIGRATION_GUIDE.md
2025-09-08 15:13:17 +08:00

5.0 KiB
Raw Blame History

腾讯云 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 消息类型到应用内部类型的映射:

// 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. 消息发送

    // 需要实现
    OpenIMClient.getInstance().messageManager.sendMessage(...)
    
  2. 历史消息获取

    // 需要实现
    OpenIMClient.getInstance().messageManager.getAdvancedHistoryMessageList(...)
    
  3. 会话列表获取

    // 已在 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 对比

消息发送

// 腾讯云 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)

注意事项

  1. 数据结构差异OpenIM 和腾讯云 IM 的数据结构有所不同,需要仔细映射
  2. 回调机制OpenIM 使用不同的回调接口
  3. 消息 IDOpenIM 使用 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. 清理所有相关的临时注释