简体   繁体   English

iOS10 iMessage:无法使用 MSConversation 将数据插入 iMessage

[英]iOS10 iMessage : Unable to insert data into iMessage using MSConversation

In my project i added iMessage Extension but i am unable to send selected data from UITableview (need to send selected row data)在我的项目中,我添加了iMessage Extension但我无法从UITableview发送选定的数据(需要发送选定的行数据)

Declarations声明

 var savedConversation: MSConversation?

I want to send the text when user didselectRow - Tableview but it is not throwing any error and not even going to MSConversation completion Block我想在用户didselectRow - Tableview 时发送文本,但它没有抛出任何错误,甚至没有进入MSConversation完成块

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let message = MSMessage()
    let layout = MSMessageTemplateLayout()
    layout.caption = "Win Notification"//post.title
    layout.subcaption = "Can share now through win"
    layout.trailingSubcaption = "share"
    message.url = "http://.."
    message.layout = layout


    savedConversation?.insert(message, completionHandler: { (error) in
        if error == nil {

            //error nothing so do something

        }else{


            print("error in inserting -- \(error)")
        }
    })

referred links https://www.captechconsulting.com/blogs/ios-10-imessages-sdk-creating-an-imessages-extension参考链接https://www.captechconsulting.com/blogs/ios-10-imessages-sdk-creating-an-imessages-extension

https://discussions.apple.com/thread/7612113?start=0&tstart=0 https://discussions.apple.com/thread/7612113?start=0&tstart=0

This code works for me这段代码对我有用

Step1第1步

Create iMessage Extension创建 iMessage 扩展

Step2第2步

Go to MessagesViewController(created by Extension)转到 MessagesViewController(由扩展创建)

class MessagesViewController: MSMessagesAppViewController  {

 // ****This code written just for your sample reference********

   override func viewDidLoad() {
      let button = UIButton(type: .system)
      button.sizeToFit()
      view.addSubview(button)
      loginButton.setTitle("Click to Insert Message!", for: [])
      loginButton.addTarget(self, action: #selector(sendMessage(_:)), for: .touchUpInside)
     }
}

Inserting Message into iMessage将信息插入 iMessage

func sendMessage(_ sender:UIButton) {
     let message = composeMessage(customMessage: "Too good!!! & Easy", caption: "Notify:", subCaption:"Caption", trailingCaptionn: "Subcaption", trailingSubcaptionn: "trailing sub caption")

    self.activeConversation?.insert(message) // Inserts Message
}

Create Message with available options[this methods returns message]使用可用选项创建消息[此方法返回消息]

func composeMessage(customMessage: String, caption: String, subCaptionn: String, trailingCaptionn: String, trailingSubcaptionn: String) -> MSMessage {
    var components = URLComponents()

    // create a query item from our custom message
    let item = URLQueryItem(name: "MyCustomMessage", value: customMessage)

    // put it into an array of query items
    var items = [URLQueryItem]()
    items.append(item)
    components.queryItems = items

    // tell messages to use the default message template layout
    let layout = MSMessageTemplateLayout()
    layout.caption = caption
    layout.subcaption = subCaptionn
    layout.trailingCaption = trailingCaptionn
    layout.trailingSubcaption  = trailingSubcaptionn
    // create a message and tell it the content and layout
    let message = MSMessage()
    message.url = components.url!
    message.layout = layout

    // return it for sending
    return message
}

Check this Delegate for received message检查此委托以获取消息

override func didReceive(_ message: MSMessage, conversation: MSConversation) {
    // Called when a message arrives that was generated by another instance of this
    // extension on a remote device.

    // Use this method to trigger UI updates in response to the message.
    guard let messageURL = message.url else { return }
    guard let urlComponents = NSURLComponents(url: messageURL, resolvingAgainstBaseURL: false), let queryItems = urlComponents.queryItems else { return }

    print("URL Components", urlComponents)
    print("queryItems", queryItems)

    for item in queryItems {
        print("Received \(item.name) with value \(item.value)")
    }

}




}

Reference & helped Source: https://www.hackingwithswift.com/ios10参考和帮助来源: https : //www.hackingwithswift.com/ios10

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM