Long 运行 服务接收来自 emqx 的推送消息

Long running service to receive push messages from emqx

我想实现一个长 运行 服务来接收来自 emqx 服务器的推送消息(即使程序不是 运行)。如果我使用 android 服务或 JobIntentService,则需要显示非预期的通知。如果我使用 WorkManager,可以定义的最小重复间隔为 15 分钟。出于某种原因,我们不想使用 Firebase。这个问题有解决办法吗?

“推送通知”的意思是“服务器触发你的App”,所以主要有两种方式:

  1. 使用本机 Android Firebase 消息创建
  2. 所有客户端和您的服务器之间的持久连接

第一个选项对所有(或大部分)应用程序使用由Android管理的单个连接,因此能耗非常低Connection/Network 事件由 Android 本身管理。

第二个 选项需要在 Connection/Network 重新连接方面做大量工作,并在服务器端进行一些工作。您的服务器应该根据需要保留和管理许多客户端连接。此外,服务器应该知道客户端的 TCP/UDP 处理程序,以了解向哪个客户端发送消息。 这种方式比第一种方式消耗更多的电池能量。

如果您打算将“推送通知”作为“轮询服务器以了解某些通知是否准备就绪”,那么您误解了“推送”一词,您只能创建带有通知图标的持久服务(此行为从 SDK 26 开始是强制性的)。

正如您所提到的,在android的新版本中,对使用后台服务有很多限制。因此,我建议您尽可能使用混合方法。您的服务器使用 google-fcm 服务通知客户端新消息,每当客户端收到它时,在 WorkManager 上建立与 emqx 代理的连接以获取实际消息。在这种方法中,只要应用程序在前台,您就可以连接到您的代理,并且您不通过 fcm 发送消息,而是将其用作向客户发出新消息的警报。