feat(push): 新增设备推送和测试功能

- 新增基于设备令牌的推送通知接口
- 添加推送测试服务,支持应用启动时自动测试
- 新增推送测试文档说明
- 更新 APNS 配置和日志记录
- 迁移至 apns2 库的 PushType 枚举
- 替换订阅密钥文件
- 添加项目规则文档
This commit is contained in:
richarjiang
2025-10-15 19:09:51 +08:00
parent 38dd740c8c
commit cc83b84c80
20 changed files with 728 additions and 37 deletions

View File

@@ -0,0 +1,132 @@
# 推送测试功能
本文档介绍如何使用推送测试功能,该功能可以在应用程序启动时自动获取表中的已有 token 进行消息推送。
## 功能概述
推送测试功能包括以下特性:
1. **自动测试**:应用程序启动时自动执行推送测试(可通过环境变量控制)
2. **手动触发**:通过 API 接口手动触发推送测试
3. **统计信息**:获取推送令牌的统计信息
4. **可配置内容**:可以自定义测试推送的标题和内容
## 环境变量配置
`.env` 文件中添加以下配置:
```env
# 推送测试配置
# 启用/禁用应用启动时的推送测试
ENABLE_PUSH_TEST=false
# 测试推送消息内容(可选,如果不提供将使用默认值)
PUSH_TEST_TITLE=测试推送
PUSH_TEST_BODY=这是一条测试推送消息,用于验证推送功能是否正常工作。
```
### 环境变量说明
- `ENABLE_PUSH_TEST`: 设置为 `true` 启用应用启动时的推送测试,设置为 `false` 禁用(默认为 `false`
- `PUSH_TEST_TITLE`: 测试推送的标题(可选)
- `PUSH_TEST_BODY`: 测试推送的内容(可选)
## API 接口
### 1. 手动触发推送测试
**请求方式**: `POST`
**请求路径**: `/api/push-test/trigger`
**响应示例**:
```json
{
"code": 0,
"message": "Push test completed",
"data": {
"success": true,
"message": "Push test completed"
}
}
```
### 2. 获取推送令牌统计信息
**请求方式**: `GET`
**请求路径**: `/api/push-test/stats`
**响应示例**:
```json
{
"code": 0,
"message": "获取推送令牌统计信息成功",
"data": {
"totalTokens": 100,
"activeTokens": 85,
"inactiveTokens": 15,
"recentlyActiveTokens": 60
}
}
```
## 工作原理
1. **自动测试流程**:
- 应用启动时,`PushTestService` 会检查 `ENABLE_PUSH_TEST` 环境变量
- 如果启用,服务会在应用完全启动后 5 秒执行推送测试
- 测试会获取最多 10 个活跃的推送令牌
- 向这些令牌发送测试推送消息
2. **手动测试流程**:
- 通过调用 `/api/push-test/trigger` 接口手动触发测试
- 测试流程与自动测试相同
3. **统计信息**:
- `totalTokens`: 总令牌数
- `activeTokens`: 活跃令牌数
- `inactiveTokens`: 非活跃令牌数
- `recentlyActiveTokens`: 最近 7 天活跃的令牌数
## 注意事项
1. **生产环境使用**:
- 在生产环境中使用前,请确保测试推送内容不会对用户造成困扰
- 建议在非高峰时段进行测试
2. **令牌限制**:
- 自动测试每次最多获取 10 个令牌,避免发送过多推送
- 只会向标记为 `isActive=true` 的令牌发送推送
3. **错误处理**:
- 如果推送失败,服务会记录详细的错误日志
- 无效的令牌会被自动标记为非活跃状态
## 日志记录
推送测试功能会记录以下日志:
- 测试开始和结束
- 发送成功和失败的统计
- 每个令牌的推送结果
- 错误详情
这些日志可以帮助排查推送问题。
## 示例用法
### 启用自动测试
1.`.env` 文件中设置 `ENABLE_PUSH_TEST=true`
2. 重启应用程序
3. 查看日志确认测试是否成功执行
### 手动触发测试
```bash
curl -X POST http://localhost:3002/api/push-test/trigger
```
### 查看统计信息
```bash
curl -X GET http://localhost:3002/api/push-test/stats