didRecieve()を実装して、iOS 10内でストーリーボードのセグをトリガーしようとしています。ストーリーボードを使用して、次のコードを使用してメッセージを作成した後で、私はセグをトリガーできます:iOS 10メッセージの拡張 - Simulatorで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"
}
}
これは素晴らしいです。私は作成した後、私はメッセージを使ってメッセージを送信することができ、それはメッセージを送信する人のためにセグを引き起こすIPhoneシミュレータによって受信されます。
相手のスレッドでメッセージを選択したいときに問題が発生します。 Appleは、拡張機能を持つユーザー間でメッセージの送受信をテストするために、シミュレータに2つの相互接続されたメッセージスレッドを含みます。
受信したスレッドでメッセージを選択すると、セグがトリガーされません。これは、ルートビューコントローラの新しいコピーをロードするだけです。
私が望む動作は、特定のメッセージインスタンスの受信情報を取得し、このデータを使用してセグをトリガーすることです。 Appleはこれを実現するために次のインスタンスプロパティを提供しています。
ここではAPIドキュメントにselectedMessageを参照してください:https://developer.apple.com/reference/messages/msconversation/1648186-selectedmessage
の質問はどのようにこのインスタンス・プロパティは実装されていますか?メッセージ拡張子のルートビューコントローラのonViewDidLoad()に実装されていますか? Appleのドキュメントは、受信したメッセージ拡張子の末尾にある選択されたメッセージから受信したメッセージデータをスクープするためにインスタンスプロパティを実際に実装する方法についてはかなり曖昧です。誰もこれを実装していますか?
THANKS !!
感謝を! didSelectがメッセージを選択したときに受信メッセージユーザによってトリガされていないようです。送信者のトランスクリプトでメッセージが選択されたときにトリガーされます。これは、あなたの内線内のどこかでメッセージが選択されるたびに起動されるはずです。 – thexande
私は方法と間違えられました。ごめんなさい。回答が更新されました。 – shallowThought
xcodeがそのメソッド名を認識しないように見える – thexande