【发布时间】:2021-03-08 02:36:01
【问题描述】:
我的目标是在用户发送消息时发送推送通知。我试图通过从 firestore 数据库中检索所有推送令牌,并在每次将新消息添加到实时数据库时使用这些令牌发送多播消息来做到这一点。
作品
第一个示例有效。没有令牌检索,令牌是硬编码的。我确实收到了通知。
exports.notifyUsers = functions.database.ref('/messages/{messageId}').onCreate((liveSnapshot, context) => {
const name = context.params.messageId;
const message = liveSnapshot.val().toString();
const tokens = [
"e6erA_qM...",
"ePU9p_CI...",
];
const payload = {
notification: {
title: `New message from ${name}`,
body: message,
badge: '1',
sound: 'default'
},
tokens: tokens,
}
const res = admin.messaging().sendMulticast(payload);
console.log(`response: ${res}`);
不起作用
这不起作用,我没有收到任何通知。
exports.notifyUsers = functions.database.ref('/messages/{messageId}').onCreate(async (liveSnapshot, context) => {
const name = context.params.messageId;
const message = liveSnapshot.val().toString();
const snapshot = await admin.firestore().collection('users').get();
const tokens = snapshot.docs.map(doc => doc.data().token);
const payload = {
notification: {
title: `New message from ${name}`,
body: message,
badge: '1',
sound: 'default'
},
tokens: tokens,
}
const res = await admin.messaging().sendMulticast(payload);
console.log(`response: ${res}`);
我已验证从数据库中检索到的令牌与使用以下代码硬编码的令牌相同。
exports.notifyUsers = functions.database.ref('/messages/{messageId}').onCreate(async (liveSnapshot, context) => {
const hardcodedTokens = [
"e6erA_qM...",
"ePU9p_CI...",
];
const snapshot = await admin.firestore().collection('users').get();
const tokens = snapshot.docs.map(doc => doc.data().token);
let same = true;
hardcodedTokens.forEach(el => {
if (!tokens.includes(el)) {
same = false;
}
});
console.log(same);
})
这会将 true 记录在 firebase 云函数控制台中。
该函数使用节点 12。
【问题讨论】:
标签: node.js firebase flutter asynchronous google-cloud-functions