首页 > 解决方案 > 在聊天消息中为同一事件获得两次通知

问题描述

我正在将以下代码用于聊天消息中的通知,它正在成功执行,但它为同一事件执行了两次通知,对于单个事件应该只发生一次。我可以知道我在下面的代码中在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;
            });
        }
    );
});

标签: node.jsfirebasegoogle-cloud-firestoregoogle-cloud-functions

解决方案


我只是认为这值得基于 Sanzio 和 Johnny 的对话来创建答案。

在这种情况下,首先想到的是onWrite监听器被调用了两次。因此,首先要确保写入messageRoom/{message_room_id}/messages/{messageID}一次完成,无论是来自设备还是其他云功能。

实际上,在这种情况下,写作似乎是从两个不同的位置完成的。

我希望它能帮助任何将来面对它的人:)


推荐阅读