node.js - Firebase 云功能不发送异步推送通知

标签 node.js firebase flutter asynchronous google-cloud-functions

我的目标是在用户发送消息时发送推送通知。我试图通过从 firestore 数据库中检索所有推送 token ,并在每次将新消息添加到实时数据库时使用这些 token 发送多播消息来实现这一点。

作品

第一个示例有效。没有 token 检索, token 是硬编码的。我确实收到了通知。

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}`);

我已验证从数据库中检索到的 token 与使用以下代码硬编码的 token 相同。

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);
})

这会在 firebase 云函数控制台中记录 true


该函数使用 Node 12。

最佳答案

最近遇到了类似的问题,根据Firebase docs把Android和iOS的具体字段打出来解决了:

   const message = {
  "notification": {
    "title": `New message from ${name}`,
    "body": message,
  },
  'apns': {
    'payload': {
      'aps': {
        'badge': 1,
      },
    },
  },
  'android':{
    'notification':{
      'notificationCount': 1,
    },
  },
  "tokens": tokens,
}

关于node.js - Firebase 云功能不发送异步推送通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65001285/

相关文章:

javascript - 如何在 Firebase 中检索多个 key ?

任务应用程序 :mergeDebugNativeLibs and app:mergeDebugJavaResource 的 Flutter 失败

像iOS 13模态全屏一样的Flutter过渡

flutter - flutter :如何解决底部溢出

node.js - Sails.js - 如何为所有模型绑定(bind)自定义蓝图操作?

Node.js 错误 : Unexpected field

javascript - 没有 Socket.IO 的 Node.js 聊天

javascript - 浏览器唯一键

java - 当我尝试比较数据库中的值和编辑文本输入时,出现 NullPointerException

java - 无法解析符号 'FirebaseFirestore'