首页 文章

Firebase的真正离线功能

提问于
浏览
6

我试图了解Android上Firebase的离线功能到底有多远 .

据我了解,应该可以使用 FirebaseDatabase.getInstance().setPersistenceEnabled(true); 创建数据库"persistent"

文件内容如下:

Firebase实时数据库存储从查询返回的数据,以便在脱机时使用 . 对于脱机时构建的查询,Firebase实时数据库将继续为以前加载的数据工作 . 如果未加载请求的数据,Firebase实时数据库将从本地缓存加载数据 . 当我们重新上线时,我们的数据将加载并反映查询 .

当离线状态被 goOffline 强迫时,这也是真的吗?

this question中,用户得到了firebase支持的答案:

虽然您可以使用goOffline()强制客户端长时间离线,但性能会随着时间的推移而恶化 . Firebase客户端将对中间状态更改进行排队,而不是像服务器那样更新存储状态 .

这是否意味着“本地数据库”实际上没有像因连接丢失而离线时更新?

因为大多数时候任何查询或值事件监听器都没有返回,所以onDataChange永远不会被调用为onCanceled(我已经检查过!)

如果只有连接丢失,它实际上就像宣传的一样,虽然有时会有一分钟的延迟,这本身就是一个问题 .

如果这只是完全停止与数据库的交互,那么甚至提供 goOffline() 方法的意图是什么呢?

在我的实现中,应用程序启动脱机,具有匿名身份验证 . 所以在开始的时候,“本地数据库”将是完全空的 . 但是,值事件至少应该使用空数据快照触发onDataChanged吗?

我尝试保持在线状态,直到收到匿名UID并在firebase数据库中添加一个空条目,然后查询/缓存 . 之后,如果我调用 goOffline ,则不能再添加任何条目,也不会再回答任何查询 .

与上面提到的问题类似,我的计划是为用户提供保持离线的选项,当然还有在本地缓存中 Build 存储的写事件的缺点(但这不应该是一个大问题 . 没有那么多数据)

那么即使可能,我怎样才能做到这一点?

我唯一能看到的是在开始时为实际的离线功能提供一些不同的数据库解决方案,当用户选择上线时,必须将其转换并转移到firebase .

1 回答

  • 0

    我真的不知道你想要得到什么,但是对于我的看法,如果你为你的应用程序做了一个很好的设计,你可能有类似的东西,让我们想象一下,在线和离线之间它是一个开关按钮,当你切换时在线,你将使用一种方法来设置所有的监听器并启用发送更改,当你离线时,你删除你的监听器并禁止将你的变更发送到服务器,但你将它们存储在缓存中,这样当你上线时在那之后,你所要做的就是将你在cach中拥有的东西推向数据库 .

相关问题