ios 11 imessage扩展message.url不会打开safari

问题描述:

我要添加一个iMessage extension目标到我的应用程序。该扩展应该发送具有url属性的消息。当用户触摸消息时,我期望的行为是使用消息的url属性打开浏览器。ios 11 imessage扩展message.url不会打开safari

我在messageView一个按钮,执行此代码:

@IBAction func labelButton(_ sender: Any) { 
     let layout = MSMessageTemplateLayout() 
     layout.imageTitle = "iMessage Extension" 
     layout.caption = "Hello world!" 
     layout.subcaption = "Test sub" 
     guard let url: URL = URL(string: "https://google.com") else { return } 

     let message = MSMessage() 
     message.layout = layout 
     message.summaryText = "Sent Hello World message" 
     message.url = url 

     activeConversation?.insert(message, completionHandler: nil) 
    } 

如果我触摸消息,它扩展了MessageViewController

然后我加入了这一点:

override func didSelect(_ message: MSMessage, conversation: MSConversation) { 

     if let message = conversation.selectedMessage { 
      // message selected 

      // Eg. open your app: 
      self.extensionContext?.open(message.url!, completionHandler: nil) 
     } 
} 

而现在,当我触摸邮件时,它会打开我的主应用程序,但仍然不是我的浏览器。

我看到的another post(这里我不能评论,于是我开了这个帖子),这是不可能的Safari打开,但我有一个news app这将插入的文章链接,并允许与该消息的点击打开文章在浏览器窗口中,而应用程序已安装。

那么,有人可以告诉我如何继续强制在浏览器窗口中打开链接?

非常感谢。

+0

您可以使用'SFSafariViewController'。正如另一篇帖子所指出的,你不能将用户从消息扩展中踢出Safari。 – beyowulf

+0

感谢您的回答。如果我没有在浏览器中打开窗口的新闻应用程序,我会在其他帖子中考虑答案。 – radar

这是在消息中插入链接的技巧。它不允许创建具有url属性的对象,而只是直接插入将在Safari中打开的链接。

activeConversation?.insertText("https://google.com", completionHandler: nil)