2012-10-22 73 views
0

我收到以下错误,当我试图发送一个消息:访问/ gcm-demo/sendAll。原因:HTTP状态代码:401

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 ...

回答

0

发送方可能不会与谷歌的授权正确。

Sender sender = new Sender(MY_KEY);

是MY_KEY你与谷歌注册了相同的密钥?替换API密钥,如documentation page

+0

文档链接到期,如果可能的话,请更新到最新的链接。 –

2

你可以把下面的代码到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); 
+0

您可以分享一下Result和MulticastResult的区别吗?示例编码如下,Result res = sender.send(message,regId,5); String id = res.getMessageId(); String cregId = res.getCanonicalRegistrationId(); String errorCode = res.getErrorCodeName(); –