【发布时间】:2011-02-06 20:46:34
【问题描述】:
我现在正在构建自己的 C2DM 应用程序。我首先从一个小型 Android 应用程序开始测试推送功能。如果我只是在我的 shell 中使用正确的设置调用 curl 命令,它就可以工作。
现在对于服务器部分,我想使用 PHP,但似乎我做错了什么,因为当我尝试向客户端发送消息时总是收到 401 错误消息。首先,代码由两部分组成。第一个 curl 请求请求服务器令牌。这行得通,我得到了来自谷歌的真实响应,带有工作令牌!
第二个 curl 请求以 401 错误消息结束。任何想法我做错了什么?
$post_params = array ( "Email" => $MY_GOOGLE_ACC, "Passwd" => $MY_GOOGLE_PWD, "accountType"=>"GOOGLE", "source=" . $MY_GOOGLE_SRC, "service=ac2dm" );
$first = true;
$data_msg = "";
foreach ($post_params as $key => $value) {
if ($first)
$first = false;
else
$data_msg .= "&";
$data_msg .= urlencode($key) ."=". urlencode($value);
}
$x = curl_init("https://www.google.com/accounts/ClientLogin");
curl_setopt($x, CURLOPT_HEADER, 1);
curl_setopt($x, CURLOPT_POST, 1);
curl_setopt($x, CURLOPT_POSTFIELDS, $data_msg);
curl_setopt($x, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($x);
curl_close($x);
$response = $data;
$authKey = trim(substr($response, 4+strpos($response, "SID=")));
echo $authKey;
$collapse_key = 'something';
$post_params = array ( "registration_id" => $DEVICE_TOKEN, "collapse_key" => $collapse_key, "data.payload"=>"cakephp" );
$first = true;
$data_msg = "";
foreach ($post_params as $key => $value) {
if ($first)
$first = false;
else
$data_msg .= "&";
$data_msg .= urlencode($key) ."=". urlencode($value);
}
$size=strlen($data_msg);
$x = curl_init("https://android.apis.google.com/c2dm/send");
curl_setopt($x, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded', 'Content-Length:'. $size, 'Authorization: GoogleLogin auth=' . $authKey));
curl_setopt($x, CURLOPT_HEADER, 1);
curl_setopt($x, CURLOPT_POST, 1);
curl_setopt($x, CURLOPT_POSTFIELDS, $data_msg);
curl_setopt($x, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($x);
curl_close($x);
$response = $data;
【问题讨论】:
-
好的。我不知道为什么,但没有任何效果了。即使使用我的 curl 示例,我总是会收到 401 错误。现在,如果我尝试对自己进行身份验证,我会得到一个 SID、LSID 和身份验证令牌。不知道昨天是不是也这样?我想昨天我只得到了 1 个令牌。但我必须稍后再检查一次。改变的可能是我换了电脑。当一切正常时,我不再使用昨天尝试的同一台计算机。这可能与此有关吗?
-
嗨尼诺!我只是复制你在楼上发布的代码,我也遇到了同样的 401 问题。所以......你能告诉我你如何解决这个问题,或者你能把你的工作代码发给我吗?谢谢你的帮助!你的跨度>
标签: php android android-c2dm