【发布时间】:2019-11-02 08:40:14
【问题描述】:
我有一个 Flutter 应用程序,它允许用户通过 Firestore RTDB 互相租用物品。在我的租赁文件中,我有一个字段status 来确定租赁的状态(将其想象为运送物品,其中物品的状态可以是“已订购”、“已发货”、“已交付”等)。我的status变量是0到5之间的一个数字,每个数字代表一个不同的阶段。当status 变量发生变化时,我想通过推送通知通知租赁中的其他用户。但我不知道以下哪种方法最好。
-
第一种方法是使用每次更新租赁文件时触发的云功能。但我只检查
status字段。它看起来像这样:exports.notify = functions.firestore.document('rentals/{rentalId}') .onUpdate(async (snapshot, context) => { const oldSnap = snapshot.before.data(); // previous document const newSnap = snapshot.after.data(); // current document // status changes from 0 to 1 if (oldSnap.status === 0 && newSnap.status === 1) { // do something } })我能想到的一个缺点是我必须再次读取才能获取其他用户的设备推送令牌。此外,每次租赁文件更新都会触发此云功能,最终可能甚至不需要首先执行
-
另一种方法是拥有一个存储通知的
notifications集合,并拥有一个在添加新通知文档时触发的云功能。然后,在客户端,当用户点击一个按钮时,更新租赁中的status,并创建一个新的通知文档。Firestore.instance .collection('rentals') .document(rentalId) .updateData({'status': newStatus}); Firestore.instance.collection('notifications').add({ 'title': title, 'body': body, 'pushToken': <TOKEN HERE>, });与方法 1 相比,这会进行额外的写入而不是读取。
哪种方法更好?
【问题讨论】:
-
你有什么问题?
-
哪种方法更好
标签: node.js google-cloud-firestore firebase-cloud-messaging google-cloud-functions