2014-10-08 121 views
2

這個「允許完全訪問」的設置被廣泛討論,但我無法找到任何明確的答案。iOS 8:「允許完全訪問」是否允許開發人員訪問其他鍵盤的擊鍵?

根據technical specification,允許完全訪問權限,其中包括「能夠發送鍵擊和其他輸入事件以進行服務器端處理」。

但是,這些所謂的「按鍵」不清楚恕我直言。 它們是僅鍵盤應用程序中鍵入的擊鍵,還是使用任何鍵盤鍵入的所有擊鍵?

假設我有兩個鍵盤KA和KB,同時授予了這兩個鍵盤的完全訪問權限。 KA和KB的容器應用程序可以邏輯地訪問它們各自的按鍵,並隨心所欲地執行任何操作。

但是KA可以訪問在KB中鍵入的擊鍵嗎?

謝謝!

[編輯09年10月14日]

WDUK的答案清除了主機的應用程序及其擴展之間的關係。

但是general KB documentation引用「keystrokes」而沒有(?)提及這些擊鍵是否僅限於它們鍵入的鍵盤擴展名。

儘管看起來很明顯,但令我困擾的是我找不到任何明確的聲明,尤其是因爲iOS警告聲明「[...]您輸入的任何內容,包括您之前使用此鍵盤輸入的內容」。 提及任何你鍵入的東西加上精度包括這個鍵盤」給我敲響了一個鐘。

更statisfying警告是「[...]你這個鍵盤,包括以前的擊鍵鍵入」。

回答

1

「允許完全訪問」使鍵盤擴展可以與其主機應用程序通信,反之亦然。

舉例來說,如果我有我的KeyboardApp,這提供了一個Keyboard擴展:

  • 允許完全訪問:KeyboardApp可以查看由Keyboard擴展生成的數據,並將數據發送回擴展。

    例如,如果我在"Stac"鍵入,Keyboard其發送到KeyboardAppKeyboardApp可以執行web請求,然後認識到,這應該意味着"StackOverflow"KeyboardApp將結果發送回Keyboard以自動完成。

  • 沒有完整訪問權限:KeyboardApp無法與Keyboard通話,反之亦然。這意味着應用程序無法爲擴展提供額外的支持;該擴展必須做所有的辛勤工作。

    例如:在按鍵之間滑動輸入的功能不需要KeyboardApp工作,該功能可以完全包含在擴展中。這意味着它將在未啓用「允許完全訪問」的情況下運行。任何花哨自動完成,雖然是不可能的,因爲Keyboard就需要跟KeyboardApp以獲取該信息(因爲Keyboard不具備互聯網接入)

這是一個非常簡單的例子,但說明了這一點。另外,擴展只能與主機應用程序通信,不能直接與其他應用程序通信。這意味着其他鍵盤及其各自的主機應用程序無法窺探使用不屬於自己的鍵盤鍵入的數據。

Apple在應用程序擴展編程指南中有關於此的文檔。有兩個方面你應該看看,首先是App Extensions如何工作(以及他們如何不能直接與其他應用程序交流):https://developer.apple.com/library/ios/documentation/General/Conceptual/ExtensibilityPG/ExtensionOverview.html#//apple_ref/doc/uid/TP40014214-CH2-SW2

還有關於自定義鍵盤和允許完全訪問的信息(使用全鍵訪問是RequestsOpenAccess):https://developer.apple.com/library/ios/documentation/General/Conceptual/ExtensibilityPG/Keyboard.html

+0

感謝您的詳細解答!這證實了我的懷疑。無論如何,我找不到任何地方明確指出,主機應用程序只能從其KB擴展內訪問擊鍵... – 2014-10-09 07:24:41

+0

我已更新答案與蘋果的文檔有關的主題 – WDUK 2014-10-09 09:26:32

+0

感謝您的快速更新!這清除了主機應用程序和它們的擴展之間的關係......但是一般的KB文檔引用「擊鍵」而沒有提到這些擊鍵是否僅限於它們鍵入的鍵盤擴展。儘管看起來很明顯,但令我困擾的是我找不到任何明確的聲明,尤其是因爲iOS警告聲明「[...]您輸入的任何內容,包括您之前使用此鍵盤輸入的內容」。提及「任何你輸入的內容」加上「包括這個kb」的精確度「爲我敲響了警鐘。 – 2014-10-09 09:52:42