从 iOS Safari 共享扩展打开主应用程序
Posted
技术标签:
【中文标题】从 iOS Safari 共享扩展打开主应用程序【英文标题】:Open the main app from a iOS Safari Share Extension 【发布时间】:2017-01-03 17:58:15 【问题描述】:我有一个 Safari 共享扩展,我希望能够从该扩展中打开主应用程序。用户会收到一条提醒,提示他们可以选择打开应用程序。
func openAppHandler()
self.extensionContext?.completeRequest(returningItems: []) (success) in
if let url = URL(string: "myapp://...")
self.extensionContext?.open(url, completionHandler: nil)
警报出现在方法didSelectPost()
被调用后,你可以看到它出现在扩展的后台优先级完成块中。 open
方法在它的文档中说“在 ios 8 中,只有 Today 扩展点(用于创建小部件)支持这种方法。”我猜 Safari 共享扩展仍然不支持它。
有人知道从共享扩展打开我的主应用程序的方法吗?
【问题讨论】:
据我所知,共享扩展仍然无法做到这一点。您可以做的最好的事情是创建一个“保存到 yourapp”并将文件上传到您的应用程序中,准备好作为草稿使用。用户仍然需要手动打开应用程序。 我担心这就是我得到的答案。希望有一些方法可以做到这一点,如果没有,希望它会在更高版本的 iOS 中添加。 归档雷达?可能是让事情发生的唯一方法。 ***.com/questions/24895093/… 的副本。简短的回答,有一些方法可以做到这一点。 【参考方案1】:我找到了解决方案here。我不确定这在技术上是否适用于 Apple,但它可以按我的需要工作。
@objc func openURL(_ url: URL)
return
func openContainerApp()
var responder: UIResponder? = self as UIResponder
let selector = #selector(MyViewController.openURL(_:))
while responder != nil
if responder!.responds(to: selector) && responder != self
responder!.perform(selector, with: URL(string: "myapp://url")!)
return
responder = responder?.next
【讨论】:
抱歉,这对我在 swift 3 中的自定义共享 UI 不起作用 @KauthamMurugan 它在 Swift 3 中对我有用。您是否使用应用程序的 URL 字符串替换 url 字符串? 是的,我正在使用我自己的应用程序网址。但是在我的应用程序中,我需要显示一个带有用户输入元素和进度条的自定义共享 UI。所以我已经将SLComposeServiceViewController
替换为 UIViewController
以拥有自定义设计的共享控制器。我认为这应该是问题,但我不确定。
这不适用于新的iOS11截图工具,因为没有UIResponder!?
@coyer 我还没有尝试在 iOS11 上使用它,但是截图工具是如何影响它的呢?这是从共享扩展打开应用程序。以上是关于从 iOS Safari 共享扩展打开主应用程序的主要内容,如果未能解决你的问题,请参考以下文章
在我的 iOS 应用程序中从 Safari 打开具有特定扩展名的文件