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

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

– 原始问题 –

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

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

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

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

这就是我使用控制台和Web浏览器的方式(我知道,您已经问过PHP实现。但我希望这对您也有帮助)


客户登录:(成功)

得到身份validation令牌:

$ 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 auth凭证:

 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收到的邮件中find“AC2DM目前是实验室中的API”这句话。 并且ClientLogin弃用策略不适用于标记为“实验”的版本,function和function。 我不确定,但我认为这就是我们的代码不起作用的原因。

当然,我希望不久也会弃用ClientLogin并替换为OAuth 2.0

这里

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

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

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