从 iOS Safari 共享扩展打开主应用程序
Open the main app from a iOS Safari Share Extension
我有一个 Safari 共享扩展程序,我希望能够从该扩展程序中打开主应用程序。用户会看到一个警告,他们可以选择打开应用程序。
func openAppHandler() {
self.extensionContext?.completeRequest(returningItems: []) { (success) in
if let url = URL(string: "myapp://...") {
self.extensionContext?.open(url, completionHandler: nil)
}
}
}
调用方法 didSelectPost()
后出现警报,如您所见,它出现在扩展的后台优先级完成块中。 open
方法在它的文档中说 "In iOS 8, only the Today extension point (used for creating widgets) supports this method." 我猜它仍然不受 Safari 共享扩展的支持。
有谁知道从共享扩展程序打开我的主应用程序的方法吗?
我找到了解决方案 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
}
}
我有一个 Safari 共享扩展程序,我希望能够从该扩展程序中打开主应用程序。用户会看到一个警告,他们可以选择打开应用程序。
func openAppHandler() {
self.extensionContext?.completeRequest(returningItems: []) { (success) in
if let url = URL(string: "myapp://...") {
self.extensionContext?.open(url, completionHandler: nil)
}
}
}
调用方法 didSelectPost()
后出现警报,如您所见,它出现在扩展的后台优先级完成块中。 open
方法在它的文档中说 "In iOS 8, only the Today extension point (used for creating widgets) supports this method." 我猜它仍然不受 Safari 共享扩展的支持。
有谁知道从共享扩展程序打开我的主应用程序的方法吗?
我找到了解决方案 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
}
}