从 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 中显示

在我的 iOS 应用程序中从 Safari 打开具有特定扩展名的文件

在 Swift 4.2 Xcode 10 中使用动作扩展从 Safari 共享 PDF 文件失败

从 iOS Safari 抓取 URL

Swift 中的 iOS 共享扩展抓取 URL

无法从项目中删除共享扩展,它仍然出现在 Safari 中