feat(tng): 自动拉红包历史/详情,并展示发放与领取时间
从 ILoginStorage 与官方历史页缓存请求模板,级联拉详情;领取台列表用发放时间而非拉取时间。
This commit is contained in:
@@ -55,31 +55,35 @@ powershell -ExecutionPolicy Bypass -File scripts/start-debug-server.ps1
|
||||
|
||||
消费端详情领取列表字段主要是 **`activityPoolInfos`**(`receiverName` + `amount`),不是商户版的 `receiverList`。
|
||||
|
||||
## 推荐操作流程(自动拉详情)
|
||||
## 推荐操作流程(自动拉历史 + 详情)
|
||||
|
||||
历史页本身没有排行数据。自动拉取需要一次「带登录态的详情请求」作模板:
|
||||
登录后**无需再手动点详情灌模板**,也**不必反复进历史页**:
|
||||
|
||||
1. 打开 TNG → **Money Packet**
|
||||
2. **先手动点开任意一条历史红包详情**(看到排行榜即可)
|
||||
- 日志:`cached detail request template`(缓存 session / 请求模板)
|
||||
3. **返回历史列表**,停留几秒
|
||||
- 日志:`history hit → schedule auto detail`
|
||||
- 随后:`auto-detail using template` / `auto-detail ok activityId=... claims=N`
|
||||
4. 刷新领取台:http://127.0.0.1:8765/mmp
|
||||
1. 打开 TNG 并完成登录 / PIN(任意前台页面即可)
|
||||
2. Hook 从 `ILoginStorage` / 历史请求自动取 `sessionId`;`Activity.onResume` 约每 **45 秒**主动调一次 `moneyPacketHistoryList`(主线程)
|
||||
3. 历史返回后自动按 `activityId` 在主线程串行拉详情(间隔约 200ms),推送到领取台
|
||||
4. 仅打开 **Money Packet 历史页**时,App 自己的列表响应也会立刻触发步骤 3
|
||||
5. 打开 http://127.0.0.1:8765/mmp 刷新查看
|
||||
|
||||
若跳过第 2 步,自动请求常返回 `totalCount:0`(缺 `sessionId` 等),台上会没有领取人。
|
||||
日志期望:
|
||||
|
||||
也可继续「只点详情」:每进一个详情就会捕获该 `activityId` 的排行。
|
||||
- `hooked ILoginStorage getters` / `login from storage session=…` / `cached history request template`
|
||||
- `history hit → schedule auto detail` 或 `auto-history ok → schedule details`
|
||||
- `auto-detail ok activityId=… claims=N`
|
||||
|
||||
若仍无数据:确认已安装最新 Xposed 模块并强停重启 TNG;看是否出现 `auto-detail empty claims` / `no sessionId`。
|
||||
|
||||
## 去重与刷新行为
|
||||
|
||||
| 规则 | 说明 |
|
||||
|------|------|
|
||||
| 标识 | 以 `activityId` 区分红包 |
|
||||
| 短时去重 | 同一 `activityId` + **相同领取名单**,约 **20 秒内**不重复推送(防双 Hook / 连点) |
|
||||
| 可刷新 | 超过 20 秒再进详情,或领取名单变化,会再次推送 |
|
||||
| sessionId | 自动:`ILoginStorage` / Repository.loginStorage;有真实请求时也会缓存 |
|
||||
| 自动历史 | 前台 `onResume` 触发,约 **45 秒**冷却;也可由首次缓存到 RpcTask 触发 |
|
||||
| 短时去重 | 同一 `activityId` + **相同领取名单**,约 **20 秒内**不重复推送 |
|
||||
| 自动拉冷却 | 同一 `activityId` 自动拉详情成功后约 **60 秒**内不重复自动拉 |
|
||||
| 调试台 | 同一 `activityId` 只保留最新完整快照做排行;双通道推送有短时内容去重 |
|
||||
| 包间间隔 | 自动拉详情串行,约 **150ms**/条 |
|
||||
| 调试台 | 同一 `activityId` 只保留最新完整快照;双通道短时内容去重 |
|
||||
|
||||
日志里若出现 `skip dup activityId=...`,表示短时去重生效,不是没抓到。
|
||||
|
||||
@@ -95,10 +99,11 @@ adb logcat | findstr TngMmp
|
||||
|------|------|
|
||||
| `TngMmp installed` | Hook 已加载 |
|
||||
| `cached RPC task MoneyPacketRpcTask` | 已缓存 RPC 代理 |
|
||||
| `cached detail request template` | 已缓存手动详情请求(自动拉可用) |
|
||||
| `history hit → schedule auto detail` | 历史列表触发自动拉 |
|
||||
| `auto-detail empty claims ... totalCount:0` | 请求缺登录态或模板未缓存 |
|
||||
| `auto-detail ok activityId=... claims=N` | 自动拉成功 |
|
||||
| `cached detail request template` | 已缓存手动详情请求(可选加速) |
|
||||
| `login from storage session=…` | 已从 ILoginStorage 自动取到 session |
|
||||
| `auto-history ok → schedule details` | 已自动拉历史列表 |
|
||||
| `auto-detail empty claims ... totalCount:0` | 请求缺登录态或服务端空结果 |
|
||||
| `auto-detail ok activityId=... claims=N` | 自动拉详情成功 |
|
||||
| `captured activityId=... claims=N` | 已转发到 notiMessage / 调试台 |
|
||||
|
||||
其它检查:
|
||||
|
||||
@@ -26,8 +26,9 @@
|
||||
### 要点
|
||||
|
||||
1. 历史列表只有摘要;领取排行来自详情 RPC(`activityPoolInfos`)。
|
||||
2. **自动拉详情**:先手动点开任意一条详情缓存请求模板(含 session),再回历史页即可批量拉。
|
||||
3. 去重:同一 `activityId` + 相同领取名单约 20s 内不重复推。
|
||||
2. **sessionId** 从 `ILoginStorage` 自动读取,一般不必再手动点详情。
|
||||
3. **自动拉历史**:前台 Activity resume(约 45s 冷却)主动调 `moneyPacketHistoryList`,再级联拉详情。
|
||||
4. 去重:同一 `activityId` + 相同领取名单约 20s 内不重复推。
|
||||
|
||||
### eKYC「验证您的帐户」强制页(2026-08-04)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user