gpt4 book ai didi

android - 在一个函数上发送多个 firebase 云消息

转载 作者:太空狗 更新时间:2023-10-29 13:50:45 24 4
gpt4 key购买 nike

我有这样的数据:

notification
|----event01
|---- token : "gdTh21dG705ysFA91..."
|---- timestamp : 1513335600000
|---- name : "Name Event A"
|---- etc
|----event02
|---- token : "dG7058J1L8I:APA91..."
|---- timestamp : 1513335600000
|---- name : "Name Event B"
|---- etc
|----event03
|---- token : "dG7058J1L8I:APA91..."
|---- timestamp : 1513355000000
|---- name : "Name Event C"
|---- etc

timestamp 到来时,我需要使用 token 将 FCM 发送给用户,将会有超过 1 个具有相同 timestamp 但不同的事件name,所以我不能只使用 token 数组发送消息。

我尝试像这样发送消息,但如果有超过 1 个具有相同时间戳的事件,则只发送第一条消息,没有错误。

我如何使用一个函数发送所有消息,具有相同时间戳的事件可以是 2、3、4... 或 100。

// Runs Promises in a pool that limits their concurrency.
const promisePool = require('es6-promise-pool');
const PromisePool = promisePool.PromisePool;

// Maximum concurrent message sending.
const MAX_CONCURRENT = 3;

/**
* Send notification to user based on timestamp
* Triggered when /variable/notification node updated
* The node updated by C# service when the event is starting
*/
exports.sendStartNotification = functions.database.ref('/variables/notification').onUpdate(event => {
const epoch = event.data.val();

return admin.database().ref('/notification').orderByChild('timestamp').equalTo(epoch).once('value').then(snapshot => {
// Use a pool so that we send maximum `MAX_CONCURRENT` notification in parallel.
const promisePool = new PromisePool(() => {
snapshot.forEach(childSnapshot => {

let notif = childSnapshot.val();
if (notif.token !== null && notif.token !== undefined && notif.token !== '') {
let payload = {
data: {
key: childSnapshot.key,
title: `Event ${notif.name} started`,
body: `Please check-in`
}
};

// Send the message
return admin.messaging().sendToDevice(notif.token, payload).catch(error => {
console.log("Sending failed:", error);
});
}
});
}, MAX_CONCURRENT);

promisePool.start().then(() => {
console.log(`Sending success ${epoch}`);
});
});
});

最佳答案

您没有在代码末尾返回 promise ,这意味着它可能随时终止(或继续运行超过必要的时间)。

return promisePool.start();

我从未使用过 promise 池,所以肯定会考虑使用常规的 Promise.all() 看看这是否有所作为:

var promises = [];
snapshot.forEach(childSnapshot => {

let notif = childSnapshot.val();
if (notif.token !== null && notif.token !== undefined && notif.token !== '') {
let payload = {
data: {
key: childSnapshot.key,
title: `Event ${notif.name} started`,
body: `Please check-in`
}
};

// Send the message
promises.push(admin.messaging().sendToDevice(notif.token, payload));
}
});
return Promise.all(promises);

关于android - 在一个函数上发送多个 firebase 云消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47834387/

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