首页 > 解决方案 > 应用客户端如何处理传入的即时消息和通知?

问题描述

我对处理来自 Telegram 和 WhatsApp 等即时消息应用程序的入站消息和通知的过程很感兴趣。我熟悉推送协议,但我很好奇即时通讯应用程序如何实现接收部分。

首先,来自 WhatsApp 和 Telegram 等服务的即时消息是否以推送通知的形式接收,或者是否存在重复/冗余导致正确传递给应用实例服务工作者的推送通知和传递的消息之间的某种竞争条件到应用程序实例前台/主进程?或者,即时消息是否总是且仅作为推送通知发送,至少对于来自 Whatsapp 等应用程序的端到端加密消息?

其次,在上面提到的重复/冗余假设下,是由服务工作者处理的通知传递给应用程序实例,然后将其显示在目标聊天中,还是为了应用程序实例获取原始消息而丢弃通知来自 Telegram/Whatsapp 服务器?(我想到了一种情况,需要这样做以确保向发件人提供消息已收到的可靠确认。)

标签: push-notificationpushtelegramwhatsappinstant-messaging

解决方案


实际上这是一个棘手的问题,因为 Telegram 和 WhatsApp 等应用程序可能有一些多案例处理逻辑,非常复杂的逻辑。

但据我想象并在我的一些聊天应用程序中实际使用的情况如下:

  • 一些实时协议用于消息传递。Telegram 使用他们自己的专有协议,WhatsApp 使用 XMPP。
  • 当双方都在线(发送方和接收方)时,会发送实时 XMPP 消息。主要是 & 通常一个应用程序与聊天服务器有一个持久的 TCP/TLS/WSS 连接,主要是在用户使用它时。
  • 当收件人不在线(未连接到聊天服务器)例如不使用应用程序(应用程序处于后台/暂停模式)时,将发送推送通知。这只是为了通知用户有新消息。然后用户(接收者)打开应用程序并接收真实消息(通过实时 XMPP 连接)或通过 REST/HTTP API 与服务器同步。

因此没有任何重复,因为推送只是通知用户在用户不在应用程序中时有新消息。


推荐阅读