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 或任何其他扩展时未调用的主要内容,如果未能解决你的问题,请参考以下文章

在iOS中终止后如何在打开应用程序时重新打开最后一个视图

手机浏览器打开app查看

有没有办法打开推送通知中收到的 url 而无需在 ios 10 中打开应用程序?

可以在首次打开更新的应用程序之前打开应用程序扩展程序吗?

微信小程序直播怎么在网页打开

苹果手机怎样增加打开方式?