0

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

4

2 回答 2

1

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

  1. 使用原生 Android Firebase Messagging 创建
  2. 所有客户端和您的服务器之间的持久连接

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

第二选项需要有关连接/网络重新连接的繁重工作以及服务器端的一些工作。您的服务器应保存和管理许多客户端连接,以了解所需的日志记录。此外,服务器应该知道客户端的 TCP/UDP 处理程序以知道要向哪个客户端发送消息。这种方式比第一种方式消耗更多的电池能量。

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

于 2021-10-14T08:30:18.243 回答
0

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

于 2021-12-05T06:41:39.413 回答