diff --git a/README.md b/README.md index a39ae49..6704390 100644 --- a/README.md +++ b/README.md @@ -132,6 +132,10 @@ Redis 鍵:`drivers:geo`(GEO 位置集合)、`driver:{id}:loc`(最新位 - ✅ **搶單鎖**:`SETNX` 確保同一單只有一位司機成單。 - ✅ **LINE 簽章安全**:以真實 HMAC-SHA256 簽章請求驗證——正確簽章 `200`、偽造簽章 `401`、缺簽章 `401`。 - ✅ **PostGIS**:pickup 點、`ST_DWithin` 圍籬、`ST_Length` 里程、`ST_AsGeoJSON` 回放均正確輸出。 +- ✅ **App 推播送出路徑(2026-07-30)**:`scripts/push_e2e.sh`/`push_cancel_e2e.sh` + 以假 device token 走完整鏈路,從 log 判定收件人——**10 則推播全部推對人** + (行程狀態、對話、協尋各步驟),取消三條另驗到「乘客自己取消完全沒有推播」。 + **不需 Firebase 憑證**(走 `LogPusher` stub);憑證到位後不必改程式碼。 --- diff --git a/docs/TODO.md b/docs/TODO.md index 71c49e6..02a2022 100644 --- a/docs/TODO.md +++ b/docs/TODO.md @@ -1223,6 +1223,38 @@ FCM/APNs token 是「這台裝置上的這個 App」的識別,換人登入 ## 下次任務 +> **🎯 2026-07-30 這一輪做完了什麼(開工先看這段)** +> +> 主題是「**推播這條通道從頭到尾打通**」,五支 PR 全部合併進 main: +> +> | PR | 內容 | 章節 | +> |---|---|---| +> | [#61](https://github.com/thothawei/fleet-dispatch/pull/61) | 乘客端行程狀態推播的**送出路徑**(先前只有司機派單那一條) | U | +> | [#62](https://github.com/thothawei/fleet-dispatch/pull/62) | 對話訊息推播給收訊那一方 | U2 | +> | [#63](https://github.com/thothawei/fleet-dispatch/pull/63) | 協尋單每一步推播給對方 | U3 | +> | [#64](https://github.com/thothawei/fleet-dispatch/pull/64) | 接單/取消失敗改回 **409**(先前 200+文案) | T1 | +> | [#65](https://github.com/thothawei/fleet-dispatch/pull/65) | **一支裝置 token 只能有一位主人**(換人登入的隱私外洩) | U5 | +> +> App 端同批:fleet-app #79(冷啟動推播補送)/#80(對話)/#81(協尋)+三支文件 PR。 +> +> **➡️ 下一步只剩一個外部卡點:Firebase 憑證**(`FCM_CREDENTIALS_FILE`)。 +> 憑證放進來後**不需要再改任何程式碼**——沒有憑證時走 `LogPusher` stub, +> 送出路徑已用真服務逐則驗過(見 U4 的表)。憑證到位那天要驗的是: +> 司機端「App 被殺 → 點推播 → 接單卡」、乘客端「App 被殺 → 點推播 → 畫面已是最新狀態」。 +> +> **想繼續推進、又不解憑證卡點的話,剩下的候選**(依價值排序): +> 1. **T4 多裝置同帳號**(產品決策:要不要一個帳號只能一台上線)——**需要你拍板**。 +> 2. **`/metrics`(P4 #20)**:目前沒有任何可觀測性;上線前遲早要做,但沒有使用者可見價值。 +> 3. **`GET /api/driver/rides`(P4 #18)**:司機歷史逐趟明細(收入面已由 earnings 涵蓋)。 +> 4. **對話/協尋的推播節流**:目前每則訊息都推一次。等真的有量再說—— +> 現在做只是猜。 +> +> **這一輪學到、值得記住的兩條**: +> - 通道清單要問的不是「WS 送了嗎」,而是「**他現在如果沒開著 App,會知道嗎?**」 +> (反過來也要問「這則需要吵他嗎」——`driver.location` 每 8 秒一則就不該推)。 +> - 補完通道後要接著問「**送對人了嗎**」——U5 那個隱私洞就是這樣查出來的, +> 而且它是**新功能帶進來的新風險**:推播管道打通之前,那張表寫錯沒有可觀察的後果。 + **新需求(2026-07-16 加入,尚未實作,皆需後端地基先行)**: - **N. 多乘客/多停靠點行程**:一張訂單最多 5 位乘客各自上下車+中斷點;司機端同步收到全程。 **車資已拍板(2026-07-16):全程實際路線含繞路**(N5)——需擴充 OSRM client 支援多 waypoint