一尘不染

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

angularjs

我目前正在使用angularJS和phonegap构建适用于Android / iOS的测试应用程序。

该应用程序仅使用存储在Firebase数据库中的文本数据。我希望该应用程序具有自己的本地数据库(在设备离线时使用),并在某个时间(设备在线时)与Firebase数据库同步。

离线模式使用phonegap / cordova的存储API。我可以检查设备的在线状态并定期备份在线数据库吗?

关于如何实现此目标的任何线索?上次提出类似问题时,答案是“尚未”……
(在此) ……,因为它侧重于假设的Firebase功能。


阅读 336

收藏
2020-07-04

共1个答案

一尘不染

如果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. 保持本地数据简单小巧
  2. 设备上线时,将本地存储的数据转换为JSON
  3. 用于set()将数据保存到适当路径的Firebase中

此外,如果在设备离线时加载应用程序,由于某种原因,您可以通过调用set()来“初始化”数据来“初始化”
Firebase。然后,您可以照常使用Firebase(就像联机一样),直到将来某个时候联机(您还希望存储本地副本以处理从未使用过的情况)。

显然,越简单越好。同时进行的修改,本地存储大小的限制以及许多其他因素将迅速累积,从而使任何脱机存储解决方案变得复杂且耗时。

2020-07-04