cordova 如何在设备在线时与Firebase同步离线数据库?

olhwl3o2  于 2023-02-05  发布在  其他
关注(0)|答案(2)|浏览(165)

我目前正在使用angularJS和phonegap为Android / iOS构建一个测试应用程序。
应用程序只使用存储在Firebase数据库中的文本数据。我希望应用程序有自己的本地数据库(在设备离线时使用),并在某个时候(在设备在线时)与Firebase数据库同步。
离线模式使用phonegap/cordova的存储API,我可以只检查设备的在线状态并定期备份在线数据库吗?
关于我如何实现这一点有什么线索吗?上次问类似的问题时,答案是“还没有”... (here)...因为它专注于一个假设的Firebase特性。

huus2vyu

huus2vyu1#

如果Firebase在开始时在线,但暂时失去连接,稍后重新连接,它会同步本地数据。因此,在许多情况下,一旦Firebase在线,您可以在中断期间继续推送Firebase。
对于真正的离线使用,您可能需要监视设备的状态,并观察.info/connected以了解Firebase何时连接。

new Firebase('URL/.info/connected').on('value', function(ss) {
   if( ss.val() === null ) /* firebase disconnected */
   else /* firebase reconnected */
});

在当前Firebase工具集支持真正的离线存储之前,使用该工具集实现这一点的方法是
1.保持本地数据简单、小巧
1.当设备联机时,将本地存储的数据转换为JSON
1.使用set()将数据保存到Firebase中的相应路径
此外,如果应用程序在设备离线时加载,出于某种原因,您可以通过调用set()“初始化”数据来“预充”Firebase,然后您可以正常使用Firebase(就像它在线一样),直到它在未来某个时候上线(您还希望存储本地副本,以处理它从未上线的情况)。
显然,越简单越好。并发修改、本地存储大小的限制以及许多其他因素会迅速累积,使任何离线存储解决方案都变得复杂和耗时。

ruyhziif

ruyhziif2#

过了一段时间,我想在@加藤的回答上加0.03美元:
选择调用snapshot.exists(),而不是调用snapshot.val() === null。正如documentation所指出的,exists()比将snapshot.val()与null进行比较稍微更有效。
如果你想更新数据,最好使用update()方法,而不是set(),因为最后一种方法会覆盖你的Firebase数据。

相关问题