firebase - Firestore 进行最后一次更新
问题描述
我在 VOIP 应用程序中使用 Firestore,这是我的场景:
- 用户 A 调用用户 B,创建了一个新的 firestore 文档
- 用户 B 设备上有一个侦听器,用于侦听以 B 作为接收者的新文档
- 使用 status = 调用创建文档后
- 用户 B 收到新的文档快照
- 用户 A 在文档创建后快速标记状态 = 结束
- 用户 B 设置状态 = 响铃
所以这里的问题:
我在 Firebase 控制台中看到的最后一次 firestore 更新正在响铃,它应该结束,但由于在用户 A 结束通话后设置了 status = ringing,因此它成为最后一个状态。无法查看是否设置了最后结束,因此 B 用户不设置他的振铃状态。
我如何解决那个“结束”是最后的状态。有没有最后更新的选项?
编辑:这可以通过创建规则来完成,如果一旦状态=结束,它就不能改变?
我创建了以下规则,但它不起作用:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if
request.time < timestamp.date(2022, 10, 28);
allow update: if resource.data.status != 'end'; // I have added this line only
}
}
}
解决方案
Firestore 规则是解决此问题的解决方案。基本上我有允许写入的默认规则,并且write = create、update、delete,所以我必须用 create、delete、read 更改 write 以使其工作。
在将我的规则更新为此之后,它现在可以工作了:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, create, delete: if request.time < timestamp.date(2022, 10, 28);
allow update: if resource.data.status != 'end';
}
}
}
推荐阅读
- amazon-web-services - .ebextensions 未包含在 AWS 源包中
- dynamics-crm - Dynamics crm fetchxml group by
- javascript - html2canvas 下载图像仅返回带有白色和右行的 png 文件?
- swift - 如何以编程方式将根视图控制器添加到 macOS?
- c - 代码块上的 GDB 调试器不起作用(C 语言)
- python - 使用 CPLEX 在 python 中使用 timelimit 是否存在错误?
- android - Azure Pipelines – Release Gradle Pipeline 找不到 gradlew
- binding - 无法转换“Int”类型的值?到预期的参数类型'绑定
' 斯威夫特 - c# - 在视图中填充下拉列表
- c - ['{'标记之前的错误预期表达式