这是火灾缓存/离线流的预期行为



我的问题是firestore离线机制的工作原理(或者我不理解(。具体问题是,如果有可用的网络,则首先从缓存中同步数据。复制这一点非常容易:

  1. 在您的Firestore数据库中,将您的一个变量之一的数据类型更改为错误的类型。例如,如果我们有包含变量"名称"的文档"人",则类型字符串,将类型更改为数字,然后将1个作为值。

  2. 您的应用程序现在将崩溃,因为Firestore SDK试图从该特定"人"变量" int" int作为字符串中解析数据。

  3. 现在在Firestore数据库上修复此问题,并将" back as name"为字符串和设置值"测试名称"。

  4. 现在打开应用程序(可用网络(。

我在自己的应用程序中看到的问题是数据首先是直接从缓存中获取的,在缓存中,"人"变量"名称"仍然写为int(firestore上的数字(和应用程序即使我有活动的网络连接,也可以直接在Firestore数据库上固定数据类型,然后才能从在线获取更新值。

在这种情况下防止崩溃的唯一解决方案是让用户清除应用程序存储/缓存并再次进入应用程序。这个可再现的问题也针对其他用户吗?这是意图的行为吗?

如果需要更多解释,请在评论中写入。

这是预期的行为。您应该使用一些策略组合来防止由于不良数据而导致的问题:

  1. 显然,验证所有写作是否包含您期望的类型。使用安全规则在服务器上验证这些类型。
  2. 始终假设在阅读文档时,Firestore可以为您提供意外的数据。在假设类型是您的想法之前,请实际检查其类型以确保您的假设正确。

清除缓存不应是您值得生产的解决方案。采取步骤以确保只有良好的数据进入,并且只有在出路时才能处理好数据。

最新更新