我目前正在使用angularJS和phonegap为Android / iOS构建一个测试应用程序。
应用程序只使用存储在Firebase数据库中的文本数据。我希望应用程序有自己的本地数据库(在设备离线时使用),并在某个时候(在设备在线时)与Firebase数据库同步。
离线模式使用phonegap/cordova的存储API,我可以只检查设备的在线状态并定期备份在线数据库吗?
关于我如何实现这一点有什么线索吗?上次问类似的问题时,答案是“还没有”... (here)...因为它专注于一个假设的Firebase特性。
2条答案
按热度按时间huus2vyu1#
如果Firebase在开始时在线,但暂时失去连接,稍后重新连接,它会同步本地数据。因此,在许多情况下,一旦Firebase在线,您可以在中断期间继续推送Firebase。
对于真正的离线使用,您可能需要监视设备的状态,并观察
.info/connected
以了解Firebase何时连接。在当前Firebase工具集支持真正的离线存储之前,使用该工具集实现这一点的方法是
1.保持本地数据简单、小巧
1.当设备联机时,将本地存储的数据转换为JSON
1.使用
set()
将数据保存到Firebase中的相应路径此外,如果应用程序在设备离线时加载,出于某种原因,您可以通过调用set()“初始化”数据来“预充”Firebase,然后您可以正常使用Firebase(就像它在线一样),直到它在未来某个时候上线(您还希望存储本地副本,以处理它从未上线的情况)。
显然,越简单越好。并发修改、本地存储大小的限制以及许多其他因素会迅速累积,使任何离线存储解决方案都变得复杂和耗时。
ruyhziif2#
过了一段时间,我想在@加藤的回答上加0.03美元:
选择调用
snapshot.exists()
,而不是调用snapshot.val() === null
。正如documentation所指出的,exists()
比将snapshot.val()
与null进行比较稍微更有效。如果你想更新数据,最好使用
update()
方法,而不是set()
,因为最后一种方法会覆盖你的Firebase数据。