打开EverNote或任何其他扩展时,不会调用willBeginSendingToApplication

我有一个function可以在iPhone和iPad应用程序的其他应用程序中打开文档。 还设置了是否允许该操作的标志。 很less的应用程序可以被列入白名单。

当select任何应用程序打开文档

- (void)documentInteractionController:(UIDocumentInteractionController *)controller willBeginSendingToApplication:(NSString *)application 

叫做。

在这种方法中,我可以检查是否允许select的应用程序。

问题是注意,Evernote我们得到两个选项1-扩展2-打开英寸上面的方法被称为2选项。 但是扩展是直接启动的。

我没有find任何其他委托方法要求这个。

希望你能想出一些东西,但是我的组织面临着类似的问题,我们合作的MDM并没有一个简单的解决scheme。 我们已经决定采用以下方法。

  • 始终使用UIDocumentInteractionController而不是UIActivityViewController

  • 每当UIDocumentInteractionController被打开,重新启动并将URL设置为虚拟内容

  • 符合UIDocumentInteractionControllerDelegate并检查UIDocumentInteractionControllerDelegateapplication参数willBeginSendingToApplication与您的白名单

  • 如果application是白名单的一部分,则将controller.url的值更改为正确的内容

这种方法的缺点是只有开放式才能工作(扩展总是会得到虚拟内容),用户体验也不是很好。 但是,如果您正在构build企业应用程序,并且必须防止数据泄漏,那么这可能是最安全的方法。

您也可以查看这篇文章的私人API来隐藏第三方应用程序和扩展,主要在UIActivityViewController

如何从UIActivityViewController中排除Notes和提醒应用程序?

不幸的是,这个工作的方式似乎已经改变了iOS 8和9之间,并再次与10,所以它不是最佳的。 我build议传递虚拟内容。