克服Firestore更新会稍有延迟

时间:2019-03-07 12:10:30

标签: android firebase google-cloud-firestore

我想做的是-
我得到了来自不同客户端上用户的点击,
我需要知道第一个点击的是哪个

我有一个客户写的文件,
我的想法是让客户更改它,只要它是一个空字符串即可。
否则,如果已经填充(带有用户ID),则无法应用更改。
这样,我就能知道哪个用户先点击了。

此解决方案的问题在于它是客户端,
并稍有延迟,导致未先点击的用户,
来更新其用户ID,因为当他们单击时,真正的第一个用户尚未更新。

现在,我是Firestore和Firebase的新手,我的问题是,
有办法解决这个问题吗?

我有另一个想法,基本上是让所有客户将当前时间发送到Firestore,
然后检查谁是第一个,但我想知道是否有办法将我的第一个想法付诸实践,并使之付诸实践。

thx!

2 个答案:

答案 0 :(得分:1)

我会进行日期验证,但是在客户端执行此操作并不是很安全,因为本地时间的变化可能会导致用户错误地识别为早或晚。为了解决这个问题,我看到了两个选择:

  1. 第一个是创建一个HTTPS Cloud Function,您可以在其中获取服务器日期并将其发送到数据库。这样,您就不会受到用户设备上本地日期的影响。您还可以通过在所需的任何位置托管此代码并使用HTTP调用它来执行相同的操作,Cloud Function更加容易。

  2. 另一个选择是首先将日期和用户保存到Realtime DB。它是为实时应用程序创建的,因此编写起来可能比Firestore更快。然后,您可以创建一个DB Cloud Function,它将获取日期并将其发送到Firestore,然后您可以在其中确认首先保存了哪个用户。

答案 1 :(得分:1)

我认为您可以从交易https://firebase.google.com/docs/firestore/manage-data/transactions)的原子性中受益

交易看起来像这样:

  • 读取字符串字段
  • 如果为空,则编写并返回“成功的第一个”,如果不是,则返回“已经存在的人”
  • 如果有人已经在该字段上进行交易,请重试该交易,直到另一笔交易终止(firestore会自动为您完成交易)