连接到在本地服务器上运行的GCM服务器

问题描述:

我正在使用Google Cloud Messaging(GCM)推送通知。我可以在this tutorial之后设置服务器和客户端。连接到在本地服务器上运行的GCM服务器

服务器在Google API(API级别17)上的Apache Tomcat6.0(localhost)和Android仿真器上运行。我有一个发件人ID和API密钥。从模拟器运行时,我会收到成功的设备连接消息。之后很快,从服务器发送消息显示以下错误。

com.google.android.gcm.server.InvalidRequestException: HTTP Status Code: 401() 
com.google.android.gcm.server.Sender.sendNoRetry(Sender.java:211) 
com.google.android.gcm.server.Sender.send(Sender.java:125) 
com.google.android.gcm.demo.server.SendAllMessagesServlet.doPost(SendAllMessagesServlet.java:83) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 

从其他帖子中,我了解错误的API密钥是罪魁祸首。但在我的情况下,我确信我正在使用API​​控制台中正确的一个。

顺便说一下,当我运行模拟器时,我看到一条消息'将regId发送到服务器'。什么是注册ID?它与发件人ID不一样;看起来像一个编码的。

任何突破?

编辑

问题终于解决了! Ant没有正确构建WAR文件。所以API密钥很难得到更新。发现错误是一场噩梦。感谢所有的投入!

+0

仿真程序无法正常工作。请尝试与设备 – 2013-03-01 12:26:14

+0

对设备API级别进行任何限制..? – Renjith 2013-03-01 12:30:51

+0

以上工作2.2 – 2013-03-01 12:31:59

我建议你阅读GCM指南:

GCM guide for Android

发件人ID是要在GCM和服务器之间的交际中使用的常数。 regsitratiomID(regID)由您的电话注册到他的服务时由GCM服务管理。

一个更好的定义: http://developer.android.com/google/gcm/gcm.html

发件人ID:

您从API控制台获取,如入门描述的项目数量。发件人ID在注册过程中用于识别允许向设备发送消息的Android应用程序。

注册ID:

由GCM服务器发布给Android应用程序,允许它接收消息的ID。一旦Android应用程序具有注册ID,它就会将其发送到第三方应用程序服务器,该服务器使用它来标识每个已注册接收给定Android应用程序消息的设备。换句话说,注册ID绑定到特定设备上运行的特定Android应用程序。

发件人ID是您在Google控制台下创建的项目编号。

注册ID

当你的应用程序寄存器的GCM它获得的注册ID。要发送消息,GCM将使用此注册ID来识别您的设备+您的应用程序。 您的Android应用程序应将此注册ID发送到您的服务器,以便当服务器想要向您发送消息时,它可以使用注册ID对其进行标记,因此GCM可以将其发送到正确的设备&右侧的应用程序。

诊断注册ID是否与服务器(Get/Post)成功共享,除非您不会收到任何消息。

您尝试用来发送邮件的发件人帐户无法通过验证。可能的原因有:

  1. 授权标题丢失或语法无效。
  2. 作为关键字发送的项目编号无效。
  3. 密钥有效,但禁用了GCM服务。
  4. 源自服务器密钥 IP中未列入白名单的服务器的请求。

检查您在授权标头内发送的令牌是否与您的项目关联的正确API密钥。您可以通过运行以下命令来检查您的API密钥的有效性:

api_key=YOUR_API_KEY 

curl --header "Authorization: key=$api_key" --header Content-Type:"application/json" https://android.googleapis.com/gcm/send -d "{\"registration_ids\":[\"ABC\"]}" 

如果要确认一个注册ID的有效性,您可以通过注册ID替换“ABC”这样做的。 当HTTP状态码为401时会发生。

+0

我有一个类似的问题/新的后端。奇怪的部分是卷曲作品,但自动生成的测试页面/相同的api_key在发送GCM消息时会出现401错误。迷惑:-P – kenyee 2013-11-27 03:31:03