didRecieve()를 구현하여 iOS 10 확장의 스토리 보드 부분을 트리거하려고합니다. 스토리 보드를 사용하여 다음 코드를 사용하여 메시지를 작성한 후 단편을 트리거 할 수 있습니다.iOS 10 메시지 확장 - 시뮬레이터에서 didRecieve() 및 selectedMessage 구현
@IBAction func createThing(_ sender: AnyObject) {
self.createMessage()
}
func composeMessage(customMessage: String, caption: String) -> MSMessage {
var components = URLComponents()
// create a query item from our custom message
let item = URLQueryItem(name: "New Thing", 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
// 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
}
override func didReceive(_ message: MSMessage, conversation: MSConversation) {
print("message recieved!!")
self.pollRecieved = true
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)")
}
print("attempting segue!")
self.performSegue(withIdentifier: "showPollSegue", sender: self)
}
func createMessage() {
let message = composeMessage(customMessage: "This is really important.", caption: "User-facing caption here")
self.activeConversation?.insert(message)
print("message here!!", message)
}
// segue override
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if(segue.identifier == "showThingSegue") {
let vc = segue.destination as! MessagesViewController
vc.messageID = "1234567"
}
}
위대한 작품입니다. 내가 만든 후에 나는 메시지를 사용하여 메시지를 보낼 수 있으며, 메시지를 보내는 사람을 위해 세그 (segue)를 트리거하는 아이폰 시뮬레이터에 의해 수신됩니다.
다른 사람의 스레드에서 메시지를 선택하려고 할 때 문제가 발생합니다. Apple은 확장자를 가진 사용자간에 메시지를주고받는 것을 테스트하기 위해 시뮬레이터에 두 개의 상호 연결된 메시지 스레드를 포함합니다.
수신 된 스레드에서 메시지를 선택하면 Segue가 트리거되지 않습니다. 루트 뷰 컨트롤러의 새로운 복사본을로드하기 만하면됩니다.
내가 원하는 동작은 특정 메시지 인스턴스에 대해 수신 된 정보를 수집하고이 데이터를 사용하여 세그먼트를 트리거하는 것입니다. Apple은이를 위해 다음과 같은 인스턴스 속성을 제공합니다.
여기 API 문서에 selectedMessage 참조 : 질문이 방법이 인스턴스 속성이 https://developer.apple.com/reference/messages/msconversation/1648186-selectedmessage을 구현한다? 메시지 확장을위한 루트보기 컨트롤러의 onViewDidLoad()에 구현 되었습니까? Apple의 문서는 실제로 메시지 속성 확장자의 수신 된 쪽에서 선택된 메시지의받은 메시지 데이터를 스쿠프하기 위해 인스턴스 속성을 실제로 구현하는 방법에 대해 매우 모호합니다. 누구든지 이것을 구현 했습니까?
고맙습니다! 수신자가 메시지 willBecomeActive
가 호출을 선택하고 당신에게 MSConversation
를 제공하면
감사합니다! didSelect는 수신 메시지 사용자가 메시지를 선택할 때 트리거되지 않습니다. 메시지가 보낸 사람 기록에서 선택되면 트리거됩니다. 확장 프로그램 내에서 메시지가 선택 될 때마다 트리거되어야합니다. 맞습니까? – thexande
나는 그 방법을 착각했다. 죄송합니다. 답변이 업데이트되었습니다. – shallowThought
xcode가 그 메소드 이름을 인식하지 못하는 것 같습니다. – thexande