从iOS Safari共享扩展程序

时间:2017-01-03 17:58:16

标签: 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中,只有今天的扩展点(用于创建小部件)支持这种方法。”我猜测它仍然是在Safari Share Extension中仍然不支持的情况。

有没有人知道从共享扩展程序中打开主应用程序的方法?

1 个答案:

答案 0 :(得分:7)

我找到了解决方案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
    }
}