【问题标题】:How to check "Allow Full Access" is granted since iOS 8.3 *from the container app*自 iOS 8.3 *从容器应用程序*以来,如何检查“允许完全访问”
【发布时间】:2015-10-08 10:49:27
【问题描述】:

在 iOS 8.3 之前,检查是否授予键盘扩展“允许完全访问权限”的方法是通过 容器应用程序中的以下代码:

- (BOOL)isOpenAccessGranted{
   return [UIPasteboard generalPasteboard];
}

然而,正如这个流行的 SO 答案 thread 上的 cmets 所指出的,从 iOS 8.3 开始,即使未授予完全访问权限,应用程序也可以从共享组容器中读取,因此上述代码始终返回 true。但是,写入权限只有在“允许完全访问”打开时才被授予。

我已尝试在UIPasteboard 上列出基于 Apple 的 docs 的所有粘贴板,但它没有说明哪些是可访问的。对此的任何见解都非常感谢。

【问题讨论】:

  • 一般粘贴板应该可供所有人读取和/或写入。共享容器是另一回事。您是否正在尝试让应用程序写入可通过键盘使用的粘贴板?你能解释一下你想在什么场景中使用它吗?
  • 嗨@Omar - 是的,确实我正在尝试测试共享容器是否可写(在iOS键盘上授予“完全访问权限”允许它是可写和可读的,因此可以从容器应用程序基于从键盘保存的内容)。以前 generalPastboard 就足够了。
  • 请参阅“默认情况下,键盘无法访问网络,并且无法与其包含的应用共享容器。要启用这些功能,请将 Info.plist 文件中 RequestsOpenAccess 布尔键的值设置为是的。”在developer.apple.com/library/ios/documentation/General/… 和设置为开时的可用选项developer.apple.com/library/ios/documentation/General/…
  • 感谢@Omar 的跟进。这些选项,例如RequestOpenAccess 和应用程序组的配置已经在我的项目中完成(基于您提供的链接)。我要问的是,一旦配置好,我如何通过包含应用程序检测用户是否已打开容器与其包含应用程序之间的数据共享。然后我可以根据用户的操作提供不同的功能。

标签: ios objective-c ios8 ios8-extension ios-keyboard-extension


【解决方案1】:

在 iOS 8.4 上,如果不允许完全访问,UIPasteboard.generalPasteboard()nil。 尝试删除键盘和容器应用程序 + clean and build 应用程序,然后再次测试。应该可以正常工作。

【讨论】:

  • 我尝试了上面的代码,但即使“完全访问”没有给出它返回是。
【解决方案2】:

这是我当前工作/部署的实现:

- (void)viewDidAppear:(BOOL)animated {
    NSLog(@"keyboard has full access? %@", ([self validateKeyboardHasFullAccess] ? @"YES" : @"NO"));
}

- (BOOL)validateKeyboardHasFullAccess {
    return !![UIPasteboard generalPasteboard];
}

【讨论】:

  • 感谢您的意见!这在从键盘内部检查完全访问权限时效果很好,但我想知道是否还有一种方法可以从容器应用程序中执行此操作。
猜你喜欢
  • 2018-04-11
  • 2017-01-17
  • 2014-10-17
  • 1970-01-01
  • 1970-01-01
  • 2015-11-14
  • 2017-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多