2017-08-31 50 views
0

我有一个脱机数据丢失的情况,但它似乎应该已经同步到服务器。在重新连接注销后,Firebase会同步脱机数据吗?

场景:

用户登录到我们的火力地堡的应用程序。持久性已开启的火力地堡的建议:

Database.database().isPersistenceEnabled = true 

如果用户关闭应用程序,并重新启动它,而离线,他/她可以继续使用应用程序来创建和查询数据下线。当用户重新获得网络连接时,数据将同步。我们对这一点很好。

但是,如果用户在离线状态下退出应用程序,他/她需要重新获得网络连接才能登录。此时,应用程序将获得新的身份验证令牌。但以前在离线时使用第一个登录会话/令牌保存的数据尚未同步。数据丢失了吗?还是有办法告诉Firebase使用以前的或新的令牌来同步该离线数据?

timeline of sync

TL;博士:

你怎么火力数据被创建注销离线之前,同步一旦有联系吗?

注意:我没有使用trasactions。我知道在重新启动应用程序时事务丢失了。

+1

丢失的数据是否受安全规则保护? –

+0

否。如果用户没有注销,重新连接时数据会同步。编辑:没有与此数据相关的规则。 – dwaz

+0

如果您所得到的是数据在可以同步之前可能会从设备中删除,否则不会删除数据。它从来没有让它到服务器。 – dwaz

回答

1

在Firebase的支持下工作之后,我学到了这些。如果您有需要用户进行身份验证的安全规则,则以下情况属实。

离线收集的数据需要身份验证令牌才能在获得连接后将数据复制回服务器。 firebase.auth()。signOut()命令破坏了令牌,导致用户的数据丢失。

为了避免丢失数据,您必须阻止您的应用程序注销,或者单独存储离线数据,并提供一种方法让数据在新身份验证令牌上重新提交/同步到Firebase。

这是一个希望Firebase将会改进的领域。我的想法是,Firebase应该基于用户仍然登录时使用的令牌来同步数据。仅仅因为用户已经注销,即使用户处于离线状态,他/她在数据收集时也已登录。我被告知这将是一项功能要求。

相关问题