Degraded mode 設計
Degraded mode 是指系統的部分功能因為外部依賴不可用(網路斷線、服務故障、權限缺失)而暫時無法運作,但其他功能仍可正常使用。設計重點是讓使用者清楚知道哪些功能可用、哪些暫時不可用,而非讓整個 app 因為一個功能的失敗而停擺。
三種處理方式
靜默隱藏
把不可用的功能從 UI 上移除 — 按鈕消失、選單項目隱藏。使用者看不到這些功能,自然不會嘗試使用。
靜默隱藏的風險是使用者困惑。經常使用的功能突然消失,使用者會以為是 bug 或 app 更新移除了功能。如果功能在恢復後重新出現,使用者的困惑加劇。
靜默隱藏只適合使用者從未使用過的功能(新使用者尚未配對時隱藏連線按鈕)。已經使用過的功能突然隱藏會破壞使用者的心理模型。
明確標示
功能的 UI 元素保留在畫面上,但加上不可用的視覺標示 — 灰色按鈕、「離線不可用」標籤、禁用狀態。使用者能看到功能存在,也知道目前暫時無法使用。
明確標示的設計要點:
說明原因。「搜尋功能需要網路連線」比單純的灰色按鈕提供更多資訊。使用者知道原因後能自行判斷要等還是離開。
說明恢復條件。「連上網路後自動恢復」讓使用者知道什麼時候功能會回來。「重新啟動 app 後可用」讓使用者知道需要採取行動。
避免只靠顏色傳達狀態。灰色按鈕對色盲使用者可能不明顯。搭配文字標籤或圖示。
替代方案
提供不需要失敗依賴的替代功能。線上搜尋不可用時提供離線搜尋(本地快取的資料)。即時同步不可用時提供本地儲存(恢復連線後自動同步)。
替代方案的 UX 需要讓使用者知道目前使用的是替代版本。「離線模式 — 搜尋結果可能不是最新的」讓使用者對結果的準確度有正確預期。
全域 vs 功能級降級
全域降級
整個 app 進入降級模式 — 頂部顯示「離線模式」橫幅,所有需要網路的功能統一標示為不可用。適合網路連線是 app 核心依賴的場景。
全域降級的 UI 實作簡單(一個全域狀態控制所有功能的可用性),但可能過度限制 — 部分功能不依賴網路也能運作。
功能級降級
每個功能獨立判斷自己的可用狀態。搜尋需要網路但筆記不需要 — 網路斷線時搜尋不可用,筆記正常。
功能級降級更精確但實作更複雜 — 每個功能需要宣告自己的依賴,並在依賴不可用時提供對應的 UI 狀態。
降級狀態的進入和退出
進入
依賴不可用時自動進入降級狀態。進入時通知使用者(Snackbar、橫幅、狀態變更)。
避免頻繁切換 — 網路訊號不穩定時,每秒在正常和降級之間切換會讓 UI 閃爍。加入穩定性判斷(連續 N 秒不可用才進入降級,連續 N 秒可用才退出降級)。
退出
依賴恢復後自動退出降級狀態。退出時通知使用者(「已恢復連線」),並自動執行待完成的操作(同步、補發事件)。
下一步路由
- 錯誤訊息的撰寫 → 錯誤訊息撰寫原則
- 重試循環的逃生口 → error → retry → error 循環的逃生口
- 網路 gate 的 UX 處理 → ux-design 模組二 網路斷線 UX 模式
#ux-design #error-recovery #degraded-mode #offline #fallback