Files
rjb_push_server/推送测试详细流程说明.txt
2026-01-04 16:51:47 +08:00

354 lines
12 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
================================================================================
Honor 推送测试详细流程说明文档
================================================================================
一、整体架构
================================================================================
推送测试系统采用分层架构,从测试脚本到最终手机接收,经过以下层次:
Python测试脚本 → 推送服务(Java Spring Boot) → Honor推送API → Honor服务器 → 手机设备
--------------------------------------------------------------------------------
层次说明:
1. 测试脚本层使用Python构建推送消息并发送HTTP请求
2. 推送服务层Java Spring Boot服务接收请求并路由到对应厂商
3. Honor推送层处理Honor特定的推送逻辑
4. Honor API层调用Honor官方推送接口
5. 设备层:手机接收推送通知
--------------------------------------------------------------------------------
二、详细流程步骤
================================================================================
【步骤1】Python测试脚本构建推送消息
--------------------------------------------------------------------------------
文件test_honor_push.py
1.1 定义关键参数:
- 推送服务地址http://localhost:8080/android/push
- 设备TokenBAEAAAAAB.josybFY8YYNOK7suCSammWuFIaIUgCdo1d5Ud2NBTUWnyy2a8yUG2WpwNiTZFgBW3sRPO_q-a1bWjwu_ODI6HWHHszoUi1HbhlhMaxjHmOs-zxfg--SECc
- 推送类型8 (ANDROID_PUSH_TYPE_HONOR)
- 消息类型0 (普通消息)
1.2 构建推送消息JSON对象包含以下字段
{
"sender": "test_sender_001", // 发送者ID
"senderName": "测试用户", // 发送者名称
"target": "honor_device_001", // 接收者ID
"pushType": 8, // Honor推送类型
"pushContent": "推送内容", // 推送消息内容
"deviceToken": "设备Token", // 设备唯一标识
"packageName": "com.xunpaisoft.social.im", // 应用包名
"serverTime": 时间戳(毫秒), // 服务器时间
... 其他字段
}
1.3 发送HTTP POST请求
- URL: http://localhost:8080/android/push
- Content-Type: application/json;charset=UTF-8
- Body: 上述JSON对象
【步骤2】推送服务接收请求
--------------------------------------------------------------------------------
文件PushController.java
路径:/android/push
2.1 Spring Boot接收HTTP POST请求
2.2 使用@RequestBody自动将JSON反序列化为PushMessage对象
2.3 调用AndroidPushService.push()方法
【步骤3】推送服务路由处理
--------------------------------------------------------------------------------
文件AndroidPushServiceImpl.java
3.1 日志记录:记录接收到的推送消息
3.2 消息过滤检查:
- 检查是否被过滤Utility.filterPush
- 检查是否为朋友圈消息line == 1
- 如果被过滤,返回"Canceled"
3.3 异步处理:
- 使用线程池ExecutorService异步执行推送
- 立即返回"ok",不等待推送完成
- 设置超时保护15秒
3.4 根据pushType路由到对应厂商
switch (pushMessage.getPushType()) {
case 8: // ANDROID_PUSH_TYPE_HONOR
honorPush.push(pushMessage);
break;
case 1: // 小米
case 2: // 华为
case 3: // 魅族
... 其他厂商
}
【步骤4】Honor推送处理
--------------------------------------------------------------------------------
文件HonorPush.java
4.1 Token管理
- 检查accessToken是否有效未过期
- 如果无效调用refreshToken()刷新
- Token有效期3600秒1小时
- 提前5分钟刷新避免过期
4.2 获取认证TokenrefreshToken方法
- URL: https://iam.developer.honor.com/auth/token
- 方法POST
- 参数:
* grant_type=client_credentials
* client_secret={appSecret}
* client_id={appId}
- 响应包含access_token和expires_in
4.3 构建Honor API请求体
- 调用RequestBody.buildRequestBody()方法
- 将PushMessage转换为Honor API格式
- 包含字段:
* notification.title: 推送标题
* notification.body: 推送内容
* token: [设备Token数组]
* android.notification: Android特定配置
* android.notification.badge: 角标配置
4.4 调用Honor推送API
- URL: https://push-api.cloud.honor.com/api/v1/{appId}/sendMessage
- 方法POST
- Headers:
* Content-Type: application/json
* Authorization: Bearer {accessToken}
* timestamp: 当前时间戳
- Body: Honor API格式的JSON
4.5 处理响应:
- 记录响应日志
- 检查响应中的code和message
- 如果成功:{"code":200,"message":"Success","data":{"sendResult":true}}
【步骤5】Honor服务器处理
--------------------------------------------------------------------------------
5.1 Honor服务器验证
- 验证accessToken有效性
- 验证appId和appSecret
- 验证设备Token有效性
5.2 推送消息到设备:
- 通过Honor推送通道发送到指定设备
- 使用设备Token定位设备
【步骤6】手机设备接收
--------------------------------------------------------------------------------
6.1 Honor系统接收推送
6.2 根据packageName匹配应用
6.3 显示推送通知
6.4 用户点击后打开应用使用badgeClass指定的Activity
三、关键技术点
================================================================================
1. 异步处理机制
- 使用线程池异步执行推送避免阻塞HTTP请求
- 立即返回"ok",提高响应速度
- 适合高并发场景
2. Token缓存机制
- 缓存accessToken避免频繁请求
- 自动刷新提前5分钟刷新避免过期
- 减少API调用次数
3. 多厂商支持
- 通过pushType路由到不同厂商实现
- 统一的PushMessage接口
- 各厂商独立实现
4. 配置管理
- 配置文件config/honor.properties
- 关键配置:
* honor.appSecret: 应用密钥
* honor.appId: 应用ID
* honor.badgeClass: 应用入口Activity
5. 错误处理
- Token刷新失败记录错误并返回
- API调用失败记录异常日志
- 超时保护15秒超时丢弃消息
四、配置文件说明
================================================================================
文件config/honor.properties
honor.appSecret=8cdcbb2485c3f333fa8fd226707212adbe95d733bb672933c14c0d72e60b550f
honor.appId=104475849
honor.badgeClass=com.xunpaisoft.social.im.main.MainActivity
说明:
- appSecret和appId用于获取Honor推送服务的认证Token必须正确
- badgeClass应用入口Activity用于推送点击后打开应用
五、数据流转图
================================================================================
┌─────────────────┐
│ Python测试脚本 │
│ test_honor_push │
│ .py │
└────────┬────────┘
│ HTTP POST (JSON)
│ http://localhost:8080/android/push
┌─────────────────┐
│ PushController │
│ (Spring Boot) │
└────────┬────────┘
│ 调用
┌─────────────────┐
│AndroidPushService│
│ Impl (路由) │
└────────┬────────┘
│ pushType=8
┌─────────────────┐
│ HonorPush │
│ (处理层) │
└────────┬────────┘
│ 1. 检查/刷新Token
│ 2. 构建请求体
│ 3. 调用API
┌─────────────────┐
│ Honor推送API │
│ push-api.cloud. │
│ honor.com │
└────────┬────────┘
│ 推送消息
┌─────────────────┐
│ Honor服务器 │
│ (消息分发) │
└────────┬────────┘
│ 通过推送通道
┌─────────────────┐
│ 手机设备 │
│ (接收通知) │
└─────────────────┘
六、重要注意事项
================================================================================
1. 推送类型问题
- 源码中定义ANDROID_PUSH_TYPE_HONOR = 9
- 实际运行版本使用pushType = 8
- 测试脚本需要使用8才能正常工作
2. 端口配置
- 推送服务运行在8080端口
- 测试脚本连接http://localhost:8080/android/push
3. 返回"ok"不代表推送成功
- "ok"只表示请求已接收
- 实际推送在后台异步执行
- 需要查看日志确认推送结果
4. 配置参数重要性
- appSecret和appId错误无法获取Token推送完全失败
- badgeClass错误可能影响推送或点击行为
- 必须从Honor开发者平台获取正确的配置
5. 设备Token
- 必须通过客户端SDK获取
- Token可能过期需要定期更新
- 不同设备有不同的Token
七、日志查看
================================================================================
推送服务日志位置:/home/renjianbo/push/push_server/push.log
关键日志信息:
1. "Android push {...}" - 接收到的推送消息
2. "Honor refresh token" - 刷新Token
3. "Honor token refreshed successfully" - Token刷新成功
4. "Push message {...}" - 发送给Honor的请求体
5. "Push to ... response {...}" - Honor API的响应
查看命令:
tail -f /home/renjianbo/push/push_server/push.log | grep -i honor
八、常见问题排查
================================================================================
问题1返回"ok"但手机收不到推送
排查步骤:
1. 查看推送服务日志确认是否调用了HonorPush
2. 检查Token是否成功获取
3. 查看Honor API响应确认sendResult是否为true
4. 检查设备Token是否有效
5. 检查手机通知权限和网络连接
问题2显示"unknown push type"
原因pushType不正确
解决使用pushType=8不是9
问题3Token刷新失败
原因appSecret或appId配置错误
解决检查honor.properties配置文件
问题4推送服务连接失败
原因:推送服务未启动或端口不对
解决确认服务运行在8080端口
九、测试脚本使用
================================================================================
文件test_honor_push.py
使用方法:
python3 test_honor_push.py
修改参数:
- DEVICE_TOKEN修改为实际的设备Token
- title和content修改推送标题和内容
- sender和target修改发送者和接收者ID
注意事项:
- 确保推送服务正在运行
- 确保设备Token有效
- 确保配置文件正确
十、总结
================================================================================
推送测试系统通过分层架构实现了从测试脚本到手机设备的完整推送流程。
关键特点是:
1. 异步处理,提高性能
2. Token缓存减少API调用
3. 多厂商支持,统一接口
4. 配置分离,易于管理
整个流程是异步的,测试脚本发送请求后立即返回,实际推送在后台执行。
要确认推送是否成功,需要查看推送服务的日志文件。
================================================================================
文档生成时间2026-01-04
================================================================================