我想问的是:
我发现,如果我强制停止Messenger和Facebook,我仍然会收到消息,但比平常晚了一些。 另外,在Messenger,Facebook,Slack和Skype中有一个“允许后台活动”选项,当我禁用它时,我根本不会收到任何通知。 有趣的是,WhatsApp在其应用程序信息中没有此选项,如果我强制停止WhatsApp,它只会停止向我显示消息通知。
答案 0 :(得分:4)
这些应用是否依赖FCM / GCM(或任何其他类型的)推送 同步数据或使用套接字的通知 通过服务在后台连接?
他们必须依靠FCM。
如果他们依靠推送通知,那么为什么他们没有任何通知 我错过了10-15%的通知时(后台)接收通知丢失 忙时发送通知。
他们必须使用在打ze模式下可靠交付的FCM high priority。
如果他们在后台依赖套接字连接,那么 这不是像恐龙一样吃电池吗?
他们可能没有运行CPU密集型工作。
诸如Whatsapp之类的移动应用程序必须请求权限才能将其从打ze /省电和应用待机模式中排除。您可以参考我的答案here以获得更多详细信息。
答案 1 :(得分:0)
好吧,我不知道他们在后台(也许没有人)在做什么完全,但是让我们来看看这个概念。
在分布式系统和Web应用程序中,通常没有人 在后台使用推送通知系统来使它们的服务相互通信。尽管有可能,但是这些活动的服务具有更好的选择,例如发布者/订阅者模式和为我们带来此服务的技术(例如:reddis,MQ,Nats.io),它们具有高可用性,并且没有任何问题失败,并且数据仍在所有服务器上同步。
您的第二个问题以if
开头,结果可能为false
。但是可以说他们做到了。绝对不要将“ client to server
连接和逻辑”与“ Server to server
连接和逻辑”进行比较。我的意思是也许他们使用 Reddis 发布/订阅服务,但这并不意味着他们的客户端应该使用相同的系统来连接服务器。在支持大量消息同步的同时保持这些服务器连接的活动成本很高。
关于第三个问题。不,插座连接不会总是耗尽电池电量。这实际上取决于您如何使用它们。您也可以检查套接字空闲模式。
此外,当应用程序未运行或未连接到服务器时,诸如firebase之类的系统仍可能能够发送通知。伊朗政府封锁了Telegram时,我发生了很多次,但我仍然可以收到通知。它的其他故事,我想您只需稍作搜索就可以找到更多有关它的信息。
PS:请避免一次问太多问题。谢谢。
答案 2 :(得分:0)
添加到Sagar答案。
1)除非需要,否则从不显示来自FCM通知负载的通知。
2)一旦收到高优先级FCM,您就可以进行网络操作一段时间并从服务器获取数据,然后显示出来。如果失败,whatsapp会使用特殊的味精进行补充。 https://www.quora.com/Why-do-I-get-You-may-have-new-messages-notification-on-WhatsApp
3)暂时使用与应用程序图标绑定的前台服务/ cpu锁,直到获取数据为止,然后将其关闭。
PS:没有whatsapp不需要电池优化。他们可能会回复FCM高优先级消息。