在云功能中订阅用户主题时出现400错误请求错误

时间:2017-04-22 00:01:12

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

我试图在云功能上订阅用户到firebase主题。所以根据官方文档,我尝试了以下代码

 request({
        method: 'POST',
        url: "https://iid.googleapis.com/iid/v1:batchAdd",
        json: true,


        headers: {
            'Content-Type':'application/json',
            'Authorization':'key=server key,

        },

        body: JSON.stringify({

          "to": "/topics/name",
          "registration_tokens": ["token value"]

        })
            }, function (error, response, body){
        console.log('error:', error);
        console.log('statusCode:', response && response.statusCode);
        if (response.statusCode >= 400) {
            console.error('HTTP Error: '+response.statusCode+' - '+response.statusMessage);
          }
    });

但是它提供了400个状态代码而不是200个。谢谢。

2 个答案:

答案 0 :(得分:2)

您需要获得使用Google API的适当授权。你输入了吗? (在代码的标题部分)。也许一个线索:如果您在浏览器的地址栏中输入代码中指明的URL,您会发现:

{"error":"MissingAuthorization"}

正如您所指出的,错误400是错误的请求,即您可能在请求操作上犯了一些错误。 W3C声明:

The request could not be understood by the server due to malformed syntax

也许这种格式错误的语法,如果没有此授权,就会引发此错误400.

答案 1 :(得分:1)

我显然找到了与订阅某个主题的设备不同的文档。 This documentation说要使用格式如下的网址:

https://iid.googleapis.com/iid/v1/IID_TOKEN/rel/topics/TOPIC_NAME

下面是使用此方法的代码的变体。这个对我有用。但是使用admin.messaging().subscribeToTopic()会不会更简单?

 const token = 'f_PWaiHMGvQ:APA91bGN...9F5D5avIpjY57Y098OFsxZLHUZubx0P_';
 const serverKey = 'AAAAyq9marw:APA91b..._Xf-jV472nfn-sb';
 request({
        method: 'POST',
        url: `https://iid.googleapis.com/iid/v1/${token}/rel/topics/myTopic`,
        headers: {
            'Content-Type':'application/json',
            'Content-Length': 0,
            'Authorization':`key=${serverKey}`,
        }
}, function (error, response, body){
    console.log('error:', error);
    console.log('statusCode:', response && response.statusCode);
    if (response.statusCode >= 400) {
        console.error('HTTP Error: '+response.statusCode+' - '+response.statusMessage);
      }
});