Browse Source

fix: 三端原生推送全部改用本地固定配置

qmj 13 hours ago
parent
commit
55a4bfe3a6

+ 19 - 18
ruoyi-admin/src/main/resources/application.yml

@@ -51,29 +51,30 @@ omgpay:
     retry-delay-ms: 300000
     round-budget-seconds: 45
 
-# 普通业务推送通道(默认沿用 uniPush)
+# 普通业务推送配置固定在本地;三端密码/topic来自各自APNs JSON的pwd/packetName。
+# 当前业务通道仍沿用uniPush,测试接口可独立发送原生推送;切换通道需直接修改mode并重启。
 business-push:
-  mode: "${BUSINESS_PUSH_MODE:uni}"
-  apns-environment: "${BUSINESS_PUSH_APNS_ENVIRONMENT:production}"
+  mode: uni
+  apns-environment: production
   apps:
     user:
-      fcm-credentials-path: "${BUSINESS_PUSH_USER_FCM_CREDENTIALS_PATH:classpath:business-push/user-fcm-service-account.json}"
-      apns-certificate-path: "${BUSINESS_PUSH_USER_APNS_CERTIFICATE_PATH:classpath:business-push/user-apns.p12}"
-      apns-config-path: "${BUSINESS_PUSH_USER_APNS_CONFIG_PATH:classpath:business-push/user-apns-config.json}"
-      apns-certificate-password: "${BUSINESS_PUSH_USER_APNS_CERTIFICATE_PASSWORD:}"
-      apns-topic: "${BUSINESS_PUSH_USER_APNS_TOPIC:}"
+      fcm-credentials-path: "classpath:business-push/user-fcm-service-account.json"
+      apns-certificate-path: "classpath:business-push/user-apns.p12"
+      apns-config-path: "classpath:business-push/user-apns-config.json"
+      apns-certificate-password: "1234"
+      apns-topic: "com.twanmsdyh.app"
     merchant:
-      fcm-credentials-path: "${BUSINESS_PUSH_MERCHANT_FCM_CREDENTIALS_PATH:classpath:business-push/merchant-fcm-service-account.json}"
-      apns-certificate-path: "${BUSINESS_PUSH_MERCHANT_APNS_CERTIFICATE_PATH:classpath:business-push/merchant-apns.p12}"
-      apns-config-path: "${BUSINESS_PUSH_MERCHANT_APNS_CONFIG_PATH:classpath:business-push/merchant-apns-config.json}"
-      apns-certificate-password: "${BUSINESS_PUSH_MERCHANT_APNS_CERTIFICATE_PASSWORD:}"
-      apns-topic: "${BUSINESS_PUSH_MERCHANT_APNS_TOPIC:}"
+      fcm-credentials-path: "classpath:business-push/merchant-fcm-service-account.json"
+      apns-certificate-path: "classpath:business-push/merchant-apns.p12"
+      apns-config-path: "classpath:business-push/merchant-apns-config.json"
+      apns-certificate-password: "1234"
+      apns-topic: "com.twanmsdsj.app"
     rider:
-      fcm-credentials-path: "${BUSINESS_PUSH_RIDER_FCM_CREDENTIALS_PATH:classpath:business-push/rider-fcm-service-account.json}"
-      apns-certificate-path: "${BUSINESS_PUSH_RIDER_APNS_CERTIFICATE_PATH:classpath:business-push/rider-apns.p12}"
-      apns-config-path: "${BUSINESS_PUSH_RIDER_APNS_CONFIG_PATH:classpath:business-push/rider-apns-config.json}"
-      apns-certificate-password: "${BUSINESS_PUSH_RIDER_APNS_CERTIFICATE_PASSWORD:}"
-      apns-topic: "${BUSINESS_PUSH_RIDER_APNS_TOPIC:}"
+      fcm-credentials-path: "classpath:business-push/rider-fcm-service-account.json"
+      apns-certificate-path: "classpath:business-push/rider-apns.p12"
+      apns-config-path: "classpath:business-push/rider-apns-config.json"
+      apns-certificate-password: "1234"
+      apns-topic: "com.twanmsdqs.app"
 
 # IM 即时沟通配置
 im:

+ 3 - 0
specs/033-native-push-routing/plan.md

