XuqmGroup-Web/docs-site/docs/android/im.md
XuqmGroup 6cd938cfbc feat(android-sdk): 添加完整的IM客户端SDK实现
- 实现了Android SDK的完整IM功能接口,包括消息、群组、好友、会话等核心功能
- 添加了消息收发、历史记录、撤回编辑等完整的消息操作能力
- 实现了群组管理功能,包括创建、成员管理、权限设置等操作
- 添加了好友关系链管理,支持添加、删除、分组等操作
- 实现了会话管理功能,包括置顶、免打扰、已读状态等
- 添加了黑名单、资料管理、搜索等辅助功能
- 补齐了批量操作接口,提升客户端操作效率
- 实现了WebSocket连接管理和事件监听机制
- 添加了离线消息同步和状态管理功能
2026-05-02 22:57:55 +08:00

327 行
7.4 KiB
Markdown

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

# Android IM 接入
基于 `sdk-im` 模块实现即时通讯功能。
---
## 初始化详情
`Application.onCreate()` 中完成初始化,只需传入 `appKey`
```kotlin
import com.xuqm.sdk.XuqmSDK
import com.xuqm.sdk.core.LogLevel
class MyApp : Application() {
override fun onCreate() {
super.onCreate()
XuqmSDK.initialize(
context = this,
appKey = "your_app_key",
logLevel = LogLevel.WARN, // 可选DEBUG / INFO / WARN / ERROR
)
}
}
```
> 服务器地址由 SDK 内置,**无需传 `serverUrl`**。
---
## 登录鉴权UserSig
`userSig` 由业务服务端用 `appSecret` 签发。登录只需 `userId + userSig`
```kotlin
import androidx.lifecycle.lifecycleScope
import com.xuqm.sdk.XuqmSDK
import kotlinx.coroutines.launch
lifecycleScope.launch {
XuqmSDK.login(
userId = "user_001",
userSig = "your_user_sig_jwt",
)
}
```
> 登录成功后,IM 模块会自动连接 WebSocket,Push 模块会自动注册设备 Token。
---
## 单聊消息收发
### 监听实时消息
```kotlin
import com.xuqm.sdk.im.ImSDK
import com.xuqm.sdk.im.listener.ImEventListener
import com.xuqm.sdk.im.model.ImMessage
ImSDK.addListener(object : ImEventListener {
override fun onConnected() { /* WebSocket 已连接 */ }
override fun onMessage(msg: ImMessage) { /* 单聊消息 */ }
override fun onGroupMessage(msg: ImMessage) { /* 群聊消息 */ }
override fun onRead(msg: ImMessage) { /* 对方已读回执 */ }
override fun onRevoke(msg: ImMessage) { /* 消息被撤回 */ }
override fun onDisconnected(reason: String?) { /* 断线处理 */ }
override fun onError(error: String) { /* 错误回调 */ }
})
```
### 发送文本消息
```kotlin
ImSDK.sendTextMessage(
toId = "user_002",
chatType = "SINGLE",
content = "Hello!",
)
```
### 发送多媒体消息
```kotlin
// 图片(需先调用 FileSDK 上传)
ImSDK.sendImageMessage(
toId = "user_002",
chatType = "SINGLE",
file = uploadResult,
width = 800,
height = 600,
)
// 视频
ImSDK.sendVideoMessage(
toId = "user_002",
chatType = "SINGLE",
file = uploadResult,
width = 1920,
height = 1080,
durationMs = 15_000,
)
// 语音
ImSDK.sendAudioMessage(
toId = "user_002",
chatType = "SINGLE",
file = uploadResult,
durationMs = 5_000,
)
// 文件
ImSDK.sendFileMessage(
toId = "user_002",
chatType = "SINGLE",
file = uploadResult,
)
// 位置
ImSDK.sendLocationMessage(
toId = "user_002",
chatType = "SINGLE",
latitude = 31.2304,
longitude = 121.4737,
title = "上海",
address = "上海市黄浦区",
)
```
### 获取历史消息
```kotlin
lifecycleScope.launch {
val history = ImSDK.fetchHistory("user_002", page = 0, size = 20)
// 带筛选的历史消息
val filtered = ImSDK.fetchHistoryWithFilters(
toId = "user_002",
page = 0,
size = 20,
msgType = "TEXT",
keyword = "会议",
)
}
```
### 撤回与编辑
```kotlin
lifecycleScope.launch {
ImSDK.revokeMessage(messageId)
ImSDK.editMessage(messageId, "新内容")
}
```
---
## 群聊
### 创建群组
```kotlin
lifecycleScope.launch {
val group = ImSDK.createGroup(
name = "项目讨论",
memberIds = listOf("user_002", "user_003"),
groupType = "WORK", // 可选WORK / PUBLIC / PRIVATE
)
}
```
### 订阅群消息
```kotlin
ImSDK.subscribeGroup("group_xxx")
```
### 发送群消息
```kotlin
ImSDK.sendTextMessage(
toId = "group_xxx",
chatType = "GROUP",
content = "大家好",
)
```
### 群成员管理
```kotlin
lifecycleScope.launch {
// 添加成员
ImSDK.addGroupMember("group_xxx", "user_004")
// 移除成员
ImSDK.removeGroupMember("group_xxx", "user_004")
// 批量添加/移除
ImSDK.batchAddGroupMembers("group_xxx", listOf("user_005", "user_006"))
ImSDK.batchRemoveGroupMembers("group_xxx", listOf("user_005", "user_006"))
// 设置角色
ImSDK.setGroupRole("group_xxx", "user_004", "ADMIN")
// 禁言
ImSDK.muteGroupMember("group_xxx", "user_004", minutes = 60)
// 转让群主
ImSDK.transferGroupOwner("group_xxx", "user_002")
// 退出群聊
ImSDK.leaveGroup("group_xxx")
// 解散群聊
ImSDK.dismissGroup("group_xxx")
}
```
### 群信息查询
```kotlin
lifecycleScope.launch {
val groups = ImSDK.listGroups()
val publicGroups = ImSDK.listPublicGroups(keyword = "项目")
val group = ImSDK.getGroupInfo("group_xxx")
val members = ImSDK.listGroupMembers("group_xxx")
val history = ImSDK.fetchGroupHistory("group_xxx", page = 0, size = 20)
}
```
---
## 好友管理
```kotlin
lifecycleScope.launch {
// 好友列表
val friends = ImSDK.listFriends()
// 添加好友
ImSDK.addFriend("user_002")
// 删除好友
ImSDK.removeFriend("user_002")
// 批量操作
ImSDK.batchAddFriends(listOf("user_002", "user_003"))
ImSDK.batchRemoveFriends(listOf("user_002", "user_003"))
// 好友分组
ImSDK.setFriendGroup("user_002", "同事")
val groups = ImSDK.listFriendGroups()
// 好友请求
ImSDK.sendFriendRequest("user_002", remark = "你好")
val requests = ImSDK.listFriendRequests(direction = "incoming")
ImSDK.acceptFriendRequest("request_id")
ImSDK.rejectFriendRequest("request_id")
// 黑名单
ImSDK.addToBlacklist("user_002")
ImSDK.removeFromBlacklist("user_002")
val check = ImSDK.checkBlacklist("user_002")
}
```
---
## 会话列表
```kotlin
lifecycleScope.launch {
val conversations = ImSDK.listConversations()
// 置顶
ImSDK.setConversationPinned("user_002", "SINGLE", true)
// 免打扰
ImSDK.setConversationMuted("user_002", "SINGLE", true)
// 标记已读
ImSDK.markRead("user_002", "SINGLE")
// 草稿
ImSDK.setDraft("user_002", "SINGLE", "草稿内容")
// 删除会话
ImSDK.deleteConversation("user_002", "SINGLE")
// 总未读数
val totalUnread = ImSDK.getTotalUnreadCount()
}
```
---
## 离线消息同步
```kotlin
lifecycleScope.launch {
// 查询离线消息数量
val count = ImSDK.offlineMessageCount()
// 同步离线消息
val offlineMessages = ImSDK.syncOfflineMessages()
}
```
---
## 连接状态监听
```kotlin
lifecycleScope.launch {
ImSDK.connectionState.collect { state ->
when (state) {
is ImConnectionState.Connected -> { /* 已连接 */ }
is ImConnectionState.Connecting -> { /* 连接中 */ }
is ImConnectionState.Disconnected -> { /* 已断开state.reason */ }
}
}
}
```
---
## 消息类型
| MsgType | 说明 | content 结构 |
|---------|------|-------------|
| `TEXT` | 纯文本 | `String` |
| `IMAGE` | 图片 | `{url, width, height, thumbnailUrl?}` |
| `VIDEO` | 视频 | `{url, duration, thumbnailUrl, size}` |
| `AUDIO` | 语音 | `{url, duration, size}` |
| `FILE` | 文件 | `{url, name, size, mimeType}` |
| `LOCATION` | 位置 | `{lat, lng, address, title}` |
| `CUSTOM` | 自定义 | 任意 JSON |
| `NOTIFY` | 系统通知 | `{title, content}` |
| `RICH_TEXT` | 富文本 | `{html}` |
| `CALL_AUDIO` | 语音通话信令 | `{action}` |
| `CALL_VIDEO` | 视频通话信令 | `{action}` |
| `FORWARD` | 转发 | `{originalSender, originalContent}` |
| `QUOTE` | 引用 | `{quotedMsgId, quotedContent, text}` |
| `MERGE` | 合并转发 | `{title, msgList}` |
| `REVOKED` | 撤回 | 系统内部填充 |
[→ 完整 API Reference](./api)