Agent 8 文档生成: - CLAUDE.md 项目上下文 - 各 package README (common/update/push/im/xwebview/license/log) - docs/架构总览.md - docs/模块待开发说明.md
128 行
4.3 KiB
Markdown
128 行
4.3 KiB
Markdown
# @xuqm/rn-im
|
||
|
||
XuqmGroup RN SDK IM 模块。提供 WebSocket 实时通信、会话管理、消息收发、群组管理、关系链管理。
|
||
|
||
## 安装
|
||
|
||
```bash
|
||
yarn add @xuqm/rn-im @nozbe/watermelondb
|
||
```
|
||
|
||
Peer dependencies:`@nozbe/watermelondb >= 0.27.0`,`react-native >= 0.76`
|
||
|
||
## 使用
|
||
|
||
**无需手动初始化。** `XuqmSDK.setUserInfo({ userId, userSig })` 被调用时,SDK 自动完成 IM 登录。
|
||
|
||
```ts
|
||
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)` | 检查黑名单 |
|
||
|
||
### 事件监听
|
||
|
||
```ts
|
||
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` 派生。
|