注意:在您花时间阅读之前,请注意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。)
答案 0 :(得分:4)
那不适用于C2DM,因为它是一个托管的accountif,你看到它所说的https://developers.google.com/accounts/docs/AuthForInstalledApps
ClientLogin可用于授权访问Google常规和 托管帐户。托管帐户是属于的用户帐户 Google Apps服务。
此外,如果您看到图形是用户作为UI界面之间的明确交互,因为涉及到CAPTCHA。
修改强>
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消息
通过访问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)
你可以看看,它对我有用。
您需要获取设备registrationId,并输入您的c2dm帐户电子邮件地址和密码到post.php。
另外你需要知道的是关于c2dm.php,当它试图将服务器响应检出为“200 OK”时会发生错误。因为它试图从身体得到这种反应。只需在其中注释该行,然后运行。