XuqmGroup-RNSDK/packages/im
2026-06-16 13:27:23 +08:00
..
src feat(sdk): 按跨平台规范重构所有 SDK 包接口 2026-06-15 10:57:55 +08:00
tests chore: sync local changes 2026-05-07 19:39:41 +08:00
package.json fix: @xuqm/rn-common 从 dependencies 移到 peerDependencies,避免宿主项目嵌套安装旧版 2026-06-16 13:27:23 +08:00
README.md docs: 添加 CLAUDE.md + 各 package README + 架构总览 + 模块待开发说明 2026-06-16 12:14:52 +08:00
tsconfig.test.json feat(sdk): 更新 SDK 设计文档和 API 重构 2026-05-01 21:27:39 +08:00

@xuqm/rn-im

XuqmGroup RN SDK IM 模块。提供 WebSocket 实时通信、会话管理、消息收发、群组管理、关系链管理。

安装

yarn add @xuqm/rn-im @nozbe/watermelondb

Peer dependencies@nozbe/watermelondb >= 0.27.0react-native >= 0.76

使用

无需手动初始化。 XuqmSDK.setUserInfo({ userId, userSig }) 被调用时,SDK 自动完成 IM 登录。

import { ImSDK } from '@xuqm/rn-im'

// 发送消息
await ImSDK.sendTextMessage('user_002', 'SINGLE', 'Hello!')

// 获取会话列表
const conversations = await ImSDK.listConversations()

// 监听新消息
ImSDK.addListener({
  onMessage: (msg) => console.log('新消息:', msg),
  onConnected: () => console.log('IM 已连接'),
})

API

连接管理

API 说明
ImSDK.login(userId, userSig) 手动登录(通常不需要直接调用)
ImSDK.refreshToken(userSig) 刷新 userSig过期时调用
ImSDK.disconnect() 断开连接
ImSDK.reconnect() 重新连接
ImSDK.isConnected() 检查连接状态

消息 API

API 说明
ImSDK.sendMessage(toId, chatType, msgType, content, mentionedUserIds?) 发送消息
ImSDK.sendTextMessage(toId, chatType, content, mentionedUserIds?) 发送文本
ImSDK.sendImageMessage(toId, chatType, localUri, width?, height?) 发送图片
ImSDK.sendVideoMessage(toId, chatType, localUri, thumbnailUri?, duration?) 发送视频
ImSDK.sendAudioMessage(toId, chatType, localUri, duration) 发送语音
ImSDK.sendFileMessage(toId, chatType, localUri, filename, size) 发送文件
ImSDK.sendQuoteMessage(toId, chatType, quotedMsgId, quotedContent, text) 引用回复
ImSDK.sendLocationMessage(toId, chatType, latitude, longitude, title?, address?) 发送位置
ImSDK.revokeMessage(messageId) 撤回消息
ImSDK.editMessage(messageId, content) 编辑消息

会话 API

API 说明
ImSDK.listConversations() 获取会话列表
ImSDK.subscribeConversations(callback) 订阅会话变更(返回 unsubscribe
ImSDK.markRead(targetId, chatType?) 标记已读
ImSDK.deleteConversation(targetId, chatType) 删除会话
ImSDK.getTotalUnreadCount() 获取总未读数

历史消息

API 说明
ImSDK.fetchHistory(toId, page?, size?) 获取单聊历史(优先本地缓存)
ImSDK.fetchGroupHistory(groupId, page?, size?) 获取群聊历史
ImSDK.fetchHistoryWithFilters(toId, params) 按条件查询历史
ImSDK.searchMessages(params) 搜索消息(本地 WatermelonDB
ImSDK.locateHistoryPage(toId, messageId) 定位消息所在页

群组 API

API 说明
ImSDK.createGroup(name, memberIds, groupType?) 创建群组
ImSDK.listGroups() 获取群组列表
ImSDK.getGroupInfo(groupId) 获取群组信息
ImSDK.listGroupMembers(groupId) 获取群成员
ImSDK.addGroupMember(groupId, userId) 添加成员
ImSDK.removeGroupMember(groupId, userId) 移除成员
ImSDK.setGroupRole(groupId, userId, role) 设置管理员
ImSDK.muteGroupMember(groupId, userId, minutes) 禁言
ImSDK.dismissGroup(groupId) 解散群组

关系链 API

API 说明
ImSDK.listFriends() 好友列表
ImSDK.addFriend(friendId) 添加好友
ImSDK.removeFriend(friendId) 删除好友
ImSDK.sendFriendRequest(toUserId, remark?) 发送好友申请
ImSDK.acceptFriendRequest(requestId) 接受好友申请
ImSDK.addToBlacklist(blockedUserId) 加入黑名单
ImSDK.checkBlacklist(targetUserId) 检查黑名单

事件监听

ImSDK.addListener({
  onConnected: () => {},
  onDisconnected: (code, reason) => {},
  onMessage: (msg) => {},
  onGroupMessage: (msg) => {},
  onSystemMessage: (msg) => {},
  onRead: (msg) => {},
  onRevoke: (data) => {},
})
ImSDK.removeListener(listener)

消息类型

TEXT / IMAGE / VIDEO / AUDIO / FILE / CUSTOM / LOCATION / NOTIFY / RICH_TEXT / CALL_AUDIO / CALL_VIDEO / QUOTE / MERGE / REVOKED / FORWARD

本地存储

使用 WatermelonDB 进行本地消息缓存,支持离线消息同步和本地搜索。DB 名称由 appKey + userId 派生。