我试图在云功能上订阅用户到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个。谢谢。
答案 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);
}
});