使用 OAuth2.0 和 PHP 的 C2DM(ClientLogin 已弃用!)
Posted
技术标签:
【中文标题】使用 OAuth2.0 和 PHP 的 C2DM(ClientLogin 已弃用!)【英文标题】:C2DM with PHP using OAuth2.0 (ClientLogin is deprecated!) 【发布时间】:2012-05-07 13:47:13 【问题描述】:注意:在您花时间阅读之前,请知道 C2DM 本身现在已被弃用并被 GCM 取代 (http://developer.android.com/guide/google/gcm/c2dm.html)
-- 原始问题--
我们是否有示例代码用于实现 php 服务器端代码以使用 C2DM 将消息推送到 Android 设备?
我搜索了许多代码示例,它们使用已弃用的旧身份验证方法 ClientLogin。 参考:https://developers.google.com/accounts/docs/AuthForInstalledApps (重要提示:ClientLogin 已于 2012 年 4 月 20 日正式弃用。它将根据我们的弃用政策继续工作,但我们建议您尽快迁移到 OAuth 2.0。)
【问题讨论】:
你看yii框架了吗yiiframework.com/extension/c2dm 我非常期待答案... +1 的问题。 @Suchi 我已经在使用 Zend 框架,所以我不想为此添加另一个框架。虽然它看起来非常好和简单。它使用OAuth2.0吗? 【参考方案1】:这不适用于 C2DM,因为它是一个托管帐户,如果您看到它说的 https://developers.google.com/accounts/docs/AuthForInstalledApps
ClientLogin 可用于授权访问 Google 常规和 托管帐户。托管帐户是一个用户帐户,它是 Google Apps 服务。
此外,如果您看到图形是用户之间的清晰交互作为 UI 界面,因为涉及验证码。
编辑
顺便说一句,您可以从这篇文章中看到 C2DM 机制仍将使用 ClientLogin,但 2011 年 10 月之前的密钥将过期,因此您需要重新创建它们。这是 ClientLogin 被弃用前 8 天的最新帖子。 C2DM Client Login Key
【讨论】:
你说得对,我们应该继续使用 ClientLogin 而不必担心会被弃用。更多关于这个的讨论可以在这里看到***.com/a/10859270/1104697【参考方案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 从 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
(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 取代
【讨论】:
401 将在您无权查看/访问指定资源时发生。与禁止类似,请确保您的 OAuth 令牌有效、未过期以及任何潜在的拼写错误/错误。你的 curl 请求对我来说很好。 @Tim // 感谢您的回复。但是我已经检查了当我看到 401 响应时有效的 OAuth 凭据。我认为它还不受支持,因为 C2DM 仍处于测试阶段:(【参考方案3】:Here
你可以看看,它对我有用。
您需要获取您的设备注册ID,并输入您的c2dm帐户电子邮件地址和密码到post.php。
您需要了解的另一件事是关于 c2dm.php,当它尝试检查服务器响应为“200 OK”时会发生错误。因为它试图从身体中得到这种反应。只需简单地注释其中的行,然后运行。
【讨论】:
对不起,我只是没看到你的意思是 ClientLogin 已被弃用。我的回答也使用了 ClientLogin。以上是关于使用 OAuth2.0 和 PHP 的 C2DM(ClientLogin 已弃用!)的主要内容,如果未能解决你的问题,请参考以下文章