【问题标题】:Firebase Realtime Database Inconsistent Behaviour in Offline Mode离线模式下的 Firebase 实时数据库行为不一致
【发布时间】:2017-04-03 11:39:17
【问题描述】:

我在我的应用中使用 Firebase 实时数据库。它工作得非常好,我对此非常满意。但最近我遇到了一个极端情况,因为我的一些用户丢失了他们的数据。

场景#1

用户在互联网连接的情况下登录应用(Firebase 身份验证),并将一些数据添加到数据库中。

用户退出互联网连接,然后再次登录,之前存储的数据如预期的那样存在。互联网连接可用,数据已同步到服务器。

场景 #2

现在用户关闭了他/她的互联网连接。 互联网连接关闭时,向数据库添加更多数据并退出应用。

现在用户重新打开他/她的互联网连接并以与上述完全相同的方式登录应用程序。

现在用户看不到应用处于离线模式时添加的任何数据。我有setPersistenceEnabled(true),它在正常情况下工作得很好。

问题

问题是当用户处于离线模式时持久性失败,将一些数据添加到数据库(由于没有互联网而不会同步到服务器)并在离线模式下退出,然后稍后再次登录.

这是一个边缘案例,但我的一些用户遇到了这个问题,并且因为这个错误而丢失了他们的宝贵数据。如何解决这个问题?这是 Firebase 数据库的默认行为吗?如果是这样,是否有任何解决方法?

【问题讨论】:

  • 有人对如何解决这个问题有任何想法吗?

标签: android firebase firebase-realtime-database firebase-authentication


【解决方案1】:

通过我的应用,它确实如此。

来自 Firebase 文档 https://firebase.google.com/docs/database/android/offline-capabilities

... 如果我们的应用使用 Firebase 身份验证,客户端将在重新启动时保留用户的身份验证令牌。如果 auth 令牌在我们的应用离线时过期,客户端将暂停我们的写入操作,直到我们重新进行身份验证,否则我们的写入可能会由于安全规则而失败。 ..

这意味着如果您在上线时退出应用程序,则应用程序不会同步您在退出之前验证的条目。

唯一的选择是不要离线退出。

【讨论】:

  • 是的,这是一种解决方案。但它仍然不完美,因为用户离线并且在那段时间里放了很多数据。现在他迅速打开互联网并退出。他做得足够快,让 Firebase 获得新的身份验证令牌并将数据同步到服务器。问题仍然存在。有没有办法在退出前强制同步所有数据?
  • 我认为没有。如果互联网离线,您既不能同步也不能进行身份验证。我有同样的问题。可能是下一个版本的 Firebase 来解决。阅读答案stackoverflow.com/questions/38281761/…
  • 我知道离线时无法同步。有没有办法在互联网可用时强制同步所有数据,以便在退出之前我可以强制同步所有数据并确保互联网也可用。
  • 回复stackoverflow.com/questions/38281761/… 唯一的方法是将 CompletionListeners 附加到您执行的每个写入操作,并等待它们完成以允许注销。
  • 你使用什么版本的 Firebase ?我正在使用 9.2.0。 9.6 版 - 2016 年 9 月 21 日修复了导致 Android 应用程序在与 Firebase 实时数据库断开连接时取消未发送事务,而不是将它们排队等待稍后发送的问题。 firebase.google.com/support/release-notes/android#10.0
猜你喜欢
  • 2019-01-11
  • 2019-06-11
  • 2018-12-29
  • 1970-01-01
  • 1970-01-01
  • 2016-12-19
  • 2021-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多