我还不知道如何将 C2DM 与 oAuth 2.0 一起使用,但这是我尝试过的。希望这可以帮助某人解决类似的问题
我在http://aleksmaus.blogspot.com/2012/01/oauth2-with-google-c2dm-push.html找到了一个有用的资源
但是当我尝试通过 OAuth 2.0 使用 C2DM 发送消息时它没有在使用 ClientLogin 做得很好的同时工作。
这就是我使用控制台和 Web 浏览器的方式(我知道,您已经询问过 PHP 实现。但我希望这对您也有帮助)
客户登录:(成功)
从以下位置获取身份验证令牌:
$ curl -k -d "accountType=HOSTED_OR_GOOGLE&service=ac2dm&source=test-1.0&Email=[email account with @gmail.com without brace]&Passwd=[Google account password without brace]" https://www.google.com/accounts/ClientLogin
并像这样发送 C2DM 消息:
$ curl -k --header "Authorization: GoogleLogin auth=[my ClientLogin auth key without brace]" -d "registration_id=[can be acquired from Android application]" --trace c2dm_trace.txt -d collapse_key=0 https://android.apis.google.com/c2dm/send
然后我的应用程序成功收到了 C2DM 消息
oAuth 2.0:(失败)
通过访问 url 从 Web 浏览器获取 oAuth 2.0 身份验证凭据:
https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=[can be acquired from API Access menu in your API Console]&redirect_uri=urn:ietf:wg:oauth:2.0:oob&scope=https%3A%2F%2Fandroid.apis.google.com%2Fc2dm&access_type=offline
(谷歌 API 控制台:https ://code.google.com/apis/console/ )
并像这样发送:
$ curl -k -H "Authorization: Bearer [my auth key from oAuth]" --trace curl_trace.txt -d "registration_id=[an be acquired from Android application]" -d "data.message=something to talk" -d collapse_key=0 https://android.apis.google.com/c2dm/send
然后得到401错误响应:(
有没有人可以指出我做错了什么?
编辑
我在您注册 C2DM 时可能从 Google 收到的邮件中发现了“AC2DM 目前是实验室中的 API”这句话。ClientLogin 弃用政策不适用于标记为“实验性”的版本、特性和功能。
我不确定,但我认为这就是我们的代码不起作用的原因。
当然,我希望 ClientLogin 也很快被弃用并被 OAuth 2.0 取代