如何使用Firebase Cloud Messenger批量发送推送通知到多个主题

时间:2019-03-03 04:29:49

标签: javascript firebase firebase-cloud-messaging

在我的应用程序中,用户可以订阅许多主题(在这种情况下,主题是音乐家)。每天我都会运行一个查询来检查发布新音乐的音乐家,然后对于跟随这些音乐家的用户,他们会收到一条通知,内容为{MusicianName} has released a new song!

这是我查询今天发布歌曲的所有主题(又名音乐家)的方法:

axios.get(`${apiURL}/submission/approvals?releaseDate={currentDay}`).then((response) => {
    var artistUIDs = response.data.map((sub: any) => {
        return { artistUID: sub.Artist.artistUID, artistName: sub.Artist.name, title: sub.title }
    });
    sendTopics(artistUIDs)
})

然后我运行forEach发送每个个性化通知:

  function sendTopics(topics) {
        topics.forEach((topic: any) => {
            var message = {
                notification: {
                    title: `New music from ${topic.artistName}!`,
                    body: `Listen to "${topic.title}" now`
                },
                topic: topic.artistUID
            };
            // Send a message to devices subscribed to the provided topic.
            admin.messaging().send(message)
                .then((response) => {
                    // Response is a message ID string.
                    console.log('Successfully sent message:', response);
                })
                .catch((error) => {
                    console.log('Error sending message:', error);
                });
        })
    }

我的问题似乎是,如果使用admin.messaging.send()同时发送多个主题,我会收到一条错误消息,指出所有请求都已超时。如果只有一个主题需要发送,那么效果很好!这是因为topics.forEach在解决之前send()循环很快吗?在继续下一个操作之前,我需要做些什么来确保send方法能够解析?

这是我的错误消息,如果我尝试使用forEach批量发送20个不同的主题,则会在Firebase功能日志中收到以下消息中的20条:

errorInfo: 
   { code: 'app/network-timeout',
     message: 'Error while making request: timeout of 10000ms exceeded.' },
  codePrefix: 'app' }

0 个答案:

没有答案