【问题标题】:400 Bad Request Error while subscribing users to topic in cloud function在云功能中为用户订阅主题时出现 400 错误请求错误
【发布时间】:2017-04-22 11:13:05
【问题描述】:

我正在尝试为用户订阅云功能上的 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。谢谢。

【问题讨论】:

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


    【解决方案1】:

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

    {"error":"MissingAuthorization"}

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

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

    也许这个格式错误的语法是没有这个授权,引发这个错误 400。

    【讨论】:

    • 您没有在授权处添加 api 密钥:这就是它给您授权错误的原因。这是我关注的文档developers.google.com/instance-id/reference/…。你能告诉我我哪里做错了吗
    • @Doge ,您必须登录 Google 的云消息传递“控制面板”并将自己注册为 API 用户,在那里您将获得一个您将在 headers 部分使用的密钥代码。 developers.google.com/cloud-messaging 。我想就是这样。我们使用的每个 Google API 都需要注册,并且只能使用它。谷歌地图、youtube 等都会出现这种情况。从狗到狗:AU! (意思是:谢谢)。
    • 所以只要把它放在你的代码上,就像这样headers: { 'Content-Type':'application/json', 'Authorization':'key=AIzaSyZ-1u...0GBYzPu7Udno5aA' ,},AIzaSyZ-1u...0GBYzPu7Udno5aA你替换你自己的密钥。
    • 我做到了。我不能向公众分享那个密钥。因此,我添加了有问题的“服务器密钥”而不是原始密钥
    【解决方案2】:

    我显然找到了与您为设备订阅主题不同的文档。 This documentation 表示使用如下格式的 URL:

    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);
          }
    });
    

    【讨论】:

    • 我用它来创建主题。好吧,我想我也可以用它来订阅。但是取消订阅呢?顺便说一句谢谢你的回答......
    • 查看我关于使用admin.messaging() 的更新。它支持添加和删除订阅。
    猜你喜欢
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    • 2013-12-24
    • 1970-01-01
    • 1970-01-01
    • 2016-12-08
    • 2019-07-17
    • 1970-01-01
    相关资源
    最近更新 更多