Swift 3 iMessage Extension不打开URL

我正在创build一个iOS应用程序iMessage扩展。

根据苹果的例子 ,我根据提供的逻辑创build一个消息

guard let url: URL = URL(string: "http://www.google.com") else { return } let message = composeMessage(url: url) activeConversation?.insert(message, completionHandler: { [weak self] (error: Error?) in guard let error = error else { return } self?.presentAlert(error: error) }) 

 private func composeMessage(url: URL) -> MSMessage { let layout = MSMessageTemplateLayout() layout.caption = "caption" layout.subcaption = "subcaption" layout.trailingSubcaption = "trailing subcaption" let message = MSMessage() message.url = url message.layout = layout return message } 

 private func presentAlert(error: Error) { let alertController: UIAlertController = UIAlertController( title: "Error", message: error.localizedDescription, preferredStyle: .alert ) let cancelAction: UIAlertAction = UIAlertAction( title: "OK", style: .cancel, handler: nil ) alertController.addAction(cancelAction) present( alertController, animated: true, completion: nil ) } 

据我所知,发送消息后,点击一下,Safari浏览器应该打开。

当我点击发送的消息, MessageViewController屏幕发生在整个屏幕上,而不打开Safari或其他应用程序。

哪里有问题? 我如何获得所需的function?

我认为Safari浏览器只能打开macOS。 这对我工作:

 override func didSelectMessage(message: MSMessage, conversation: MSConversation) { if let message = conversation.selectedMessage { // message selected // Eg. open your app: let url = // your apps url self.extensionContext?.openURL(url, completionHandler: { (success: Bool) in }) } } 

似乎无法从消息扩展程序中打开应用程序,但“工作区”中包含的随附应用程序除外。 我们试图从我们的Message Extension中打开Safari,但它没有起作用,这种限制似乎是devise的。

你可以尝试其他情况来解决你的问题:

  1. 扩展的消息扩展中的Web视图

    您的消息扩展中可以包含Web视图,当您单击消息时,可以打开扩展模式并在Web视图中打开Url。

用户不会在Safari中,但该页面将embedded到您的消息扩展中。

  1. 在Companion应用程序中打开Url

    点击消息,你可以用一个特殊的参数打开你的Companion应用程序(通过MyApp的Urlscheme:// myParam = myValue); Companion应用程序应对此参数作出反应,并可通过OpenUrlredirect到Safari。

在这种情况下,您将在WebPage之前进行多次redirect,但是应该允许返回到对话。

我们还发现,如果您想要在消息中打开Apple Store,并让用户购买商品,则可以在消息扩展中实例化SKStoreProductViewController。

如果您只需要插入链接,则应使用activeConversation.insertText并插入链接。 触摸邮件将打开Safari

  1. didSelectMessage中的openURL:对话:使用extensionContext

  2. 在您的主机AppDelegate中处理URLscheme