使用者在 iPhone 裝第三方輸入法,總被蘋果的「允許完整取用」警告嚇退一半
開發一款 iOS 第三方輸入法,最讓人心裡發苦的時刻,就是看著身邊朋友第一次裝好你的 App,滿懷期待地走進 iPhone 的「設定 → 一般 → 鍵盤」,伸手點開「允許完整取用(Allow Full Access)」的那一秒。
畫面正中央會立刻彈出一段措辭極其嚴厲的系統警告對話框,告訴你開發者可能會存取並傳送你在這支手機上打過的每一個字,連信用卡號和街道地址都不例外。
連我們自己第一次在測試機上看到這個對話框的時候,心裡都跟著揪了一下。好多朋友看到這行字的第一反應就是趕緊按取消,然後截圖傳 LINE 問我:你們做個輸入法為什麼要討這麼嚇人的權限?是不是我一旦按了允許,平時跟人聊天的每一次按鍵都會被即時傳到伺服器上去?
要回答這個問題,得先說說 Apple 是怎麼在 iOS 裡管理第三方鍵盤的。
在預設情況下,你把一個第三方鍵盤加進 iPhone 但沒開啟「允許完整取用」時,iOS 會把這個鍵盤關在一個完全斷網的沙盒裡。在這個沙盒裡,鍵盤只能做最基礎的本機按鍵輸出,甚至連跟它自己的主 App 共用一段設定檔(比如你在 UnimeType 主程式裡剛設定好的語言偏好或自訂 API 介面)都做不到,更不可能發起任何網路請求。Apple 在官方 Custom Keyboard 開發者文件裡把這套開關叫做 RequestsOpenAccess。
iOS 只有「徹底斷網且隔離」和「允許完整取用」這兩檔開關,中間沒有第三檔「只允許在使用者點按鈕時連網」的細粒度權限。只要一個鍵盤想要在主 App 和鍵盤擴充功能之間同步設定,或者想要在你點下某個按鈕時呼叫雲端模型,它就必須向系統要求開啟這個開關;而只要一要求,iOS 就會一視同仁地彈出那段最嚴厲的免責警告。
系統權限決定了「作業系統允許鍵盤做什麼」,而鍵盤自己怎麼寫程式碼,決定了「你的文字到底在什麼時刻才會離開手機」。
我們在開發 UnimeType 的 iOS 鍵盤時,定死了一條非常簡單的規則:平時你在鍵盤上敲字母、刪字、打標點,哪怕你已經開啟了「允許完整取用」,這些一般按鍵也 100% 留在手機本機,絕對不會在背景偷偷發起任何網路請求。

那什麼時候才會真正連網?只有你寫完了一句話(比如 gang gen sheji guowan onboarding, xiawu fa xin build,或者給外國朋友指路 Just take the MRT to 捷運市政府站 Exit 3),自己伸手點了一下鍵盤工具列上的 Convert、Polish 或 Explain 按鈕,並且確認過 AI 處理授權之後,鍵盤才會把完成那一次動作所必需的那一小段文字傳出去處理。在我們的代管服務閘道上,我們也預設啟用零資料保留與不儲存原則(例如在支援的上游路由中傳遞 zdr: true 與 store: false,且帳號資料庫絕不儲存訊息內文;完整細節可直接參閱隱私與受保護內容以及設定與快捷鍵指南)。如果你只是打開鍵盤正常打字聊天,沒有點那三個動作按鈕,它就不會傳送任何內容。
所以我平時給身邊朋友的建議一直很實在。如果你在手機上只打算用純本機的系統打字、完全不需要用到整句轉換或潤飾,或者這支手機是公司配發的受管裝置、按規定不允許使用第三方鍵盤或外部處理服務,那就保持關閉,直接用 iOS 內建鍵盤。
反過來,如果你確實想在 LINE 或 Slack 聊天框裡用 Convert 一鍵轉換中英混打,或者用 Polish 和 Explain 處理手頭的句子,開啟「允許完整取用」之後也只要記住兩個習慣就好。第一,如果整段話裡只有兩三個詞需要轉換,手動選取那幾個詞再點按鈕,這樣傳出去的就只有你選取的那幾個字;第二,遇到輸入密碼、助記詞、信用卡資訊(iOS 在標準密碼框裡本來就會自動強制切回系統原生鍵盤)或者高敏感機密時,絕不要去點任何 AI 動作按鈕(更多不適合使用 AI 鍵盤的場景可以參考這篇文章)。把系統底層機制和觸發邊界看清楚了,那個警告視窗也就沒那麼神祕了。
下載 UnimeType支援 iOS、Android、macOS、Windows 與 Linux