Java 接收id和身份验证令牌后发送消息时发生c2dm 401错误

Java 接收id和身份验证令牌后发送消息时发生c2dm 401错误,java,android,android-c2dm,Java,Android,Android C2dm,我见过许多类似的问题,但尽管其中一些被接受,但没有很好的答案。 我已经注册了C2DM。我收到了确认电子邮件。然后我编写了一些简单的应用程序来注册C2DM。我得到了id(在emulator和真实设备上试用过)。然后,我获得了用于C2DM注册的电子邮件的身份验证令牌(带有curl)(与我在应用程序中用于获取id的电子邮件相同)。 当我尝试推送(也使用curl)时,我得到了401错误(比如auth标记是错误的) 我读了很多教程,我的想法都快用完了。让我试试(仅限卷曲): 首先,我们申请认证令牌: cu

我见过许多类似的问题,但尽管其中一些被接受,但没有很好的答案。 我已经注册了C2DM。我收到了确认电子邮件。然后我编写了一些简单的应用程序来注册C2DM。我得到了id(在emulator和真实设备上试用过)。然后,我获得了用于C2DM注册的电子邮件的身份验证令牌(带有curl)(与我在应用程序中用于获取id的电子邮件相同)。
当我尝试推送(也使用curl)时,我得到了401错误(比如auth标记是错误的)

我读了很多教程,我的想法都快用完了。

让我试试(仅限卷曲):

首先,我们申请认证令牌:

curl.exe-v-k-d电子邮件=xyz@gmail.com-d Passwd=secret-d accountType=GOOGLE-d source=your.registered.domain-d service=ac2dm

在结果中,您将收到身份验证令牌:


SID=XXX
LSID=XXX
Auth=XXX
*0到主机www.google.com的连接保持不变
*关闭连接#0
*SSLv3、TLS警报、客户端你好(1):

请注意,Auth响应在结果中以大写字母开头:“Auth=XXX”

现在,我们将结果用于下一个请求,但使用小写的第一个字母:
curl.exe-v-k--header“Authorization:GoogleLoginauth=XXX“-d”registration\u id=XXX“-d”data=hellooo“-d collapse\u key=Z

这很有效!但是,如果在第一个响应中使用类似于auth的auth(“auth”)中的大写字母a,则会出现401错误:

curl.exe“-v-k--header”Authorization:GoogleLoginAuth=XXX“-d”registration\u id=XXX“-d”data=hellooo“-d collapse\u key=Z


所以请求2的“auth”是区分大小写的。我认为这是50%的用户正在进入的陷阱。希望这会有所帮助。

也许这就是问题所在


基本上,您在Android设备上指定的“发件人”参数必须与发件人注册的电子邮件地址相同(服务器端).

奇怪的是,当我尝试为我从未注册过c2dm的电子邮件获取身份验证令牌时,我也获得了身份验证令牌。因此,我认为我用于发送消息的身份验证令牌肯定是错误的。我也有同样的问题。安卓应用程序向c2dm注册,然后将用户令牌发送到web服务器,我的web服务器从c2dm获取身份验证令牌,然后发送推送通知已注册的应用程序,我得到的只是401错误。可能是C2DM服务有问题。可能不太可靠?不,这里的问题是发件人(服务器端)和Google C2DM服务器之间的问题。这与设备无关。