我正在尝试使用GCM服务,除了GCM推送通知或提供有效负载的长时间延迟之外,每件事情都可以......有时我需要花5分钟接收通知或有效负载。 我需要立即交付...... 我知道GCM的角色,等到其他设备上线,但在我的情况下,我拿着两台设备,他们在线,但我收到了延迟通知!
WhatsApp(作为使用GCM的应用程序的示例)如何克服此问题..并立即发送?
[即(类型的消息:打字,在线 - 上次见过)不能延迟......]
GCM延迟推送已知问题:this issue 我的问题是:使用GCM的其他应用程序如何克服此问题
答案 0 :(得分:10)
发送通知时,您可以将priority-parameter设置为“高”。
来自文档:
默认情况下,邮件以正常优先级发送。 正常优先级会优化客户端应用的电池消耗,除非需要立即投放,否则应使用此优先级。对于具有正常优先级的邮件,应用程序可能会收到未指定延迟的邮件。
当消息以高优先级发送时,会立即发送,应用程序可以唤醒正在睡眠的设备并打开与服务器的网络连接。
我知道这个答案来得很晚,但如果你仍然面对这个问题(或其他任何人)请告诉我它是否有帮助。
答案 1 :(得分:3)
大牌手
让我们从规模的角度关注WhatsApp。他们的规模是全球性的,就市场份额而言是最大的之一。对于这样的玩家,无论情况如何,都有必要提供一致且流畅的用户体验。这意味着大型鱼类公司会像我们这样的“小型鱼类开发者”留有预先定义的规则。有时,正是这种实现方式具有挑战性,以至于许多小的开发人员不得不使用任何可用的。
我想以WhatsApp的推送通知为例来说明上述内容。
首先,我们必须停止将推送通知与Google的服务专门关联。没有Google服务的设备将不会收到推送通知?不,当然可以,请尝试着重于推送通知的核心机制
推送通知如何工作?
与像HTTP这样的协议相反,HTTP假定是客户机-服务器体系结构,并且是单向协议(服务器无法自行启动通信),而普通套接字可以实现双向通信。
您要通过套接字实现自己的文件传输协议吗?可以!
您要通过套接字实现自己的聊天协议吗?可以!
您要通过套接字实现自己的推送通知协议吗?可以!
套接字是通过网络进行通信的画布。您几乎可以做任何事情。就个人而言,我们在组织中开发了自定义请求-响应协议。
多种实现
不要遵循默认的GCM / FCM通知消息协议或实现。您可以部署一种机制来维护与设备的持久套接字连接,并且可以监听到服务器想要推送的任何内容。
来自WhatsApp的最新版本(2.19.203):
请注意,已获得FCM的相关许可。
基于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和其他参与者列入白名单。那么,谁在受苦?
我们。期间。