【问题标题】:How to send multiple notifications in FCM in NodeJS/Javascript?如何在 NodeJS/Javascript 中的 FCM 中发送多个通知?
【发布时间】:2021-02-16 05:18:51
【问题描述】:

我想向特定设备发送多个通知,我正在尝试进行 1-1 通信:

router.post('/send', function(req, res){  
    getAccessToken().then(function(access_token){
        var title = req.body.title;
        var body = req.body.body;
        var token = req.body.token;

        request.post({
            headers:{
                Authorization: 'Bearer ' + access_token
            },
            url:"https://fcm.googleapis.com/v1/projects/MYPROJECT/messages:send",
            body: JSON.stringify(
                {
                    "message":{
                        "token": token,
                        "notification":{
                         "body":body,
                         "title":title
                       }
                    }
                 }
            )
        }, function(error, response,body){
            res.end(body);
            console.log(body);
        });
    });
});

它确实有效。问题是,我不太了解 NodeJS/JS 中的程序,代码来自 YT 教程,我想发送多条消息。我正在尝试这个:

router.post('/sendmulticast', function(req, res){
    getAccessToken().then(function(access_token){

        var title = req.body.title;
        var body = req.body.body;
        var token = req.body.token;

        for(var i = 0; i <= token.length; i++){
            request.post({
                headers:{
                    Authorization: 'Bearer ' + access_token
                },
                url:"https://fcm.googleapis.com/v1/projects/MYPROJECT/messages:send",
                body: JSON.stringify(
                    {
                        "message":{
                            "token": token[i],
                            "notification":{
                             "body":body,
                             "title":title
                           }
                        }
                     }
                )
            }, function(error, response,body){
                res.end(body);
                console.log(body);
            });
        }
    });
});

但它返回 ERR_STREAM_WRITE_AFTER_END,我想因为它是一个异步任务,它正在等待服务器的响应。

我正在尝试为 android 用户订阅主题,但 FCM 没有注册该主题。如果您能帮助我使用这种服务器端方法,我将不胜感激。

【问题讨论】:

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


    【解决方案1】:

    res.end(body) 似乎是问题所在。把它放在循环之外,它应该可以工作。您可以考虑创建一个函数来发布请求。

    【讨论】:

    • 它们是不同的功能,一个是/send,另一个是/sendmulticast。好的,我试试这个。
    • 是的, res.end 属于外部函数,现在被多次调用,但只能调用一次。
    • 它工作!非常感谢!但是发送请求永远不会结束,如何结束呢? @罗伯特
    • 我不知道发送请求的样子,但它可能也有某种结束功能。您可以先开始和结束每个发送请求,然后结束“外部”-res。
    • 谢谢,我只调用响应函数就OK了。真的非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2019-02-18
    • 1970-01-01
    • 2017-11-08
    • 1970-01-01
    • 2018-01-01
    • 1970-01-01
    • 2020-03-27
    • 2020-11-27
    相关资源
    最近更新 更多