如何使用Firebase触发器通过原子更新发送推送通知

时间:2018-11-20 14:34:19

标签: node.js firebase firebase-cloud-messaging google-cloud-functions

我将通过触发器将通知发送到设备。 创建“ / chats / {chatId}”下的对象时触发该触发器。 聊天对象的结构如下:

{
  members: {
    0: "userId1",
    1: "userId2"
  },
  ...
}

我的代码背后的逻辑是为每个成员读取userToken(每个用户的财产);向每个令牌发送通知(有效负载)。

下面的代码有效。

exports.onChatCreate = functions.database
  .ref("/chats/{chatId}")
  .onCreate((chatSnap, context) => {
    // const members = chatSnap.val().members; // works?!
    let database = admin.database();
    let messaging = admin.messaging();
    const chatId = context.params.chatId;
    let tokens = [];
    let notifications = [];

    const payload = {
      notification: {
        title: "MyTitle",
        body: "Notification description"
      }
    };

    chatSnap.val().members.forEach(function(m) {
      database
        .ref("users")
        .child(m)
        .once("value")
        .then(function(snapshot) {
          let fcmToken = snapshot.val().FCMToken;
          if (fcmToken) {
            tokens.push(fcmToken);
            messaging.sendToDevice(fcmToken, payload);
          }
        });
    });
    return Promise.all(notifications);
  });

现在,在推送令牌数组中的每个令牌之后,我想发送具有原子更新的通知。我准备了这段代码,但不起作用

return loadUsers().then(users => {
  let tokens = [];
  for (let user of users) {
    tokens.push(user.pushToken);
  }
  let payload = {
    notification: {
        title: 'Title',
        body: 'Notification description'
    }
  };
  return admin.messaging().sendToDevice(tokens, payload);
});

我在哪里错了?!

0 个答案:

没有答案