willBeginSending 应用程序在打开 EverNote 或任何其他扩展时未调用
Posted
技术标签:
【中文标题】willBeginSending 应用程序在打开 EverNote 或任何其他扩展时未调用【英文标题】:willBeginSendingToApplication not called when open EverNote or any other extention 【发布时间】:2015-12-21 11:50:45 【问题描述】:我有一个功能可以从 iPhone 和 iPad 应用程序中打开其他应用程序中的文档。 还设置了一个标志是否允许此操作。很少有应用可以列入白名单。
选择任何应用程序以打开doc
- (void)documentInteractionController:(UIDocumentInteractionController *)controller willBeginSendingToApplication:(NSString *)application
被调用。
在这种方法中,我可以检查是否允许选择的应用程序。
问题是针对 Note 的,Evernote 我们有两个选项 1- 它的扩展名 2- 打开。 上述方法被称为 2 选项。 但是扩展是直接启动的。
我没有找到为此调用的任何其他委托方法。
【问题讨论】:
在 MobileIron 支持中遇到了同样的问题。 community.mobileiron.com/docs/DOC-2001 感谢您提供 MobileIron 文档。我们在 SecurePIM 面临着完全相同的问题。如果苹果会为此提供一些修复,我很感兴趣。 【参考方案1】:希望您能想出办法,但我的组织也遇到了类似的问题,而且我们合作的 MDM 没有简单的解决方案。我们决定采用以下方法。
始终使用UIDocumentInteractionController
而不是UIActivityViewController
每当打开UIDocumentInteractionController
时重新初始化并将URL 设置为虚拟内容
符合UIDocumentInteractionControllerDelegate
,并根据您的白名单检查willBeginSendingToApplication
中的application
参数
如果application
是白名单的一部分,则将controller.url
的值更改为正确的内容
这种方法的缺点是只有 open-in 才能工作(扩展总是会得到虚拟内容)并且用户体验不是很好。但是,如果您正在构建企业应用程序并且必须防止数据泄露,那么这可能是最安全的方法。
您还可以查看这篇文章,了解用于隐藏第三方应用和扩展的私有 API,主要位于 UIActivityViewController
:
How to exclude Notes and Reminders apps from the UIActivityViewController?
不幸的是,它的工作方式似乎在 ios 8 和 9 之间发生了变化,并且在 10 中再次发生了变化,因此它不是最佳的。我建议传递虚拟内容。
【讨论】:
以上是关于willBeginSending 应用程序在打开 EverNote 或任何其他扩展时未调用的主要内容,如果未能解决你的问题,请参考以下文章