0

我目前正在重新开发一个应用程序,通过从网站获取原始数据而不是官方API来更新它的内部SQLite数据库。保持Firebase实时数据库中的数据始终保持同步

由于这很容易出错,我想将数据处理从客户端移到后端服务器。 这个想法是让服务器每天多次在服务器上运行 - 类似于之前的客户端行为 - 并将数据存储在Firebase实时数据库中。然后,所有客户端不再需要自行处理数据,而是从Firebase DB请求已解析的数据。

我只是想知道什么是保持数据同步的最佳方法。 我提出了两个想法,但由于我对Firebase不太熟悉,所以不知道最好。

对于我可以想象的在一些节点上使用keepSynced()setPersistenceEnabled()来保持客户端上的数据同步。 但是我不确定这是否会在应用程序处于后台时使数据保持最新状态。我担心这种方法的电池和网络使用情况。 第三点是同时连接的数量,我用这种方法使每个客户端都会一直连接,对吗?

第二种方法是使用FCM在其感兴趣的节点之一发生变化时通知客户端,例如,使用Firebase云端函数来侦听事件并触发消息。 然后客户端goOnline()再次与数据库同步并且goOffline()。这将避免大量的连接以及减少电池和网络使用。 但我不确定如何在离线时保留设备上的所有数据? 我不想使用SQLite数据库来保存设备上的数据。 是否setPersistenceEnabled()足以在设备上保存特定数量的数据库备注?

或者是两种方式混合使用?在需要的节点上设置keepSynced()setPersistenceEnabled(),并根据云消息设置goOnline()/goOffline()

任何帮助或建议基于自己的expiriences欢迎!

回答

0

对于您考虑只使用推送数据而不通知的情况,FCM将是一个很好的选择,因为这会强制将数据发送到您的移动应用程序的onReceive方法中。如果您的设备处于脱机状态,它将在重新联机时重新发送数据。

只要您的后端发生任何更改,都会使用其预存的令牌将推送数据发送到您的设备。

1

您的第一种方法是确保Android应用始终与Firebase数据库后端建立开放连接。这已经被询问/尝试过(参见herehere),并且绝对有可能。但是,您将与Android更新战斗,这些更新专门试图通过应用程序中的这种行为来减少电池使用量。

第二种方法确实比较好。我经常将其称为“推送同步”,因为您正在发送推送通知(通过FCM)来触发数据同步。 (加上:这是一个在“拉同步”模式的文字游戏,所以很多应用程序都遵循)。使用这种方法的应用程序的一个示例是2016年谷歌的Android I/O应用程序code for which is on Github。代码有点复杂,但actual sync is here和(iirc)它是triggered through this

相关问题