在 GCM 中发送推送通知时出现未经授权的错误

Posted

技术标签:

【中文标题】在 GCM 中发送推送通知时出现未经授权的错误【英文标题】:Unauthorized error while sending push notification in GCM 【发布时间】:2016-01-11 16:02:30 【问题描述】:

您好,我正在尝试通过 GCM 从服务器(应用程序服务器)向移动设备发送推送通知消息。我尝试了下面的代码,但得到“连接被拒绝错误”,但是当我使用 Web 服务测试器进行测试时,我得到了附件中的“未经授权的错误”。我正在使用服务器 API 密钥,没有 IP 地址被列入白名单。我已经为 android API 启用了谷歌云消息传递,也不知道原因。请帮忙。 web service tester error screenshot

代码:

        String google_server_key="";
        ResourceBundle rb = ResourceBundle.getBundle("GCMServerKey");
        Enumeration <String> keys = rb.getKeys();
        while (keys.hasMoreElements()) 
        
            google_server_key = keys.nextElement();

        

        try
        

        String pushNotificationMessage="nagesh";
        String regID="APA91bEZD2MFH7TzMvry1UR2ezqTSAwCbqRgIZ8qXo_h559TYId29j3u2zPyHzxiZrA65tVhtPlY9O77LnLRbqJf585YmwYccBrGoQ5OjPAz4xT_JfIGJ1AEyjq9EUEhawc2V4kMrIar";              //pushMessage.getRegId();
        Sender sender = new Sender(google_server_key);
        Message message = new Message.Builder().timeToLive(30)
                .delayWhileIdle(true).addData(MESSAGE_KEY, pushNotificationMessage).build();

         Result result = sender.send(message,regID , 1);

        
        catch (IOException ioe) 
        
            ioe.printStackTrace();

        
        catch (Exception e) 
        
            e.printStackTrace();

           

【问题讨论】:

检查发件人 sender = new Sender(google_server_key); google_server_key 的行。大多数时候,未经授权意味着 server_key 是错误的 【参考方案1】:

这是Downstream message error response code 文档。

身份验证错误 401

无法验证用于发送消息的发件人帐户。可能的原因有:

HTTP 请求中缺少授权标头或语法无效。 作为密钥发送的项目编号无效。 密钥有效,但 GCM 服务已禁用。 请求来自未在服务器密钥 IP 中列入白名单的服务器。

检查您在 Authentication 标头中发送的令牌是否是与您的项目关联的正确 API 密钥。详情请见Checking the validity of an API Key。

【讨论】:

以上是关于在 GCM 中发送推送通知时出现未经授权的错误的主要内容,如果未能解决你的问题,请参考以下文章

在 ASP.NET 中为 manifest.json GCM 推送通知获取未经授权的 401

React本机推送通知,GCM服务器返回401

发送推送通知时出现 Worklight 错误

使用 curl 命令发送推送通知时出现无效注册错误

GCM 的 API 密钥突然失效?未经授权的 (401) 错误

使用 notnoopapns 向 apns 发送推送通知时出现 ssl 错误