Отправлять уведомление FCM на более чем 1000 токенов node js - PullRequest
1 голос
/ 12 июля 2020

У меня есть документ firestore с токеном 5000+ пользователей, но лимит FCM равен 1000, как я могу отправить уведомление всем.

как я могу отправить 1000-1000, используя l oop кто-нибудь может помочь мне разобраться это.

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 ]

2 голосов
/ 12 июля 2020

Есть два способа сделать это. первый способ отправить 1000, затем 1000 ..et c. и второй способ, отправив на указанный c topi c, и все клиенты, подписавшиеся на этот топи c, получат ваше уведомление.

  1. группа устройств
  2. topi c -сообщение

Этот код для отправки 1000, затем 1000 ..et c. но я не предпочитаю это. вместо него следует использовать topic-messaging.

for (let i = 0; i < listOf5000Tokens.length; i += 1000) {
    const listOf1000Tokens = listOf5000Tokens.slice(i, i + 1000);

    // using await to wait for sending to 1000 token
    await doSomeThing(listOf1000Tokens);
}
2 голосов
/ 12 июля 2020

вам нужно будет отправлять сообщения партиями .

Например:

// 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'));
...