当前位置: 首页 > 面试题库 >

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

越涵衍
2023-03-14
问题内容

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

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

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

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


问题答案:

如果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(就像联机一样),直到将来某个时候联机(您还希望存储本地副本以处理从未使用过的情况)。

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



 类似资料:
  • 我有一个可以监听Firebase实时数据库中的任何值更改。在线模式下,一切正常。 但在脱机模式下,设备处于脱机状态,我的Web服务器在Firebase实时数据库上完成了多个事务,其值与我从Android中输入的侦听器的值相同。设备联机后,它将只侦听最后一个事务,并跳过其间完成的其他事务。 PFB参考链接。到目前为止我已经完成的PFB代码:

  • 问题内容: 我的要求是我有服务器J2EE Web应用程序和客户端J2EE Web应用程序。有时客户端可以脱机。当客户上线时,他应该能够来回同步更改。我还应该能够基于一些过滤器/规则来控制哪些行/表需要同步。有没有现成的Java框架可以做到这一点?如果我需要自己实施,您可以建议哪些不同的策略? 我想到的一个解决方案是维护SQL日志并在同步期间在另一端执行相同的语句。您认为此策略有任何问题吗? 问题答

  • 我注意到,如果我发送一些数据到数据库,同时互联网连接被删除,在我重新连接后,数据不会被重新发送。此功能不适用于统一或我错过了什么?这个文档说这应该行得通,但事实并非如此:https://firebase.google.com/docs/database/unity/save-data#write_data_offline

  • 我第一次在firebase上工作,了解firebase的脱机功能,测试了两个场景: 设想1(工作): > 按后退按钮(关闭应用程序) 场景2(不工作): 脱机模式,将数据写入firebase数据库 关闭应用程序 从后台删除应用程序(删除应用程序) 已联机,未添加数据 我加了一行: 如何处理场景2?我需要通过本地数据库处理这个场景吗?

  • 更新时间:2019-10-31 11:21:44 目标 当前模版可以让您学习如何响应设备的上下线状态,把状态信息推送到钉钉群里。可以用于监听设备是否离线。 说明 有一系列的设备在工作,上下线监听,可以知道设备当前是否离线,方便的管理大量设备的工作,例如网吧电脑,不用的电脑是否没有关机。 创建产品 本次需要在开发服务项目下创建一个产品和一个设备,或者在物联网平台选择一个同类产品导入项目内。 1.创建

  • 我离线使用此代码,并使用Firebase同步Android应用程序中的数据。Firebase离线数据库数据清除当我重新启动移动设备或此Android/Firebase应用程序? //存储我最后一次断开连接的时间戳(我最后一次被看到在线)最终数据库参考lastOnlineRef=database.get参考(/用户/joe/lastOnline);