这种“允许完全访问”的设置被广泛讨论,但我无法找到任何明确的答案。
根据technical specification,允许完全访问授权,以及“能够为服务器端处理发送击键和其他输入事件”。
然而,这些所谓的“击键”目前还不清楚恕我直言。 它们是仅在键盘应用程序中键入的键击,还是键入任何键盘的所有键击?
假设我有两个键盘KA和KB,两者都有完全访问权限。 KA和KB的容器应用程序可以在逻辑上访问各自的击键,并随心所欲地执行任何操作。
但KA可以访问以KB格式输入的击键吗?
谢谢!
[编辑14.10.09]
WDUK的回答清除了主机应用及其扩展程序之间的关系。
但是general KB documentation指的是“击键”而没有(?)提到这些击键是否仅限于键入的键盘扩展名。
虽然看起来很明显,令我困扰的是我找不到任何明确的陈述,特别是因为iOS警告声明“ [...]您输入的任何内容,包括您之前使用此键盘输入的内容”。 提及“您键入的任何内容”加上精确度“包括[...]此键盘”响起给我一个响铃。
更令人满意的警告是“ [...]您使用此键盘输入的任何内容,包括以前的按键”。
答案 0 :(得分:1)
“允许完全访问”使键盘扩展能够与其主机应用程序通信,反之亦然。
例如,如果我有KeyboardApp
,则会提供Keyboard
扩展名:
允许完全访问权限:KeyboardApp
能够查看Keyboard
扩展程序生成的数据,并将数据发送回扩展程序。
例如,如果我输入"Stac"
,Keyboard
将此信息发送给KeyboardApp
,则KeyboardApp
可以执行网络请求,然后认识到这应该是"StackOverflow"
1}}。 KeyboardApp
将结果发送回Keyboard
以自动完成。
没有完全访问权限:KeyboardApp
无法与Keyboard
对话,反之亦然。这意味着应用程序无法为扩展提供额外支持;扩展必须做所有艰苦的工作。
例如:在要键入的键之间滑动的功能不需要KeyboardApp
才能工作,该功能可以完全包含在扩展名中。这意味着它可以在没有启用“允许完全访问”的情况下工作。但是,任何花哨的自动填充都是不可能的,因为Keyboard
需要与KeyboardApp
交谈以获取该信息(因为Keyboard
无法访问互联网)
这是一个非常基本的例子,但证明了这一点。此外,扩展只能与其主机应用程序通信,它不能直接与其他应用程序通信。这意味着其他键盘及其各自的主机应用程序无法窥探使用不属于自己的键盘输入的数据。
Apple在App Extension编程指南中确实有相关文档。您应该看两个方面,首先是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