使用OAuth2.0使用PHP的C2DM(不推荐使用ClientLogin!)

时间:2012-04-26 19:24:05

标签: php android push-notification oauth-2.0 android-c2dm

注意:在您花时间阅读之前,请注意C2DM现在已被弃用,并由GCM取代(http://developer.android.com/guide/google/gcm/c2dm.html)< / em>的

- 原始问题 -

我们是否有实现PHP服务器端代码的示例代码,以便使用C2DM将消息推送到Android设备?

我搜索了许多使用旧身份验证方法ClientLogin的代码示例,该方法已被弃用。 参考:https://developers.google.com/accounts/docs/AuthForInstalledApps (重要提示:截至2012年4月20日,ClientLogin已正式弃用。它将继续按照我们的弃用政策运行,但我们建议您尽快迁移到OAuth 2.0。)

3 个答案:

答案 0 :(得分:4)

那不适用于C2DM,因为它是一个托管的accountif,你看到它所说的https://developers.google.com/accounts/docs/AuthForInstalledApps

  

ClientLogin可用于授权访问Google常规和   托管帐户。托管帐户是属于的用户帐户   Google Apps服务。

此外,如果您看到图形是用户作为UI界面之间的明确交互,因为涉及到CAPTCHA。

enter image description here

修改

BTW你可以从这篇帖子看到C2DM机制仍然会使用ClientLogin然而2011年10月之前的密钥将过期,所以你需要重新创建它们。这是在不推荐使用ClientLogin之前8天的最新帖子。 C2DM Client Login Key

答案 1 :(得分:2)

我无法弄清楚如何将C2DM与oAuth 2.0一起使用,但这是我尝试过的。希望这可以帮助某人解决类似的问题

我找到了一个在http://aleksmaus.blogspot.com/2012/01/oauth2-with-google-c2dm-push.html有用的资源 但是当我尝试通过OAuth 2.0发送带有C2DM的消息时,它在使用ClientLogin做得很好的时候没有用。

这就是我使用控制台和网络浏览器的方式 (我知道,你已经问过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:

从网络浏览器获得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

(Google 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 deprecation policy will not apply to versions, features, and functionality labeled as "experimental."我不确定,但我认为这就是我们的代码不起作用的原因。

当然,我希望不久也不推荐使用ClientLogin并将其替换为OAuth 2.0

答案 2 :(得分:0)

Here

你可以看看,它对我有用。

您需要获取设备registrationId,并输入您的c2dm帐户电子邮件地址和密码到post.php。

另外你需要知道的是关于c2dm.php,当它试图将服务器响应检出为“200 OK”时会发生错误。因为它试图从身体得到这种反应。只需在其中注释该行,然后运行。