我只是想用 Android 推送通知 (C2DM) 测试一个应用程序,我确信 Android 代码没有任何问题。我正在使用 PHP 代码连接到推送服务器并发送消息,它在我的本地服务器上运行良好。
但如果我在第三方服务器上运行相同的程序,它就不会运行。它没有给我任何错误消息。并显示“HTTP 状态 200 OK”作为响应。
为了您的引用,我正在添加代码,我是从某个网站获得的。
<?php
$username ="push_enabled_email_id@gmail.com";
$password = "password";
$source="My-Server-Event-Alerter"; //anything that says about ur app
$service="ac2dm";
// local server
$message =$_GET ['message'];
if ($_GET ['message'] != '' )
{
$message =$_GET ['message'];
echo 'Message sent to server '.$message;
$post_params = array(
"Email" => $username,
"Passwd" => $password,
"accountType"=>"HOSTED_OR_GOOGLE",
"source" => $source,
"service"=>$service
);
$first = true;
$data_msg = "";
foreach ($post_params as $key => $value)
{
if ($first)
$first = false;
else
$data_msg .= "&";
$data_msg .= urlencode($key) ."=". urlencode($value);
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.google.com/accounts/ClientLogin");
$data = array(
'accountType' => HOSTED_OR_GOOGLE,
'Email' => $username,
'Passwd' => $password,
'source'=> $source,
'service'=>$service
);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
// for debugging the request
//curl_setopt($ch, CURLINFO_HEADER_OUT, true); // for debugging
$response = curl_exec($ch);
curl_close($ch);
echo $response;
$pos = strpos($response, "Auth=");
$authKey = trim(substr($response, 5+$pos));
echo $authKey;
echo 'Device Token: '. $deviceToken . '';
$data = array(
'registration_id' => $deviceToken,
'collapse_key' => 'ck_' . 'col_key',
'data.message' => $message,
'data.title' =>'Request Push Demo'
);
//$data = (is_array($data)) ? http_build_query($data) : $data;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://android.apis.google.com/c2dm/send");
echo 'Content-Length:'.strlen($data);
$headers = array('Authorization: GoogleLogin auth=' . $authKey,'Content-Length:'.strlen($data));
if($headers)
{
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
}
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
$messagedata = curl_exec($ch);
//var_dump(curl_getinfo($ch)); //for debugging the request
//var_dump($messagedata);
// echo $messagedata;
curl_close($ch);
}
?>
<html>
<form action ="./c2dmtest2.php" method="get" enctype="application/x-www-form-urlencoded" name="Send Notification" target="_self">
<label>Push Message
<input name="message" type="text" size="50" maxlength="50"></label>
<input name="Send Message" type="submit" value="Send Message">
</form>
</html>
最佳答案
您能否在代码顶部添加以下行,以便查看潜在的错误:
error_reporting(E_ALL);
ini_set('display_errors', '1');
关于php - Android 推送通知 PHP 代码在 3rd 方服务器中不工作,在本地服务器中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7238800/