云功能,用于将fcm通知发送到令牌集合

时间:2020-01-14 09:30:46

标签: google-cloud-functions google-cloud-messaging

每当对我的数据库进行新更新时,我都试图发送通知。我有onUpdate方面的工作,但是我是FCM的新手,并且我一直在发送通知。 设备集合的结构为:

+devices/
+tokenId/
-tokenId:njurhvnlkdnvlksnvlñaksnvlkak
-userId:nkjnjfnwjfnwlknlkdwqkwdkqwdd

我现在拥有的空令牌值卡住的函数是:

const functions = require('firebase-functions');
const admin = require("firebase-admin");

admin.initializeApp();

const db = admin.firestore();

const settings = { timestampsInSnapshots: true };
db.settings(settings);

.....

exports.fcmSend = functions.firestore
  .document(`chats/{chatId}`).onUpdate((change, context) => {

    const messageArray = change.after.data().messages;
    const message = messageArray[(messageArray.length-1)].content
    if (!change.after.data()) {
        return console.log('nothing new');
      }
    const payload = {
          notification: {
            title: "nuevo co-lab",
            body: message,
          }
        };
  
    return admin.database().ref(`/devices`)
         .once('value')
          .then(token => token.val())
          .then(userFcmToken => {
            console.log("Sending...", userFcmToken);
            return admin.messaging().sendToDevice(userFcmToken, payload)
          })
          .then(res => {
            console.log("Sent Successfully", res);
          })
          .catch(err => {
            console.log("Error: ", err);
          });
  
  });

我无法从数据库中获取令牌。它为null或未定义。谁能帮助我完成此功能的第二部分? 提前非常感谢!

1 个答案:

答案 0 :(得分:1)

感谢弗兰克的小费! 如果有人需要,我设法用这段代码解决了这个问题:

const payload = {
      notification: {
        title: "nuevo mensaje de co-lab",
        body: message,
      }
    };

       // Get the list of device tokens.
const allTokens = await admin.firestore().collection('devices').get();
const tokens = [];
allTokens.forEach((tokenDoc) => {
  tokens.push(tokenDoc.id);
});

if (tokens.length > 0) {
  // Send notifications to all tokens.
  return await admin.messaging().sendToDevice(tokens, payload);     
}else {
  return null;
}