【问题标题】:Open the main app from a iOS Safari Share Extension从 iOS Safari 共享扩展打开主应用程序
【发布时间】: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 中添加。
  • 归档雷达?可能是让事情发生的唯一方法。
  • stackoverflow.com/questions/24895093/… 的副本。简短的回答,有一些方法可以做到这一点。

标签: ios ios-extensions


【解决方案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 上使用它,但是截图工具是如何影响它的呢?这是从共享扩展打开应用程序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-14
  • 2019-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多