如何把 App Intents 設計成可跨裝置、可撤銷的安全產品動作?
1. 場景、目標與邊界
協作 App 中有專案、留言和工作。使用者可能透過 Siri、Spotlight、捷徑或 Apple Intelligence 發起「完成工作」「分享專案」「刪除留言」等動作。動作需要在不同入口保持相同權限和結果,也能在手機與平板之間繼續。
先定義邊界:App Intents 是系統可探索的動作與實體介面,不應繞過現有伺服器授權、稽核或交易。系統建議提高觸達率,卻不代表動作天然可信;產品必須把每個 intent 當成公開呼叫面來設計。
2. App Intents 的產品價值
Apple 的 AppIntent 協定讓應用程式動作被 Siri、Spotlight、捷徑和 Apple Intelligence 探索。2026 年的 App Intents 更新還提供 app schema、跨裝置穩定實體識別 SyncableEntity、敏感或破壞性動作的所有權確認 OwnershipProvidingEntity,以及把其他應用程式提供的內容接入參數的 IntentFile。
這些能力解決探索和語意互操作問題,不會替你決定業務權限、衝突處理或撤銷策略。產品設計要把「使用者想做什麼」「系統能否安全代辦」「失敗後如何恢復」拆開。
3. 建模動作與實體
為每個 intent 寫清輸入、可見範圍、前置條件、結果和副作用。實體顯示名稱可以變化,但業務 ID 必須穩定、可驗證,並與目前使用者和租戶綁定。不要把列表位置、標題或本地資料庫主鍵直接當成跨裝置識別。
struct CompleteTaskIntent: AppIntent {
static var title: LocalizedStringResource = "完成工作"
@Parameter(title: "工作")
var task: TaskEntity
func perform() async throws -> some IntentResult {
try await TaskService.complete(taskID: task.id)
return .result()
}
}實體解析失敗、權限變更或版本不相容時,應回傳可理解的選擇或登入路徑,不能猜測相似專案後直接執行。
4. 設計跨裝置穩定身分
如果工作可在多台裝置繼續,實體必須實作穩定識別語意,並由伺服器保證同一實體 ID 在裝置間指向同一資源。同步層要處理刪除、封存、租戶遷移和離線快取過期;解析時再次向伺服器確認目前使用者是否仍擁有存取權。
不要把 SyncableEntity 當成同步資料庫。它表達識別可跨裝置保持穩定,實際資料同步、衝突解決和撤銷仍由產品後端負責。發生合併或遷移時保留別名對應和稽核記錄,避免舊捷徑指向錯誤實體。
5. 敏感動作的確認與所有權
刪除、公開分享、轉移權限等動作需要在執行前確認使用者對實體的所有權或操作權限。使用 OwnershipProvidingEntity 表達實體歸屬,並讓確認文案說明對象、影響和可逆性。確認應綁定目前請求、使用者和資源版本,不能重用過期確認。
如果實體屬於團隊或公開空間,所有權判斷必須由伺服器回傳,不能只看本地快取。對「不再詢問」的偏好設定範圍要窄,並對高風險動作保留再次確認和稽核。
6. 冪等、授權與副作用
系統可能重試 intent,捷徑也可能被使用者重複執行。每個改變狀態的 intent 都應攜帶冪等鍵和資源版本;伺服器在授權通過後執行條件更新,重複請求回傳同一個業務結果。讀取動作可以更快,但仍要檢查可見範圍。
不要把權限寫在自然語言參數裡。伺服器根據工作階段、租戶、實體歸屬和目前版本重新驗證,並記錄入口(Siri、Spotlight、捷徑或 App 內)、呼叫者裝置和結果。失敗回應應區分登入過期、無權存取、實體已變更和服務暫時不可用。
7. 探索、觀測與失敗恢復
按使用者價值選擇 app schema 和可探索動作,避免把所有內部 API 暴露給系統。對每個 intent 監測解析成功率、權限拒絕、確認放棄、重複執行、跨裝置恢復和最終完成率;分入口觀察建議帶來的轉換,而不是只看呼叫量。
動作執行前顯示關鍵摘要,執行後提供結果和撤銷入口。網路中斷時保存可重試的請求狀態,但不要在背景無限重放破壞性動作。實體已刪除或版本衝突時,回傳替代選擇和人工處理路徑,並保留稽核事件。
8. 評分要點與追問
必須說清
- 把 App Intents 視為公開產品介面,仍需伺服器授權、稽核、冪等和版本檢查。
- 區分穩定實體識別與真正的資料同步,能處理刪除、遷移、離線和衝突。
- 為敏感動作設計所有權確認、有限的免確認偏好、撤銷和失敗恢復。
常見追問
- 使用者在手機上確認刪除後,平板離線捷徑又執行一次,伺服器如何保證結果一致?
- 團隊共用專案沒有單一擁有者時,誰可以確認「轉移權限」?
- 如何判斷某個 intent 值得進入系統建議,而不是增加無效雜訊?
評分參考
優秀答案會把探索、身分、授權、確認、冪等和恢復連成同一條產品鏈路:系統入口只負責表達意圖,伺服器負責最終決策,使用者始終能看懂影響並在失敗後繼續完成工作。