收到ID和身份验证令牌后发送邮件时出现c2dm 401错误

时间:2011-10-03 19:27:09

标签: java android android-c2dm

虽然有些问题被接受,但我看到了很多类似的问题,但没有很好的答案。 我已注册C2DM。我收到了确认邮件。然后我写了一些简单的应用程序来注册C2DM。我得到了id(在模拟器和真实设备上试过)。然后我获得了我用于C2DM注册的电子邮件的auth令牌(带卷曲)(我在app中用来获取id的电子邮件)。
当我尝试执行推送(也使用curl)时,我收到401错误(就像auth令牌错误一样)。

我阅读了很多教程,但我的想法已经不多了。

2 个答案:

答案 0 :(得分:1)

让我尝试一下(仅限卷曲):

首先,我们正在申请身份验证令牌:

curl.exe -v -k https://www.google.com/accounts/ClientLogin -d Email=xyz@gmail.com -d Passwd=secret -d accountType=GOOGLE -d source=your.registered.domain -d service=ac2dm

在结果中,您正在接收身份验证令牌:

< HTTP/1.1 200 OK
SID=XXX
LSID=XXX
Auth=XXX
* Connection #0 to host www.google.com left intact
* Closing connection #0
* SSLv3, TLS alert, Client hello (1):

请注意,Auth响应的结果是大写的第一个字母:“Auth = XXX”!

现在我们将结果用于下一个请求但是使用小写的第一个字母:
curl.exe -v -k --header "Authorization: GoogleLogin auth=XXX" https://android.apis.google.com/c2dm/send -d "registration_id=XXX" -d "data=helloooo" -d collapse_key=Z

这有效!但是如果您在第一个响应中使用了auth(在“Auth”中使用大写字母A),则会收到401错误:

curl.exe" -v -k --header "Authorization: GoogleLogin Auth=XXX" https://android.apis.google.com/c2dm/send -d "registration_id=XXX" -d "data=helloooo" -d collapse_key=Z

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

答案 1 :(得分:0)

也许这就是问题?

http://groups.google.com/group/vogella/browse_thread/thread/95865344e6d2c734

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