Gwt 从Appengine向android发送gcm推送

Gwt 从Appengine向android发送gcm推送,gwt,google-cloud-messaging,Gwt,Google Cloud Messaging,我可以从android设备注册到appengine 在appengine上注册后,我会在android应用程序上获得注册ID。 使用注册ID,我试图从appengine服务器向android应用程序发送消息 Sender sender = new Sender(App-Key); Message message = new Message.Builder().addData("data", "hello client").build(); Result result = sender.send(

我可以从android设备注册到appengine 在appengine上注册后,我会在android应用程序上获得注册ID。 使用注册ID,我试图从appengine服务器向android应用程序发送消息

Sender sender = new Sender(App-Key);
Message message = new Message.Builder().addData("data", "hello client").build();
Result result = sender.send(message, registrationId , 5);
我已经将上述代码嵌入到一个HTTPPOST方法中

但我得到了以下错误:

Uncaught exception from servlet
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:86)
    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$CachedChain.doFilter(ServletHandler.java:1166)
    at com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:102)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:35)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
    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:765)
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
    at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:249)
    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:923)
    at com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:76)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
    at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:135)
    at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:477)
    at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:449)
    at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:455)
    at com.google.tracing.TraceContext.runInContext(TraceContext.java:695)
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:333)
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:325)
    at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:453)
    at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:251)

有人能帮我解决这个问题吗。

我对代码做了以下更改,解决了这个问题

对于单个android设备:

Sender sender = new Sender(App-Key);
Message message = new Message.Builder().build();
Result result = sender.send(message, registrationId , 5);
对于多个android设备:

Sender sender = new Sender(App-Key);
Message message = new Message.Builder().build();
MulticastResult result = sender.send(message, list of registrationIds , 5);

但是,通知会从appengine发送到android设备,但我仍然想知道如何将消息与通知一起发送到android设备。

您应该捕获GCMinent服务的push intent onReceiveMessage,并使用push intent的extras(getExtras())包创建一个通知


按照以下指南操作:

您好,这里您提到了MulticastResult result=sender.send(消息,注册ID列表,5);那么,注册ID列表就是列表????