【问题标题】:Sending multiple messages in iMessage using Swift使用 Swift 在 iMessage 中发送多条消息
【发布时间】:2018-04-18 10:07:09
【问题描述】:

我正在为 iMessage 编写应用程序,并希望在用户点击 imessage 应用程序屏幕时自动发送消息。

消息由位置地址的地图组成。

最初,我曾尝试使用 message.url 来包含 maps.apple.com 网址,这样当接收者点击收到的消息时,它会打开地图。

但这似乎不起作用。所以我尝试单独发送地址:首先是图像,然后是地址。然后接收者可以点击地址并打开地图。

我有以下代码:

    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)

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

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

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

【问题讨论】:

  • 这是您正在制作的 iMessage 应用程序吗?另外,您有没有机会提供一个更完整的示例,我们可以用来处理并尝试解决这个问题?
  • 嗨,史蒂夫,是的,这是我正在制作的 iMessage 应用程序。代码太长,无法在此处发布,但如果您愿意,我可以通过电子邮件发送给您?

标签: ios swift send imessage-extension msmessage


【解决方案1】:

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

我会尝试:

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

【讨论】:

  • 谢谢蒂姆,您的代码中有关于“^”的语法错误,所以我将其更改为:conversation.insert(message, completionHandler: {Error -> () in conversation.sendText("我们在:\n" + self.addressLabel, completionHandler: nil) }) 但结果相同。 ☹️
  • 我希望我对我搞砸了语法感到惊讶;我的背景是 Objective-C。
  • 尽管如此,我还是赞扬您为提供帮助所做的努力。谢谢你。 ?
【解决方案2】:

在对此进行更多研究后,似乎在 macOS 上使用了 url var on 消息,但在其他情况下似乎被忽略了。看起来您也可以将一些逻辑放入一些委托方法中以打开视图控制器,您可以在其中放置可以打开的 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)
            })
        })

我希望这会有所帮助。

【讨论】:

  • 您好史蒂夫,感谢您的回复。我看过那里并使用了 URL 字符串,但它似乎不起作用。我读过文档说它应该在另一端表现的方式是如果收件人没有应用程序,点击它将去 AppStore 下载应用程序,这就是我认为它正在尝试做的事情。看来我必须分两部分发送。
  • 谢谢史蒂夫。此解决方案不能 100% 工作。很多时候它只会发送图像然后停止。如果我将“+ 2.0”更改为其他值,有时它会开始工作,但通常不会有太大区别——文本部分从未发送过。我会继续玩它的。感谢您的帮助!
  • 真不幸。祝你好运。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-21
  • 2014-10-14
  • 1970-01-01
  • 1970-01-01
  • 2013-08-16
相关资源
最近更新 更多