ios - 从iOS Safari共享扩展打开主应用

标签 ios ios-extensions

我有一个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 Share Extension不支持它的情况。

有谁知道通过共享扩展程序打开我的主应用程序的方法吗?

最佳答案

我找到了解决方案here。我不确定苹果在技术上是否可以,但是它可以按我的需要工作。

@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
    }
}

关于ios - 从iOS Safari共享扩展打开主应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41449602/

相关文章:

ios - 如何在操作表而不是全屏模态视图中显示操作扩展?

ios - 应用程序和今日扩展的不同 cocoapods

ios - Swift 等效于 Objective-C block ?

ios - 通过 iOS 8 Action Extension 将选定的文本从 Safari 发送到已安装的应用程序?

ios - 如何从 _NSCoreDataTaggedObjectID 获取对象或值

html - 在 iOS Safari 中禁用 flex 滚动

ios - 有没有办法为 `if (iOSApplicationExtension)` 添加 `UIApplication.shared` 条件

ios - 嵌入式二进制签名证书始终为 'Ad Hoc Code Signed'

ios - Xcode 6 中的错误 - View Controller 没有名为( subview )的导出

ios - iphone AVAudioRecorder,在线程中录制音频