@@ -154,3 +154,6 @@ PowerShell 中仅对当前命令临时设置 `$env:JAVA_HOME='C:\Users\99029\.jd
 ## Task 9: 常驻匿名原生推送测试接口(2026-10-23 追加)
 
 保留普通业务 `business-push.mode` 的现有行为。在 `ruoyi-admin` 增加 `POST /system/push/testNative`:DTO 接收 `appType`(user/merchant/rider)、`platform`(android/ios)、原生 `deviceToken`、标题、正文及可选 payload,不查询用户数据。FCM/APNs 发送器在测试调用时只加载当前端凭据,iOS 测试固定使用生产网关;发送成功返回“服务商已接受”,失败返回脱敏错误类别。接口按用户要求允许匿名访问,文档明确公网滥用风险与真机测试前提。用发送器和 Controller 定向测试证明默认 `uni` 下仍可测试,且业务路由不改变。
+# 2026-10-26 配置方式执行记录
+
+按用户要求去掉business-push全部显式环境变量占位符,三端资源路径固定为既有classpath文件,密码/topic从同端配套JSON原值填入YAML。保留当前默认uni和production,不自动启用业务原生通道;不改推送payload、接收端选择和通话推送。使用现有APNs证书加载、配置校验和原生测试入口回归;不发送真实外部推送、不输出凭据内容。

+ 10 - 9
specs/033-native-push-routing/quickstart.md

@@ -12,19 +12,20 @@
 | 商家(含夜市及分管账号) | `merchant-fcm-service-account.json` | `merchant-apns.p12` | `merchant-apns-config.json` |
 | 骑手 | `rider-fcm-service-account.json` | `rider-apns.p12` | `rider-apns-config.json` |
 
-APNs 配置 JSON 使用原文件的 `packetName` 作为 topic、`pwd` 解锁同端 `.p12`;三端 Firebase 项目分别对应各自 App,不能共享 `server.json`。不使用 VoIP 证书。`application.yml` 默认指向上述 classpath 文件,仍保留显式文件路径及 APNs 密码/topic 覆盖能力,以兼容原部署方式。
+APNs配置JSON原文件的packetName/pwd分别提供topic和证书密码;2026-10-26按用户要求已将这些既有值直接固定到application.yml,各端路径也固定为自身classpath资源。不生成或重设证书密码。三端Firebase项目分别对应各自App,不共享server.json,不使用VoIP证书。
 
-| 设置 | 环境变量 | 默认/要求 |
+| 设置 | 本地配置项 | 当前值/要求 |
 | --- | --- | --- |
-| 通道 | `BUSINESS_PUSH_MODE` | `uni`;可选 `native`,重启后生效 |
-| APNs 环境 | `BUSINESS_PUSH_APNS_ENVIRONMENT` | `production`;测试包用 `development` |
-| 三端 FCM 路径覆盖 | `BUSINESS_PUSH_{USER|MERCHANT|RIDER}_FCM_CREDENTIALS_PATH` | 可选,默认各自的 classpath JSON |
-| 三端 APNs 证书路径覆盖 | `BUSINESS_PUSH_{USER|MERCHANT|RIDER}_APNS_CERTIFICATE_PATH` | 可选,默认各自的 classpath `.p12` |
-| 三端 APNs 配置路径覆盖 | `BUSINESS_PUSH_{USER|MERCHANT|RIDER}_APNS_CONFIG_PATH` | 可选,默认各自的 classpath 配置 JSON |
+| 通道 | `business-push.mode` | 固定`uni`;如启用`native`直接改YAML并重启 |
+| APNs环境 | `business-push.apns-environment` | 固定`production`;TestFlight/App Store均用正式环境 |
+| 三端FCM路径 | `apps.{user/merchant/rider}.fcm-credentials-path` | 固定各端classpath JSON |
+| 三端APNs路径 | `apps.{user/merchant/rider}.apns-certificate-path` | 固定各端classpath .p12 |
+| 三端配套JSON路径 | `apps.{user/merchant/rider}.apns-config-path` | 固定各端classpath配套JSON |
+| 三端密码/topic | `apps.{user/merchant/rider}.apns-certificate-password/apns-topic` | YAML固定值来自各自JSON,非服务端自行生成 |
 
-如需覆盖 APNs 配置 JSON,也可分别设置原有的 `BUSINESS_PUSH_{USER|MERCHANT|RIDER}_APNS_CERTIFICATE_PASSWORD` 与 `BUSINESS_PUSH_{USER|MERCHANT|RIDER}_APNS_TOPIC`;两项都显式提供时不读取配置 JSON。默认 `uni` 模式不读取原生凭据;`native` 模式启动时校验三端配置并加载文件,缺失、不可读或证书无私钥/已过期时启动失败。
+不再通过BUSINESS_PUSH系列环境变量修改配置;直接维护YAML。两项APNs值均固定后,发送器优先使用YAML,无需再从JSON补空值;未来更换证书时须同步更新YAML中的密码/topic,只改JSON不会覆盖这些固定值。uni模式不初始化业务原生凭据;native模式启动时校验三端并加载资源,缺失/不可读/无私钥/过期会失败。匿名测试仍按需初始化所选端。
 
-`BUSINESS_PUSH_APNS_ENVIRONMENT=development` 使用 APNs sandbox 网关,`production` 使用正式网关;两种环境读取同端同一份证书。已核对三端 `packetName` 与证书主题相符,但证书能否在两个网关实际投递仍需真机验证。三端证书到期日为 2027-07-30;更新任一资源后必须重新构建并部署 JAR,再做各端测试。
+development/production分别对应sandbox/正式网关,当前固定production;匿名测试始终走正式网关。已核对三端packetName与证书主题相符,但外部真实投递仍须真机验证。三端证书到期日为2027-07-30;改配置或资源后重新构建部署JAR并验证,不通过重新生成密码解决BadDeviceToken。
 
 ## 启用前条件
 

+ 3 - 0
specs/033-native-push-routing/spec.md

@@ -135,3 +135,6 @@
 - 原生能力交付后仍保持 `uni` 为默认值;凭据虽随包提供,只有运维确认 App 端 token、将服务端配置切为 `native` 并重启,才会启用原生通道。
 - 音视频通话使用其他推送流程,不受本次普通业务通知通道开关控制;`voIPToken` 及 VoIP 证书不用于本功能。
 - 证书与 Firebase 服务账号由用户提供并提交到本仓库;仓库访问、构建产物分发和凭据轮换由部署方按含密钥材料管理。默认 `uni` 下不加载这些凭据。
+# 2026-10-26 配置方式调整
+
+按用户要求,application.yml的business-push配置全部使用本地固定值,不再使用BUSINESS_PUSH系列环境变量占位符。三端FCM/证书/配套JSON路径各自固定,密码和topic分别复制既有同端JSON的pwd/packetName,不生成新密码,不更改证书。业务通道保留原默认uni;APNs环境固定production。需启用native或调整配置时直接编辑本地YAML并重启,匿名原生测试接口仍独立于业务通道。

+ 6 - 0
specs/033-native-push-routing/tasks.md

@@ -46,3 +46,9 @@ T001–T002 → T003/T004 → T005–T006 → T007 → T008–T009。FCM 与 APN
 - [x] T016 先写失败测试:默认 `uni` 时只按需初始化目标端 FCM/APNs,iOS 测试固定发送到 APNs 正式网关。
 - [x] T017 新增匿名 `POST /system/push/testNative`,直接使用请求提供的设备 Token,不查询账号;返回服务商接受或脱敏失败类别,保留普通业务推送模式。
 - [x] T018 更新 ApiPost 示例与风险说明,完成差异检查、定向测试和模块构建;真实手机通知由部署后人工验证。
+# 2026-10-26 本地固定配置
+
+- [x] 去掉business-push所有显式环境变量占位符;三端路径、密码、topic按本地配套文件固定,保持uni/production当前默认,补充来源注释与使用说明。
+- [x] APNs证书加载、配置校验、测试入口及发票鉴权定向回归通过;用户要求核对后分项中文提交并推送,提交状态及SHA以Git为准。
+
+2026-10-26:本地JDK21合并定向测试39项通过,失败/错误均0,包含真实三端classpath证书加载、模拟APNs/FCM响应及发票鉴权;不代表真实设备投递成功。未执行服务器部署或真实外部推送,BadDeviceToken尚待实际安装包/当前token/部署配置联调验证。