1

我正在为 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)

    }

理想情况下,我希望它只需要初始点击,但使用“send”和“sendText”只发送第一个“send”指令,“sendText”被忽略。

如果我使用注释掉的“insert”和“insertText”,那么两条指令都会执行,但我必须点击“send”才能发送它。

我努力了:

        conversation.insert(message, completionHandler: nil)
        conversation.sendText("We are at:\n" + addressLabel, completionHandler: nil)

但这没有用。只发送了文本。图像根本不显示。

有谁知道如何一键发送两条消息?

或者,有谁知道我是否可以将两条消息合二为一?

4

2 回答 2

0

从查看文档MSConversation来看,您似乎不能同时拥有两条待处理的消息。

我会尝试:

    conversation.insert(message, completionHandler: ^{
        conversation.sendText("We are at:\n" + addressLabel, completionHandler: nil)
    })
于 2018-04-14T03:59:09.900 回答
0

在对此进行更多研究之后,似乎urlvar on 消息似乎在 macOS 上使用,但似乎被忽略了。看起来您也可以将一些逻辑放入一些委托方法中以打开视图控制器,您可以在其中放置可以打开的 url,尽管我不确定这是否意味着您发送这些消息的每个人to 需要安装扩展程序(我假设您希望避免该要求)。可以在此处找到一个有趣的网站(通过示例项目)获取更多详细信息: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)
            })
        })

我希望这有帮助。

于 2018-04-14T03:52:05.457 回答