WhatsApp如何克服GCM推送通知延迟?

时间:2014-09-09 11:28:42

标签: android google-cloud-messaging whatsapp

我正在尝试使用GCM服务,除了GCM推送通知或提供有效负载的长时间延迟之外,每件事情都可以......有时我需要花5分钟接收通知或有效负载。 我需要立即交付...... 我知道GCM的角色,等到其他设备上线,但在我的情况下,我拿着两台设备,他们在线,但我收到了延迟通知!

WhatsApp(作为使用GCM的应用程序的示例)如何克服此问题..并立即发送?

[即(类型的消息:打字,在线 - 上次见过)不能延迟......]


GCM延迟推送已知问题:this issue 我的问题是:使用GCM的其他应用程序如何克服此问题

2 个答案:

答案 0 :(得分:10)

发送通知时,您可以将priority-parameter设置为“高”。

来自文档:

  

默认情况下,邮件以正常优先级发送。 正常优先级会优化客户端应用的电池消耗,除非需要立即投放,否则应使用此优先级。对于具有正常优先级的邮件,应用程序可能会收到未指定延迟的邮件。

     

当消息以高优先级发送时,会立即发送,应用程序可以唤醒正在睡眠的设备并打开与服务器的网络连接。

我知道这个答案来得很晚,但如果你仍然面对这个问题(或其他任何人)请告诉我它是否有帮助。

答案 1 :(得分:3)

大牌手

让我们从规模的角度关注WhatsApp。他们的规模是全球性的,就市场份额而言是最大的之一。对于这样的玩家,无论情况如何,都有必要提供一致且流畅的用户体验。这意味着大型鱼类公司会像我们这样的“小型鱼类开发者”留有预先定义的规则。有时,正是这种实现方式具有挑战性,以至于许多小的开发人员不得不使用任何可用的

我想以WhatsApp的推送通知为例来说明上述内容。

首先,我们必须停止将推送通知与Google的服务专门关联。没有Google服务的设备将不会收到推送通知?不,当然可以,请尝试着重于推送通知的核心机制

推送通知如何工作?

与像HTTP这样的协议相反,HTTP假定是客户机-服务器体系结构,并且是单向协议(服务器无法自行启动通信),而普通套接字可以实现双向通信。

您要通过套接字实现自己的文件传输协议吗?可以!

您要通过套接字实现自己的聊天协议吗?可以!

您要通过套接字实现自己的推送通知协议吗?可以!

套接字是通过网络进行通信的画布。您几乎可以做任何事情。就个人而言,我们在组织中开发了自定义请求-响应协议。

多种实现

不要遵循默认的GCM / FCM通知消息协议或实现。您可以部署一种机制来维护与设备的持久套接字连接,并且可以监听到服务器想要推送的任何内容。

  • WhatsApp使用GCM及其专有的XMPP服务器实现推送通知
  • WhatsApp(和其他几个App)依赖于Play服务,因为它作为许多设备上的系统应用存在,因此具有特殊的地位,与普通Apps相比,它被杀的可能性很小。我并不声称知道WhatsApp采用w.r.t Play服务的确切策略,但是有一件事可以确定何时需要传递消息,即使用FCM还是使用自己的套接字。
  • 对于没有播放服务的设备,依赖其自身的套接字通信。也许当Play Services可用时,FCM比Play Services更受青睐,或者有某种最优的策略将FCM和Custom socket实现结合在一起,但这些都是内部的。

来自WhatsApp的最新版本(2.19.203):

enter image description here

请注意,已获得FCM的相关许可。

可疑的套接字实现: https://android.stackexchange.com/questions/43970/how-is-whatsapp-able-to-receive-messages-when-not-in-use

基于XMPP的推送通知

发自https://www.quora.com/Does-WhatsApp-use-GCM-to-exchange-messages

  

不,whatsapp不使用GCM [并非完全正确]。它使用XMPP的修改版   而是称为FunXMPP。它更改消息框架中的XML关键字   节省带宽,因为它的用户(主要是移动网络用户)   没有良好的互联网连接。可以找到替代品   此处:mgp25/Chat-API(不过我不是作者)

更多证据(official source):

  

如果浏览正常,但WhatsApp无法正常运行,请联系您的手机   提供商和系统管理员,并确保您的APN和   路由器配置正确以允许非Web和套接字   连接。您也可以尝试其他连接。如果你是   连接到Wi-Fi,请尝试移动数据,反之亦然。

他们甚至要求将他们正在使用的任何端口(自定义)列入白名单。

因此,WhatsApp做到了。 Facebook做到了。谷歌做到了。这些公司很多都这样做。您也可以(在一定程度上)使用Ejjaberd,Openfire或某些其他技术来做到这一点,并为此具有适当的客户端实现。

中文ROM

一些中文ROM已迈出了10步,并从根本上改变了Android中内存和进程的管理方式。例如,在Oppo中,如果应用程序未启用“自动启动”,则一旦您的应用程序被杀死,它将不允许您执行任何操作。除了希望用户再次打开该应用程序外,没有任何体验的希望。在这些情况下,这些OEM选择性地将WhatsApp,Facebook,Google和其他参与者列入白名单。那么,谁在受苦?

我们。期间。

相关问题