【问题标题】:accessing /gcm-demo/sendAll. Reason: HTTP Status Code: 401访问 /gcm-demo/sendAll。原因:HTTP 状态码:401
【发布时间】:2012-10-22 10:49:37
【问题描述】:

当我尝试发送消息时收到以下错误:

HTTP ERROR 500

Problem accessing /gcm-demo/sendAll. Reason:

HTTP Status Code: 401
Caused by:

com.google.android.gcm.server.InvalidRequestException: HTTP Status Code: 401
at com.google.android.gcm.server.Sender.sendNoRetry(Sender.java:177)
at com.google.android.gcm.server.Sender.send(Sender.java:121)
at com.google.android.gcm.demo.server.SendAllMessagesServlet.doPost(SendAllMessagesServlet.java:82)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:926)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
Powered by Jetty://

我正在使用此处所述的 Android 示例项目:http://developer.android.com/guide/google/gcm/demo.html

有人可以帮帮我吗?这个错误是从哪里来的?

我在 Linux 机器上使用 Jetty,并在使用 Apache Ant 的 Windows 机器上将其编译为 .war...

【问题讨论】:

    标签: java android


    【解决方案1】:

    你可以在发送消息前将以下代码放入doPost()方法中:

    import com.google.android.gcm.server.*;
    
    Sender sender = new Sender(myApiKey);
    Message message = new Message.Builder().build();
    MulticastResult result = sender.send(message, devices, 5);
    

    【讨论】:

    • 能否分享一下Result和MulticastResult的区别?示例编码如下,结果 res = sender.send(message, regId, 5);字符串 id = res.getMessageId();字符串 cregId = res.getCanonicalRegistrationId(); String errorCode = res.getErrorCodeName();
    【解决方案2】:

    发件人可能未正确获得 Google 授权。

    Sender sender = new Sender(MY_KEY);

    MY_KEY 与您在 google 注册的密钥相同吗?替换documentation page上显示的API密钥

    【讨论】:

    • 文档链接已过期,如有可能请更新为最新链接。
    【解决方案3】:

    在文本编辑器中,编辑 samples/gcm-demo-server/WebContent/WEB-INF/classes/api.key 并将现有文本替换为上面获得的 API 密钥。

    http://developer.android.com/google/gcm/demo.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多