我在我的应用中使用 Firebase实时数据库。它运作得很好,我对此非常满意。但最近我碰到了一个边缘案例,因为我的一些用户正在丢失他们的数据。
情景#1
用户使用 Internet连接登录应用程序(Firebase身份验证),并将一些数据添加到数据库中。
用户使用连接注销,然后重新登录,之前存储的数据按预期存在。互联网连接可用,数据已同步到服务器。
情景#2
现在用户关闭了他/她的互联网连接。在互联网连接关闭时,向数据库添加更多数据并退出应用。
现在用户重新打开他/她的互联网连接并以与上面完全相同的方式登录应用程序。
现在用户看不到应用处于离线模式时添加的任何数据。我有setPersistenceEnabled(true)
,在正常情况下它可以很好地工作。
问题
问题是,当用户处于脱机模式时,持久性会失败,会向数据库添加一些数据(由于没有互联网而无法同步到服务器),并在离线模式下注销,然后再次登录
这是一个边缘案例,但我的一些用户已经面临这种情况,并且由于这个错误而丢失了他们有价值的数据。如何解决这个问题?它是Firebase数据库的默认行为吗?如果是这样,有没有解决方法呢?
答案 0 :(得分:1)
通过我的应用程序,它的确如此。
来自Firebase文档 https://firebase.google.com/docs/database/android/offline-capabilities
... 如果我们的应用使用Firebase身份验证,则客户端将在重新启动时保留用户的身份验证令牌。如果在我们的应用程序脱机时auth令牌到期,客户端将暂停我们的写入操作,直到我们重新进行身份验证,否则我们的写入可能会因安全规则而失败。 ..
这意味着如果您在上线时退出了应用程序,则应用程序不会在退出之前同步您进行身份验证的条目。
只有选项不会离线注销。