我正在为 iMessage 编写一个应用程序,并希望在用户点击 iMessage 应用程序屏幕时自动发送消息。
该消息由位置地址的地图组成。
最初,我尝试使用 message.url 来包含 maps.apple.com url,这样当接收者点击收到的消息时,它会打开地图。
但这似乎行不通。所以我尝试单独发送地址:首先是图像,然后是地址。然后,接收者可以点击地址,地图将打开。
我有以下代码:
if let image = createImageForMessage(), let conversation = activeConversation {
let layout = MSMessageTemplateLayout()
layout.image = image
let message = MSMessage()
message.layout = layout
//conversation.insert(message, completionHandler: nil)
//conversation.insertText("We are at:n" + addressLabel, completionHandler: nil)
conversation.send(message, completionHandler: nil)
conversation.sendText("We are at:n" + addressLabel, completionHandler: nil)
}
理想情况下,我希望它只需要初始点击,但使用"发送"和"发送文本"只发送第一个"发送"指令,"发送文本"被忽略。
如果我使用了注释掉的"插入"和"插入文本",则两个指令都会被执行,但我必须点击"发送"才能发送。
我试过:
conversation.insert(message, completionHandler: nil)
conversation.sendText("We are at:n" + addressLabel, completionHandler: nil)
但这没有用。仅发送了文本。图像根本不显示。
有谁知道如何一键发送两条消息?
或者,有谁知道我是否可以将两条消息合并为一条?
从查看文档来看MSConversation
,看起来您不能同时有两个挂起的消息。
我会尝试:
conversation.insert(message, completionHandler: ^{
conversation.sendText("We are at:n" + addressLabel, completionHandler: nil)
})
在对此进行了更多研究之后,似乎在macOS上使用消息上的url
var,但似乎被忽略了。看起来您还可以将一些逻辑放入一些委托方法来打开视图控制器,您可以在其中放置然后可以打开的 URL,尽管我不确定这是否意味着您向其发送这些消息的每个人都需要安装扩展名(我假设您想避免该要求)。可以在此处找到一个有趣的网站,可以从(带有示例项目)中获得更多详细信息:https://medium.com/swift-programming/learn-how-to-build-an-imessage-app-with-swift-7b106ce9b033
综上所述,我确实有一个"解决方案",尽管我不能说我推荐它(我不喜欢使用延迟的解决方案)。但是,这将成功发送您构建的消息,后跟包含文本的消息。它的行为似乎也与您插入消息然后插入文本并且用户单击发送时看到的行为几乎相同。因此,尽管我不喜欢为此增加延迟,但最终结果似乎是正确的。
conversation.send(message, completionHandler: { _ in
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 2.0, execute: {
conversation.sendText("http://www.google.com", completionHandler: nil)
})
})
我希望这有所帮助。