gpt4 book ai didi

node.js - 使用 Node.js 的多个 Firebase 通知

转载 作者:太空宇宙 更新时间:2023-11-04 01:59:56 24 4
gpt4 key购买 nike

我创建了一个 Node.js 文件来在 FCM 的帮助下发送通知,我将该文件上传到 Firebase 的“函数”部分,它工作正常,当它发现数据库中发生更改时,它会向设备发送通知。

问题在于它发送相同通知的次数太多(3 到 10 次之间)。

这是我的代码 Node.js:

var admin = require("firebase-admin");
var request = require('request');
const functions = require('firebase-functions');
var API_KEY = "<KEY>";

admin.initializeApp({
credential: admin.credential.cert({
projectId: "projectId",
clientEmail: "clientEmail",
privateKey: "privateKey"
}),
databaseURL: "https://database.firebaseio.com/"
});

exports.backendDeNotificaciones = functions.database.ref('/solicitudDeNotificaciones').onWrite(event => {


ref = admin.database().ref();
function EsperandoNotificaciones()
{
console.log("Esperando Notificaciones");
var requests = ref.child('solicitudDeNotificaciones');
requests.on('child_added', function(requestSnapshot)
{
var request = requestSnapshot.val();
enviarNotificacion(
request.username,
request.message,
function()
{
requestSnapshot.ref.remove();
});
}, function(error)
{
console.error(error);
});
};


function enviarNotificacion(username, message, onSuccess) {
request({
url: 'https://fcm.googleapis.com/fcm/send',
method: 'POST',
headers: {
'Content-Type' :' application/json',
'Authorization': 'key='+API_KEY
},
body: JSON.stringify({
notification: {
title: message
},
to : '/topics/TOPIC_NAME'
})
}, function(error, response, body) {
if (error) { console.error(error); }
else if (response.statusCode >= 400) {
console.error('Error de HTTP: '+response.statusCode+' — '+response.statusMessage);
}
else {
onSuccess();
console.log("Notificación Enviada :)");
}
});
}
EsperandoNotificaciones();

});

最佳答案

每次有人向数据库写入通知请求时,您都会从数据库中读取所有通知请求、发送它们并删除它们。当您在处理另一个通知请求时收到新的通知请求时,这可能会导致竞争条件。

您应该简单地回复每个单独的通知请求。这也很好地简化了您的代码:

exports.backendDeNotificaciones =
functions.database.ref('/solicitudDeNotificaciones/{messageId}').onCreate(event => {
var request = event.data.val();
enviarNotificacion(
request.username,
request.message,
function() {
event.data.ref.remove();
});
}, function(error) {
console.error(error);
});
};
});

关于node.js - 使用 Node.js 的多个 Firebase 通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46386735/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com