我目前正在重新使用我的应用程序,它通过从网站而非官方API获取原始数据来更新其内部SQLite数据库。
由于这非常容易出错,我希望将数据处理从客户端移到后端服务器中。 我们的想法是每天多次在服务器上运行一个脚本 - 类似于之前的客户端行为 - 并将数据存储在Firebase实时数据库中。然后,所有客户端不再需要自己处理数据,而是从Firebase数据库请求解析的数据。
我只是想知道保持数据同步的最佳方法是什么。 我想出了两个想法,但由于我对Firebase不太熟悉,我不知道什么是最好的。
我可以想象在某些节点上使用keepSynced()
和setPersistenceEnabled()
来保持客户端上的数据同步。
但我不确定当应用程序处于后台时这是否会使数据保持最新状态。我也担心这种方法的电池和网络使用情况。
第三点是同时连接的数量,我问这种方法每个客户端都会一直连接,对吗?
第二种方法是使用FCM在其感兴趣的节点之一发生变化时通知客户端,例如:使用Firebase云功能来侦听事件并触发消息。
然后,客户端goOnline()
将再次与数据库和goOffline()
同步。这将避免大量连接以及减少电池和网络使用。
但我不确定如何在离线时保留设备上的所有数据?
我不想使用SQLite数据库来保存设备上的数据。
setPersistenceEnabled()
是否足以在设备上保留特定数量的数据库备注?
或者两者兼而有之?根据云消息在所需节点和keepSynced()
/ setPersistenceEnabled()
上设置goOnline()
和goOffline()
?
任何基于自己的经验欢迎的帮助或建议!
答案 0 :(得分:3)
您的第一种方法是尝试确保Android应用始终与Firebase数据库后端建立开放式连接。之前已经提出过这个问题(请参阅here,here),这绝对是可行的。但你会与Android更新斗争,这些更新专门试图通过应用中的这种行为来减少电池使用量。
第二种方法确实更好。我经常将其称为“推送同步”,因为您正在发送推送通知(通过FCM)以触发数据同步。 (加上:这是“拉动同步”模式的一个文字游戏,因此很多应用程序都遵循)。使用此方法的应用程序的一个示例是Google的2016年Android I / O应用程序code for which is on Github。代码有点复杂,但actual sync is here和(iirc)为triggered through this。
答案 1 :(得分:1)
每当您的后端发生任何变更时,都会使用预先存储的令牌将推送数据发送到您的设备。