在接收到ID和身份验证令牌后发送消息时出现C2DM 401错误。

8
我看到了许多类似的问题,但没有好的答案,尽管有些问题被接受了。我已经注册了C2DM,收到了确认电子邮件。然后我编写了一些简单的应用程序以注册C2DM。我获得了ID(在模拟器和真实设备上都试过)。然后我使用curl获取了我的电子邮件的授权令牌(用于C2DM注册的同一电子邮件,也是我在应用程序中用于获取ID的电子邮件)。
当我尝试进行推送(也使用curl)时,我会收到401错误(就像授权令牌错误一样)。
我阅读了许多教程,现在想不出更多的想法了。

奇怪的是,当我尝试为从未注册过c2dm的电子邮件获取授权令牌时,我也获得了授权令牌。所以我认为用于发送消息的授权令牌可能是错误的。 - DixieFlatline
我也遇到了同样的问题。Android应用程序向C2DM注册,然后将用户令牌发送到Web服务器,我的Web服务器从C2DM获取授权令牌,然后向已注册的应用程序发送推送通知,但我收到的只是401错误。也许C2DM服务存在问题。可能不是很可靠? - jamesc
2个回答

1

让我尝试一下(仅使用curl):

首先,我们正在申请授权令牌:

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

这个方法是有效的!但是如果您像第一次响应中那样使用大写字母"A"的"Auth",则会收到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

因此,第二个请求中的"auth"是区分大小写的。我认为这是50%用户会遇到的陷阱。希望这可以帮助到您。


0

不,这里的问题在发送方(服务器端)和Google C2DM服务器之间。这与设备无关。 - Kamchatka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接