Push notification 应用客户端如何处理传入的即时消息和通知?

Push notification 应用客户端如何处理传入的即时消息和通知?,push-notification,push,telegram,whatsapp,instant-messaging,Push Notification,Push,Telegram,Whatsapp,Instant Messaging,我对处理来自即时消息应用程序(如Telegram和WhatsApp)的入站消息和通知的过程感兴趣。我熟悉推送协议,但我很好奇即时消息应用程序如何实现接收部分 首先,来自WhatsApp和Telegram等服务的即时消息是否以推送通知的形式接收,或者是否存在重复/冗余,导致推送通知正确传递给应用实例服务工作人员和消息传递给应用实例前台/主进程之间存在某种竞争条件?或者,即时消息是否总是且仅作为推送通知发送,至少对于来自Whatsapp等应用程序的端到端加密消息是如此 其次,在上面提到的复制/冗余假

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

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


其次,在上面提到的复制/冗余假设下,服务人员处理的通知是传递给应用程序实例,然后在目标聊天中显示它,还是丢弃通知以支持应用程序实例从Telegram/Whatsapp服务器获取原始消息?(我想到了一个场景,需要这样做才能确保向发送者提供消息已被接收的可靠确认。)

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

但从我的一些聊天应用程序中可以想象和实际使用的是:

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

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

非常感谢您的广泛回复。快速评论您的§“收件人不在线时[…]”。据我观察,Telegram和Whatsapp都能够在用户打开应用程序之前显示入站消息的内容。这意味着推送通知必须有一些有效负载来包装要显示的消息内容,或者推送通知也会在用户之前唤醒应用程序,这与您的答复所建议的相反,即在应用程序出现在前台之前显示内容。我们是否同意这一点?如果是,这两种方法中哪一种是常用的?对,可能它们使用推送通知负载来尽可能快地显示消息。如今,推送负载的大小很大,因此可以在其中传递大量信息。我是说这是可能的。这种方法也可以使用。很好的解释。我想知道谁处理推送通知以及如何处理?例如:当应用程序挂起时,它是否仍有到服务器的连接以接收通知?或者whatsapp服务器是否将通知发送到android/google层,然后由后者调用所需的应用程序?@VivekKumar推送通知使用标准操作系统推送通知API、iOS和android进行处理。@Rubycon,是的,我理解。但我不明白的是,聊天应用程序是否通过连接到服务器来不断查找新消息,如果出现新消息,则向系统发送通知。或者聊天远程服务器向android设备发送某种通知(聊天应用程序不处于活动状态)以及如何发送?