11

注意:在您花时间阅读之前,请知道 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 尽快。)

4

3 回答 3

4

这不适用于 C2DM,因为它是一个托管帐户,如果您看到它说的https://developers.google.com/accounts/docs/AuthForInstalledApps

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

此外,如果您看到图形是用户之间的清晰交互作为 UI 界面,因为涉及验证码。

在此处输入图像描述

编辑

顺便说一句,您可以从这篇文章中看到 C2DM 机制仍将使用 ClientLogin,但 2011 年 10 月之前的密钥将过期,因此您需要重新创建它们。这是 ClientLogin 被弃用前 8 天的最新帖子。C2DM 客户端登录密钥

于 2012-05-08T09:51:52.633 回答
2

我还不知道如何将 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 取代

于 2012-05-04T08:17:31.723 回答
0

这里

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

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

您需要了解的另一件事是关于 c2dm.php,当它尝试将服务器响应检出为“200 OK”时会发生错误。因为它试图从身体中得到这种反应。只需简单地注释其中的行,然后运行。

于 2012-05-01T13:05:22.337 回答