【发布时间】:2016-09-09 15:24:30
【问题描述】:
我正在尝试在我的应用程序后端设置 GCM 消息传递。
后端使用 Node.js 运行
这是我正在使用的代码:
var apiKey = "AIz*******";
var postData = JSON.stringify({
"notification": {
"title": "Hello World"
}
});
var options = {
host: 'android.googleapis.com',
port: 443,
path: '/gcm/send',
method: 'POST',
headers: {
'Authorization': 'key=' + apiKey,
'Content-Type': 'application/json',
'Content-Length': Buffer.byteLength(postData)
}
};
var rqst = https.request(options, (response) => {
var responseBody = '';
response.setEncoding('utf8');
response.on('data', (chunk) => {
responseBody += chunk;
});
response.on('end', () => {
res.send(responseBody)
});
});
rqst.on('error', (e) => {
console.log('problem with request: ${e.message}');
});
rqst.write(postData);
rqst.end();
但我总是收到 401 回答:
<HTML>
<HEAD>
<TITLE>Unauthorized</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Unauthorized</H1>
<H2>Error 401</H2>
</BODY>
</HTML>
我使用的 API 密钥取自 Google 开发者控制台
我错过了什么吗?
你知道为什么我的请求未经授权吗?
【问题讨论】:
-
你启用了这个API吗?
-
这是一个很好的观点。它应该已启用,我将编辑并添加项目 Dashboard API 部分的屏幕截图。我启用了“谷歌云消息”。我是否应该以某种方式允许某种类型的连接/来源?
-
由于您使用 NodeJS 作为 Web 服务器,您是否尝试过使用 IP 地址 API 密钥类型而不是 None?
-
@noogui 你是对的!它适用于 IP 地址....!谢谢!我没想过使用它,因为我认为它对任何 IP 都是开放的。现在的问题是我的应用程序在 Elastic Beanstalk 上运行,如果在有更多流量时启动新实例,我无法预测哪个是 IP 地址。我会尝试找到解决方案。现在谢谢你!请将其发布为答案,我会接受。
-
实际上,我认为 EBS 将一个应用程序的所有实例保存在同一个公共 IP 地址下:) 所以应该只用 1 个 IP 解决。再次感谢
标签: javascript android node.js google-cloud-messaging