2017-09-22 53 views
0

我要添加一個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

回答

0

這是在消息中插入鏈接的技巧。它不允許創建具有url屬性的對象,而只是直接插入將在Safari中打開的鏈接。

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