2011-10-03 50 views
8

我看到很多类似的问题,但没有很好的答案,尽管它们中的一些已被接受。 我已注册C2DM。我收到确认电子邮件。然后我写了一些简单的应用程序来注册C2DM。我得到了id(在模拟器和真实设备上尝试过)。然后我得到了用于C2DM注册的电子邮件(与用于获取ID的应用程序相同的电子邮件)的身份验证令牌(包含curl)。
当我尝试推动(也与卷曲),我得到401错误(如身份验证令牌是错误的)。c2dm收到ID和授权令牌后发送消息时出现401错误

我读了很多教程,并且我的想法很多。

+0

奇怪的是,当我尝试从我的电子邮件中获得auth令牌时,它从未注册过c2dm,我也收到了auth令牌。所以我认为用于发送消息的身份验证令牌必须是错误的。 – DixieFlatline

+0

我也有同样的问题。 Android应用程序向C2DM注册,然后将用户令牌发送到Web服务器,我的Web服务器从C2DM获取授权令牌,然后向已注册的应用程序发送推送通知,我得到的所有内容都是401错误。也许C2DM服务存在问题。可能不是很可靠? – jamesc

回答

1

让我(只能用卷曲)尝试:

起初,我们所申请的身份验证令牌:

curl.exe -v -k https://www.google.com/accounts/ClientLogin -d [email protected] -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 = XX X”!

现在我们正在使用的结果为下一个请求,但与首字母小写:
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

而这个作品!但是你得到一个401错误,如果使用的是在auth像在第一响应(在“验证”大写A):

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%的用户正在进入的陷阱。希望有所帮助。