node.js - 在聊天消息中为同一事件获得两次通知
问题描述
我正在将以下代码用于聊天消息中的通知,它正在成功执行,但它为同一事件执行了两次通知,对于单个事件应该只发生一次。我可以知道我在下面的代码中在flutter应用程序中使用firestore数据库实现的firebase云功能做错了什么吗
exports.sendNotification = functions.firestore.document("messageRoom/{message_room_id}/messages/{messageID}").onWrite((change, context) => {
const idTo = context.params.idTo;
const message_room_id = context.params.message_room_id;
const messageID = context.params.messageID;
return admin.firestore().collection('messageRoom').doc(message_room_id).collection('messages').doc(messageID).get().then(queryResult => {
const idFrom = queryResult.data().idFrom;
const to_token_id = queryResult.data().to_token_id;
const idTo = queryResult.data().idTo;
console.log("User id " + idTo + " | Notification id " + "notification_id" + " | Token ID is : " + to_token_id + " | from user id " + idFrom);
var payload = {
notification: {
title: 'Chat Message',
body: "New Message",
icon: 'default',
sound: 'default'
},
data: {
click_action: 'FLUTTER_NOTIFICATION_CLICK',
groupChatId: messageID,
category: 'default'
}
};
return admin.messaging().sendToDevice(to_token_id, payload).then(result => {
console.log("Notification Sent chat notification");
return null;
});
}
);
});
解决方案
我只是认为这值得基于 Sanzio 和 Johnny 的对话来创建答案。
在这种情况下,首先想到的是onWrite
监听器被调用了两次。因此,首先要确保写入messageRoom/{message_room_id}/messages/{messageID}
一次完成,无论是来自设备还是其他云功能。
实际上,在这种情况下,写作似乎是从两个不同的位置完成的。
我希望它能帮助任何将来面对它的人:)
推荐阅读
- css - 如何使用 NativeScript 设置菜单栏中活动项的颜色?
- python - Python修改字典列表中的值
- c# - 图片发布到 Asp.Net Web API
- css - 生成的 css 文件是否应该与我的组件的源代码一起放置?
- javascript - Vuex Store 在 Typescript 类中未定义
- java - wsimport 任务拒绝 Gradle / Java 访问
- android - 使用 PowerMockRunner 测试 LiveData
- linux - 无法插入某些 Linux 模块。各种错误
- css - 如何在子页脚 Wordpress 中居中我的版权文本
- google-api - 将文件复制到谷歌驱动器所需的最小范围是多少