Whatsapp 和即时消息应用程序如何在没有 Oreo 持续通知的情况下在后台工作?

Posted

技术标签:

【中文标题】Whatsapp 和即时消息应用程序如何在没有 Oreo 持续通知的情况下在后台工作?【英文标题】:How do whatsapp and instant messaging apps work in background without persistent notification in Oreo? 【发布时间】:2018-09-11 12:41:14 【问题描述】:

我对 *** 和 android 文档的研究。 最后我得出结论:

没有办法为连续任务创建后台服务。如果我真的想要一个服务,我应该启动一个前台服务,并且用户不断地看到一个持久的通知“应用程序正在运行”。无法隐藏此通知。它是谷歌有意添加的。 是的,还有其他选项,例如 WorkManagerJobScheduler,但它们会定期而不是连续地工作。

我想要的是构建一个即时消息应用程序,它使用 xmpp 或套接字持续连接到服务器。但它需要持续连接,但我不想使用前台服务,因为它会向用户显示“应用程序正在运行”的烦人通知。

问题 1: Whatsapp 和其他即时通讯应用程序如何持续连接到服务器但不显示持续通知?他们是如何做到这一点的?

问题 2:如果 Whatsapp 使用 FCM 进行通知,那么它也可以在那些没有安装 playservices 的手机上工作,那么 Whatsapp 通知机制是如何工作的呢?

【问题讨论】:

检查这个Link 1Link 2 是的,这个链接没有告诉whatsapp是如何工作的,以及如何在没有通知的情况下创建服务。 如果您已经知道这是不可能的,请使用不同的标题。当前标题具有误导性 是的@Killer 等收到通知,它开始重新连接 xmpp 连接? 是的,他们可能正在使用其他类型的通知,这些通知在没有播放服务的情况下工作,例如 evernote 在没有播放服务的情况下如何工作,但 firebase 作业调度程序可以 【参考方案1】:

从 Android 6.0(API 级别 23)开始,Android 引入了两项延长用户电池寿命的省电功能:打盹和应用待机。当手机处于打盹模式时,这两个功能会对您的后台处理实施许多限制。您应该在以下链接中阅读有关 Doze 和应用程序待机的信息

https://developer.android.com/training/monitoring-device-state/doze-standby

现在,关于您的用例,您希望即使在应用未运行时也能接收消息和来电。对于这个用例,Android 在 GoogleIO2016 中宣布了高优先级 FCM 消息。它们是高优先级的推送消息,它授予应用程序临时唤醒锁和网络访问权限,与设备的打盹状态或应用程序恰好处于应用程序待机状态无关。这允许应用程序对消息做出反应,并以它想要的任何方式通知用户有关即时消息或来电的信息。

除非我查看他们的代码,否则我不知道 WhatsApp 是如何做到这一点的,但您可以使用 FCM 高优先级消息来处理您的用例。 有关您的用例的更多信息,请点击以下链接:GoogleIO2016 Video from 08:30m to 10:30m

https://www.youtube.com/watch?v=VC2Hlb22mZM&t=505s

并在此答案的第一个链接上阅读此用例。

【讨论】:

以上是关于Whatsapp 和即时消息应用程序如何在没有 Oreo 持续通知的情况下在后台工作?的主要内容,如果未能解决你的问题,请参考以下文章

应用即时通讯

如何在不打开 WhatsApp 的情况下向 WhatsApp 群组发送消息?

如何在应用关闭时显示推送通知,类似于 facebook 和 whatsapp

190亿美元的WhatsApp背后的小众编程语言:Erlang

谷歌助手如何直接从谷歌助手应用程序发送个人 whatsapp 消息?为whatsapp制作用户界面的是谷歌助理吗?

Xubuntu Linux发行版放弃即时消息软件Pidgin