更新文档

This commit is contained in:
李志强 2026-03-25 17:15:46 +08:00
parent 1f97307814
commit 4e211ed1fe
4 changed files with 16 additions and 20 deletions

View File

@ -15,7 +15,7 @@
首次进入 App 会让你填写: 首次进入 App 会让你填写:
- `backendUrl`:例如 `http://192.168.1.10:3000` - `backendUrl`:例如 `http://192.168.1.10:7788`
- `apiKey`:后端 `.env` 里的 `SMS_GATEWAY_API_KEY` - `apiKey`:后端 `.env` 里的 `SMS_GATEWAY_API_KEY`
- (不再需要 `deviceId`:由后端根据 `apiKey` 自动归属任务/短信) - (不再需要 `deviceId`:由后端根据 `apiKey` 自动归属任务/短信)
@ -24,7 +24,10 @@
- 启动前台服务轮询后端下发发送任务 - 启动前台服务轮询后端下发发送任务
- 注册系统短信接收广播,上报短信内容并解析验证码 - 注册系统短信接收广播,上报短信内容并解析验证码
你也可以点击 `检测心跳` 按钮,用于手动验证 App 与后端的网络/鉴权通断。 你也可以使用 `短信测试` 功能:
- 在输入框填写国际格式号码,例如 `+8613712345678`
- 点击“短信测试”发送一条固定测试短信到该号码
## 注意事项 ## 注意事项

View File

@ -25,7 +25,7 @@ npm i
npm start npm start
``` ```
默认监听`http://localhost:3000` 默认监听由环境变量 `PORT` 决定(示例:`http://localhost:7788`
## 鉴权 ## 鉴权

View File

@ -42,6 +42,7 @@
5. 业务系统从后端查询验证码并完成流程 5. 业务系统从后端查询验证码并完成流程
发送流程(可选): 发送流程(可选):
1. 业务系统调用后端发短信接口 1. 业务系统调用后端发短信接口
2. 后端生成发送任务 2. 后端生成发送任务
3. 网关轮询/长连接获取任务 3. 网关轮询/长连接获取任务
@ -50,10 +51,10 @@
## 4. 技术选型建议 ## 4. 技术选型建议
- **客户端**Android 原生 Kotlin推荐 - **客户端**Android 原生 Kotlin推荐
- **网络层**Retrofit + OkHttp - **网络层**HttpURLConnectionMVP
- **本地存储**Room 或轻量 SQLite - **本地存储**Room 或轻量 SQLite
- **日志**:本地文件 + 后端集中日志 - **日志**:本地文件 + 后端集中日志
- **心跳与保活**Foreground Service + WorkManager - **保活策略**Foreground Service前台轮询
> 若主项目使用 uniapp建议通过原生插件封装短信能力不建议纯前端层直接处理短信底层功能。 > 若主项目使用 uniapp建议通过原生插件封装短信能力不建议纯前端层直接处理短信底层功能。
@ -99,7 +100,7 @@
- 前台服务常驻(通知栏提示) - 前台服务常驻(通知栏提示)
- 开机自启恢复服务 - 开机自启恢复服务
- 引导用户关闭电池优化限制 - 引导用户关闭电池优化限制
- 关键任务使用 WorkManager 重试 - 失败任务在下次轮询继续重试(可在后续增加失败队列/指数退避)
## 6. 模块设计 ## 6. 模块设计
@ -107,7 +108,7 @@
1. **sms-receiver**:短信接收与解析 1. **sms-receiver**:短信接收与解析
2. **sms-sender**:短信发送与发送回执 2. **sms-sender**:短信发送与发送回执
3. **task-sync**:任务拉取、心跳、状态上报 3. **task-sync**:任务拉取、状态上报
4. **storage**:本地缓存与失败队列 4. **storage**:本地缓存与失败队列
5. **api-client**:后端 API 通信 5. **api-client**:后端 API 通信
6. **security**:签名、鉴权、加密 6. **security**:签名、鉴权、加密
@ -120,10 +121,8 @@
- `sender` - `sender`
- `content` - `content`
- `receivedAt` - `receivedAt`
- `simSlot`
- `parsedCode` - `parsedCode`
- `parseStatus` - `parseStatus`
- `uploadStatus`
- `rawPduHash` - `rawPduHash`
### OutboundTask出站任务 ### OutboundTask出站任务
@ -131,7 +130,6 @@
- `taskId` - `taskId`
- `phone` - `phone`
- `content` - `content`
- `simSlot`
- `status`pending/sending/success/failed - `status`pending/sending/success/failed
- `retryCount` - `retryCount`
- `lastError` - `lastError`
@ -140,18 +138,17 @@
## 7.1 鉴权建议 ## 7.1 鉴权建议
- 每台设备分配 `deviceId + deviceSecret` - 网关端通过请求头携带 `X-Api-Key: SMS_GATEWAY_API_KEY` 进行鉴权
- 请求头携带签名HMAC-SHA256
- 使用 HTTPS拒绝明文传输 - 使用 HTTPS拒绝明文传输
## 7.2 API 列表 ## 7.2 API 列表
1. `POST /api/v1/sms/inbound` 1. `POST /api/v1/sms/inbound`
- 作用:上报入站短信 - 作用:上报入站短信
- 请求体:发送方、短信内容、时间、设备ID、解析结果 - 请求体:发送方、短信内容、时间、解析结果
- 返回:`ackId` - 返回:`ackId`
2. `GET /api/v1/device/tasks?deviceId=xxx` 2. `GET /api/v1/device/tasks?limit=5`
- 作用:拉取发送任务 - 作用:拉取发送任务
- 返回:任务列表 - 返回:任务列表
@ -159,10 +156,6 @@
- 作用:回传发送结果 - 作用:回传发送结果
- 请求体:`taskId`、状态、失败原因、运营商回执(如有) - 请求体:`taskId`、状态、失败原因、运营商回执(如有)
4. `POST /api/v1/device/heartbeat`
- 作用:设备在线心跳
- 上报电量、网络、SIM状态、App版本
## 8. 验证码解析策略 ## 8. 验证码解析策略
## 8.1 正则提取建议 ## 8.1 正则提取建议

View File

@ -24,7 +24,7 @@ npm i
npm start npm start
``` ```
默认监听:`http://localhost:3000` 默认监听:`http://localhost:7788`
## 2. 构建安卓端 ## 2. 构建安卓端
@ -48,6 +48,6 @@ npm start
## 4. 后续扩展建议 ## 4. 后续扩展建议
- 增加设备心跳接口、设备在线监控
- 增加任务重试与失败原因字段 - 增加任务重试与失败原因字段
- 增加短信去重与解析规则配置(正则规则下发) - 增加短信去重与解析规则配置(正则规则下发)
<!-- end -->