将FCM通知发送到1000多个令牌节点js

时间:2020-07-12 11:34:49

标签: javascript node.js firebase firebase-cloud-messaging

我有具有5000多个用户令牌的Firestore文档,但FCM限制为1000,我该如何发送 通知所有人。

如何使用循环发送1000-1000,任何人都可以帮助我解决这个问题。

var newData;

exports.articlenotification = functions.firestore
  .document("Articles/{id}")
  .onCreate(async (snapshot, context) => {
    //

    if (snapshot.empty) {
      console.log("No Devices");
      return;
    }

    newData = snapshot.data();

    const deviceIdTokens = await admin
      .firestore()
      .collection("Tokens")
      .where("article", "==", true)
      .get();

    var tokens = [];

    for (var token of deviceIdTokens.docs) {
      tokens.push(token.data().token);
    }
    var payload = {
      notification: {
        title: "New Article",
        body: newData.title,
        image: newData.image,
        sound: "default"
      }
    };

    try {
      const response = await admin.messaging().sendToDevice(tokens, payload);
      console.log("Notification sent successfully");
    } catch (err) {
      console.log(err);
    }
  });

2 个答案:

答案 0 :(得分:2)

您需要在batches中发送邮件。

例如:

// Create a list containing up to 500 messages.
const messages = [];
messages.push({
  notification: {title: 'Price drop', body: '5% off all electronics'},
  token: registrationToken,
});
messages.push({
  notification: {title: 'Price drop', body: '2% off all books'},
  topic: 'readers-club',
});

admin.messaging()
.sendAll(messages)
.then((response) => console.log(response.successCount + ' messages were sent successfully'));

答案 1 :(得分:2)

有两种方法可以做到这一点。第一种方式发送1000,然后发送1000 ..etc。第二种方式是发送到特定主题,所有订阅该主题的客户都会收到您的通知。

  1. device-group
  2. topic-messaging

此代码先发送1000,再发送1000 ..etc。但我不喜欢它。您应该使用int代替它。

topic-messaging