【问题标题】:401 on GCM requests in Node.jsNode.js 中 GCM 请求的 401
【发布时间】: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 管理器 > 凭据 > API 密钥

我错过了什么吗?

你知道为什么我的请求未经授权吗?

【问题讨论】:

  • 你启用了这个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


【解决方案1】:

由于您使用 NodeJS 作为 Web 服务器,因此请使用 IP 地址 API 密钥类型而不是 None。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-20
    • 1970-01-01
    • 1970-01-01
    • 2019-03-02
    • 2019-02-08
    • 2020-05-30
    • 2019-08-20
    • 1970-01-01
    相关资源
    最近更新 更多