- 新增 compose.production.yaml 和 compose.production.server.yaml 部署配置 - 添加 nginx.dev.xuqinmin.com.conf 和 nginx.sentry.xuqinmin.com.conf 反向代理配置 - 创建详细的部署指南文档 deploy/README.md,涵盖架构设计和部署步骤 - 添加前端访问文档 web/README.md,包含线上地址和接口说明 - 补充平台文档总览 README.md,整合各模块文档入口 - 配置多服务容器化部署,包括 tenant-service、im-service、push-service 等 - 设置外部数据库和 Redis 连接配置,确保服务间正确通信 - 配置 WebSocket 和 API 路由转发规则,支持实时通信和版本更新服务
170 行
4.9 KiB
Markdown
170 行
4.9 KiB
Markdown
# Java Server SDK
|
||
|
||
XuqmGroup 服务端 Java SDK,按腾讯云服务端 API 的思路封装了以下能力:
|
||
|
||
- IM 账号、UserSig 生成与登录
|
||
- 消息发送、编辑、撤回、历史查询
|
||
- 好友、黑名单、会话、群组
|
||
- Webhook、管理端操作、统计
|
||
- Push 注册与发送
|
||
- Update 版本检查、上传、发布、灰度、应用商店提审
|
||
|
||
---
|
||
|
||
## 安装
|
||
|
||
Maven 在 `pom.xml` 中添加:
|
||
|
||
```xml
|
||
<repository>
|
||
<id>xuqm-nexus</id>
|
||
<url>https://nexus.xuqinmin.com/repository/maven-public/</url>
|
||
</repository>
|
||
|
||
<dependency>
|
||
<groupId>com.xuqm</groupId>
|
||
<artifactId>im-sdk</artifactId>
|
||
<version>0.1.0-SNAPSHOT</version>
|
||
</dependency>
|
||
```
|
||
|
||
Gradle:
|
||
|
||
```kotlin
|
||
repositories {
|
||
maven { url = uri("https://nexus.xuqinmin.com/repository/maven-public/") }
|
||
}
|
||
|
||
dependencies {
|
||
implementation("com.xuqm:im-sdk:0.1.0-SNAPSHOT")
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 初始化
|
||
|
||
```java
|
||
import com.xuqm.im.sdk.XuqmImServerSdk;
|
||
|
||
XuqmImServerSdk client = XuqmImServerSdk.builder()
|
||
.baseUrl("https://dev.xuqinmin.com")
|
||
.appKey("your_app_key")
|
||
.appSecret("your_app_secret")
|
||
.build();
|
||
```
|
||
|
||
> 服务端 SDK 需要 `appSecret` 用于 HMAC 签名,`appSecret` 绝不下发到客户端。
|
||
|
||
---
|
||
|
||
## UserSig
|
||
|
||
```java
|
||
String userSig = client.generateUserSig("user_001");
|
||
boolean valid = client.verifyUserSig("user_001", userSig);
|
||
var login = client.loginWithUserSig("user_001", userSig);
|
||
```
|
||
|
||
管理员账号可用于服务端 SDK / 管理端 REST API;建议在 IM 管理页先给对应注册用户打上管理员标记。
|
||
|
||
---
|
||
|
||
## 发送消息
|
||
|
||
```java
|
||
import com.xuqm.im.sdk.XuqmImServerSdk.ImMessage;
|
||
import com.xuqm.im.sdk.XuqmImServerSdk.SendMessageRequest;
|
||
|
||
ImMessage msg = client.sendMessage(new SendMessageRequest(
|
||
"user_002",
|
||
"SINGLE",
|
||
"TEXT",
|
||
"Hello from Java SDK!",
|
||
null,
|
||
null,
|
||
null
|
||
));
|
||
|
||
System.out.println("消息已发送: " + msg.getId());
|
||
```
|
||
|
||
### 发送群消息
|
||
|
||
```java
|
||
ImMessage msg = client.sendMessage(SendMessageRequest.builder()
|
||
.toId("group_xxx")
|
||
.chatType("GROUP")
|
||
.msgType("TEXT")
|
||
.content("大家好")
|
||
.build());
|
||
```
|
||
|
||
### 撤回消息
|
||
|
||
```java
|
||
client.revokeMessage("message_id");
|
||
```
|
||
|
||
---
|
||
|
||
## 能力分类
|
||
|
||
| 分类 | 主要方法 |
|
||
|------|----------|
|
||
| IM 账号 | `generateUserSig`, `verifyUserSig`, `login`, `loginWithUserSig`, `importAccount`, `importAccounts`, `deleteAccount`, `getProfile`, `updateProfile`, `searchAccounts` |
|
||
| 消息 | `sendMessage`, `revokeMessage`, `editMessage`, `fetchHistory`, `fetchGroupHistory`, `searchMessages` |
|
||
| 会话 | `listConversations`, `setConversationPinned`, `setConversationMuted`, `markRead`, `setDraft`, `setConversationHidden`, `setConversationGroup`, `deleteConversation` |
|
||
| 好友 | `listFriends`, `addFriend`, `addFriends`, `removeFriend`, `removeFriends`, `removeAllFriends`, `setFriendGroup`, `listFriendGroups`, `listFriendsByGroup`, `checkFriends` |
|
||
| 黑名单 | `listBlacklist`, `addBlacklist`, `removeBlacklist`, `checkBlacklist` |
|
||
| 群组 | `listGroups`, `createGroup`, `updateGroup`, `addGroupMember`, `addGroupMembers`, `removeGroupMember`, `removeGroupMembers`, `setGroupRole`, `transferGroupOwner`, `leaveGroup`, `updateGroupAttributes`, `removeGroupAttributes`, `muteGroupMember`, `dismissGroup`, `sendGroupJoinRequest`, `listGroupJoinRequests`, `acceptGroupJoinRequest`, `rejectGroupJoinRequest`, `acceptGroupJoinRequests`, `rejectGroupJoinRequests` |
|
||
| 管理端 | `queryUserState`, `kickUsers`, `batchSendMessage`, `adminSetMsgRead`, `importMessages`, `adminTransferGroupOwner`, `adminUpdateGroupAttributes`, `adminRemoveGroupAttributes`, `adminGroupReadReceipts` |
|
||
| Webhook | `listWebhooks`, `createWebhook`, `updateWebhook`, `deleteWebhook`, `verifyCallbackSignature`, `parseCallbackEnvelope`, 各类 `parse*CallbackPayload` |
|
||
| Push | `registerPushToken`, `sendPush`, `pushUserStatus`, `pushDeviceLogs`, `testOfflinePush` |
|
||
| Update | `checkAppUpdate`, `uploadAppVersion`, `publishAppVersion`, `unpublishAppVersion`, `grayAppVersion`, `listAppVersions`, `checkRnUpdate`, `uploadRnBundle`, `publishRnBundle`, `unpublishRnBundle`, `listRnBundles` |
|
||
|
||
## 群管理示例
|
||
|
||
```java
|
||
import com.xuqm.im.sdk.XuqmImServerSdk.GroupView;
|
||
|
||
GroupView group = client.createGroup("项目讨论", List.of("user_001", "user_002"), "NORMAL");
|
||
|
||
client.addGroupMember("group_xxx", "user_003");
|
||
client.removeGroupMember("group_xxx", "user_003");
|
||
|
||
List<GroupView> groups = client.listGroups();
|
||
```
|
||
|
||
---
|
||
|
||
## Push 推送
|
||
|
||
```java
|
||
import com.xuqm.sdk.server.model.SendPushRequest;
|
||
|
||
client.sendPush(SendPushRequest.builder()
|
||
.userId("user_001")
|
||
.title("新消息")
|
||
.body("你有一条未读消息")
|
||
.payload("{\"chatId\":\"user_002\"}")
|
||
.build());
|
||
```
|
||
|
||
---
|
||
|
||
## 错误处理
|
||
|
||
```java
|
||
import com.xuqm.im.sdk.XuqmImServerSdk.ImSdkException;
|
||
|
||
try {
|
||
ImMessage msg = client.sendMessage(request);
|
||
} catch (ImSdkException e) {
|
||
System.err.printf("API 错误: status=%d, code=%d, message=%s%n",
|
||
e.getHttpStatus(), e.getCode(), e.getMessage());
|
||
}
|
||
```
|
||
|
||
[→ Server API 文档](/server/api)
|