For AI agents: fetch the complete documentation index at /llms.txt, the full documentation corpus at /llms-full.txt, the agent skill at /skill.md, or this page as Markdown at /zh-tw/docs/mobile/notifications.md (or send Accept: text/markdown).
通知與推送
應用內收件箱、渠道偏好,以及 Expo 推送管線。
收件箱與渠道偏好
通知標籤頁列出 GET /api/notifications 返回的工作區通知,並對通知 id 發起 PATCH 標記已讀。“設定 → 通知”編輯共享的渠道偏好 —— emailBilling、emailInvites、inAppProduct —— 通過同一路由偏好檢視的 GET 與 PATCH 完成,正是 Web 應用使用的契約。未讀數量會顯示在首頁。
為推送註冊裝置
登入時 —— 以及每次切換工作區時 —— 應用會請求通知許可權、從應用配置解析 EAS 專案 id、獲取 Expo 推送 token,並提交到 POST /api/mobile/push-tokens。Android 在預設渠道上以高重要性註冊。
註冊結果報告為 registered、permission_denied 或 unavailable,且絕不拋錯 —— 推送永遠不會阻塞登入。Expo Go 與模擬器無法完成註冊,真實覆蓋需要開發構建。token 儲存在 SecureStore(supastack.push.token)中,以便退出登入時在會話 Cookie 銷燬前先將其登出。
服務端投遞與回執
GET 列出成員的 token,POST 在當前工作區下 upsert token,DELETE 撤銷 —— 列表與撤銷保持使用者級作用域,沒有工作區的賬戶也能清理。每個使用者最多保留二十個裝置 token;多註冊一個會修剪最舊的那個。
每條應用內工作區通知也會盡力推送:伺服器以一百條為一批呼叫 Expo 推送 API,記錄 ok 票據,並立即清理 DeviceNotRegistered 的 token。可選的服務端專用 EXPO_ACCESS_TOKEN 會為這些呼叫附加 Bearer 頭,且絕不寫入日誌。一個平臺計劃任務每三十分鐘核對一次回執並清掃過期票據 —— 它與其他平臺計劃任務共用同一個排程 tick 驅動。
# Optional server-only token for authenticated Expo push sends:
# apps/web/.env.local
EXPO_ACCESS_TOKEN=點選通知開啟應用路由
傳送方把 Web 路徑附在 data.href 上。應用會校驗它 —— 只允許以斜槓開頭的絕對路徑、限制長度、禁止路徑穿越 —— 並把已知路徑對映為原生路由,例如 /billing 到 /settings/billing、/dashboard 到 /home。未登入時到達的點選會先緩衝,登入完成後再回放。
驗證與排障
在開發構建上測試:授予與拒絕許可權、在“設定 → 通知”中切換推送 —— 介面會把此裝置報告為 enabled、disabled 或 denied —— 並分別以冷態與熱態點選通知。如果關閉時報錯,說明服務端登出失敗,裝置會保持註冊狀態直到成功為止。