我目前正在更新一个应用程序,其工作流程如下:
- 我们上传一条带有某些数据的记录到Firestore数据库中。
- 通过谷歌云,这自动生成了一个推送通知,并通过通道发送到我们用户的设备。
- 设备接收到此通知,并使用FCM的
onMessageReceived
函数触发与Firestore数据库的同步。 - 尝试与Firestore数据库同步。
- 无论这个同步是否正确,推送通知仍然会显示给用户。当他按下时,应用程序会崩溃。
不过,我认为当Android进入深度睡眠模式(Doze mode)时,第4步会出现错误;因此设备无法与Firestore数据库同步,因此对于约20%的用户,应用程序将崩溃。
然后我发现了Workmanager,我相信它可以帮助解决这个问题。不过,我对此还是很陌生。我在考虑一个解决方案:
我专门创建一个WorkRequest,并设置一个约束条件,说明设备必须连接到互联网。在这个WorkRequest中,我将执行此数据库同步以及向用户显示通知。
然而,这可能会导致一些延迟,因为它取决于用户何时连接他们的设备到互联网。理想情况下,我认为最好的解决方案是像这里描述的那样。最终,在我的情况下,同步(计划任务)由外部事件(FCM)触发,但我很难理解这是否真的是最佳解决方案。你认为呢?第一个解决方案好吗?如果第二个更好,您是否有代码示例(基本框架),以便我了解如何将WorkManager与FCM相关联?或者Workmanager也许不是这个问题的最佳解决方案?
非常感谢!