我希望实现一个长时间运行的服务来接收来自emqx服务器的推送消息(即使程序没有运行)。如果我使用android或JobIntentService,就必须显示一个非故意的通知。如果使用WorkManager,可以定义的最小重复间隔为15分钟。由于某些原因,我们不想使用Firebase。这个问题有解决办法吗?
发布于 2021-10-14 08:30:18
“推送通知”意思是“服务器触发您的应用程序”,因此有两种主要方法:
First选项使用由Android (或大部分)应用程序管理的单个连接,因此能量消耗非常低,连接/网络事件由Android自己管理。
第二个选项需要关于连接/网络重新连接的大量工作,以及服务器端的一些工作。您的服务器应该保存和管理许多客户端连接,以便记录它的需要。此外,服务器应该知道客户端的TCP/UDP处理程序,以知道在哪个客户端发送消息。这样比第一次消耗更多的电池能量。
如果您打算将"Push Notification“作为”轮询服务器以知道某些通知是否已准备好“,那么您就忽略了"Push”word,您只能创建带有通知图标的持久服务(这种行为从SDK 26开始是强制性的)。
发布于 2021-12-05 06:41:39
正如您所提到的,在android的新版本中,对使用后台服务有很多限制。因此,如果可以的话,我建议您使用混合方法。您的服务器使用google-fcm服务通知客户端新消息,并且每当客户端接收到它时,在WorkManager上建立到emqx的连接,以获取实际消息。在这种方法中,您可以在应用程序位于前台时连接到您的代理,而且您也不会通过fcm发送消息,而是将其用作向客户发送新消息的警报。
https://stackoverflow.com/questions/69565489
复制相似问题