共享扩展以打开包含应用程序

zan*_*ken 22 cocoa-touch ios ios8-share-extension

我想为我的应用创建一个Android Style共享功能.我创建了一个共享扩展,当你在股票照片应用程序中选择图片并按下共享时,它会被调用.现在我想将这些图片发送到主应用程序并在那里处理.我现在的问题是:

  1. 在共享扩展程序窗口上按下按钮后iOS可以打开我的应用程序吗?
  2. 如何在主应用程序中获取图片文件?

coy*_*yer 30

Swift 3.1中的工作解决方案(在iOS10中测试):

您需要创建自己的URL Scheme,然后将此函数添加到ViewController并调用它@objc

@objc func openURL(_ url: URL) -> Bool {
    // Code below.
}
Run Code Online (Sandbox Code Playgroud)

编辑:澄清说明: openURL是UIApplication的一种方法 - 因为你的ShareExtension不是从UIApplication派生的,所以我添加了自己openURL("myScheme://myIdentifier")的定义与UIApplication相同的定义,以保持编译器满意(这样#selector(openURL(_ :) can can被发现).

然后我通过响应者,直到找到一个真正来自openURL并响应的响应者openURL.

更简单的示例代码,它将ShareExtension中的文件复制到本地目录,序列化文件名并在另一个应用程序上调用openURL:

Argument of '#selector' refers to instance method 'openURL' that is not exposed to Objective-C
Run Code Online (Sandbox Code Playgroud)

  • @coyer:如何从共享扩展中打开它可以解释更多 (3认同)
  • 在应用商店提交中接受了吗? (2认同)

Tom*_*ton 11

目前没有办法做到这一点.共享扩展程序无法打开包含的应用程序.

共享扩展的预期方法是它们自己处理所有必要的工作.扩展可以通过使用自定义框架与其包含的应用程序共享代码,因此在大多数情况下这没有问题.

如果要将数据提供给应用程序,可以设置应用程序组,以便拥有共享目录.扩展可以在那里写入数据,应用程序可以读取它.但是,直到下次用户启动应用程序时才会发生这种情况.

  • 我赞成这个答案,因为DropBox和Maps.me都在使用他们的共享扩展后打开他们的应用程序.所以有一种方法.现在我们只需要找到它...... (13认同)
  • 那么什么样的扩展是"复制到iBooks"?只要尝试共享PDF,它就会显示在共享扩展视图中.我也看到了其他非Apple扩展具有相同的行为.必须有办法使这项工作. (6认同)
  • 那些应用程序**没有共享扩展**.Dropbox具有"今天"扩展名和文件提供程序扩展名,Maps.me根本没有任何扩展名. (4认同)
  • @TomHarrington它是一个应用程序,完全按照你们所说的不可能做到:https://itunes.apple.com/br/app/opener-open-links-in-apps/id989565871 (4认同)

Che*_*eny 9

从技术上讲,您无法从共享扩展中打开包含应用程序,但您可以安排本地通知,这就是我最终要做的。就在我调用 super.didSelectPost 之前,我用一些文本安排本地通知,如果用户想要打开包含应用程序,他们可以,如果不是 - 他们可以继续他们的工作流程。我什至认为这是比自动打开包含应用程序并破坏他们正在做的事情更好的方法。