結論
iOS 沒有提供 App 被用戶卸載時的回調方法。系統直接刪除 App 沙盒,不執行任何代碼。
錯誤做法
嘗試在 `applicationWillTerminate`、`deinit` 或推送通知中通知服務器「我被卸載了」——不可行。
正確架構:服務器端控制會話狀態
- Token 過期機制:登錄簽發短效 Access Token(如 2 小時)+ 長效 Refresh Token(如 30 天)。App 啟動時用 Refresh Token 換新 Access Token。
- 設備註冊表:服務器記錄 `user_id -> device_id + last_active_time`。登錄新設備時,標記舊設備 Token 失效。
- 心跳/定時清理:若某設備超過 N 天無請求,自動註銷其 Token。
- App 端主動登出:提供「退出登錄」按鈕調用登出 API,刷新服務器狀態。
優勢
- 不依賴客戶端不可控的生命週期事件。
- 支持多設備登錄策略(踢下線、共存等)。
- 安全性更高,Token 可隨時撤銷。