大玩家
让我们从规模的角度关注 WhatsApp。他们的规模是全球性的,并且在市场份额方面是最大的之一。对于像这样的玩家来说,无论在什么情况下,都必须提供一致和流畅的用户体验。这意味着像我们这样的“小鱼开发商”被大鱼公司留下了预先定义的规则。有时,正是实现具有足够的挑战性,以至于很多小时候开发人员都不得不处理任何可用的。
我想以 WhatsApp 的 Push Notification 为例进行说明。
首先,我们必须停止将推送通知与 Google 的服务(即 Google Play 服务)完全关联。没有 Google Play 服务的设备会不会收到推送通知?不,当然可以——尝试关注推送通知的核心机制
推送通知的工作原理 - 套接字!
与 HTTP 之类的协议相反,HTTP 采用客户端-服务器架构并且是单向协议(服务器无法自行发起通信),普通套接字可实现双向通信。
您想通过套接字实现自己的文件传输协议吗?你可以!
您想通过套接字实现自己的聊天协议吗?你可以!
您想通过套接字实现自己的推送通知协议吗?你可以!
套接字是通过网络进行通信的画布。你几乎可以做任何事情。我们个人在我们的组织中开发了一个自定义请求-响应协议。
多种实现
不要坚持使用默认的 GCM/FCM 通知消息协议或实现。您可以部署一种机制来维持与设备的持久套接字连接,并且可以监听服务器想要推送的任何内容。
- WhatsApp 使用 GCM/FCM 及其专有的 XMPP 服务器实现推送通知
- WhatsApp(和其他几个应用程序)依赖 GCM/FCM(作为选项 1 - 默认值),因为它在许多设备上作为系统应用程序存在,因此具有一种特殊状态,它被杀死的可能性很小与普通应用不同。
- 对于没有播放服务的设备,依赖于您的自定义套接字连接。当 FCM 可用时,FCM 可能比套接字更受欢迎,但这些由您来管理。
来自 WhatsApp 的最新版本 (2.19.203):
请注意,存在 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(虽然我不是作者)
他们甚至要求将他们使用的任何端口(自定义)列入白名单。
所以,WhatsApp 做到了。脸书做到了。谷歌做到了。很多这样的公司都是这样做的。您也可以(在一定程度上)使用 Ejjaberd、Openfire 或其他一些技术来实现它,并为其提供适当的客户端实现。
中文ROM
一些中国 ROM 更进一步,从根本上改变了 Android 中管理内存和进程的方式。例如,在 Oppo 中,如果应用程序没有打开自动启动,一旦你的应用程序被杀死,它就不会让你做任何事情。除了希望用户再次打开应用程序之外,不希望有任何体验。在这些情况下,这些原始设备制造商选择性地将 WhatsApp、Facebook、谷歌和其他玩家列入白名单。那么,谁受苦呢?
我们。期间。