【发布时间】:2010-11-09 09:59:24
【问题描述】:
我已经管理了从谷歌获取身份验证令牌,现在我正在尝试将消息推送到我的 android 设备。
//code to fetch auth Token
<?php
$url = "https://www.google.com/accounts/ClientLogin";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
echo $url;
$post_fields = "accountType=" . urlencode('HOSTED_OR_GOOGLE'). "&Email=" . urlencode('mail@gmail.com'). "&Passwd=" . urlencode('xxx'). "&service=" . urlencode('ac2dm');
echo $post_fields; echo "<br/>";
$data = array('accountType' => 'GOOGLE', 'Email' => 'mail@gmail.com', 'Passwd' => 'xxx', 'source'=>'PHI-cUrl-Example', 'service'=>'ac2dm');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
//curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLINFO_HEADER_OUT, true); // for debugging the request
var_dump(curl_getinfo($ch,CURLINFO_HEADER_OUT)); //for debugging the request
$response = curl_exec($ch);
var_dump($response);
curl_close($ch);
echo "<br/><br/>";
?>
我从谷歌获得了 AuthToken。现在我需要将我的消息发送到 android 设备 这是那个的 php 代码...
(second.php)
<?php
$wannasay = array (
"registration_id" => "APA91bH9SYn9Iru4Ddr87neqEh3OWaUhT8k_UUpxUZj7ORMLwFCiZ3qKm1yKWGFro47DNsk6CynvureInynXFqs1zEZ9xUwUlw",
"collapse_key" => "abcdef"
);
$dataels = array();
foreach (array_keys($wannasay) as $thiskey) {
array_push($dataels,urlencode($thiskey) ."=".
urlencode($wannasay[$thiskey]));
}
$data = implode("&",$dataels);
// work out the request
//auth token below is the one i got from above script
$authToken="DQAAAK0AAAABGiOYfUQfp_ZiDyZqErKOacSmgZCFvnogDUaVzSX9a6qh079XJblM63Z12JwOdRv8gDNCqLj80olSbFeqZFJpqXQDvmmW_PcyHUZPyDZIpZ0G0FRkV_sgqy06YM7r5zUnAggHA8hlmVM3AQBYNGcP_A2Ddq_pjm6cqaQBQH_dFaJgK6UfxNaNDK2jl78VWSU-ZMb-Q2zU1xMLbwYcWXuYIRqRxSlEN68N2M2u4Ub_AA";
$header =
"POST http://android.apis.google.com/c2dm/send HTTP/1.1\n" .
"Host: yourhost\n" .
"Content-Type: application/x-www-form-urlencoded\n" .
"Authorization: GoogleLogin auth=" . $authToken . "\n" .
"Content-Length: " . strlen($data) . "\n\n" .
$data . "\n";
// establish the connection and send the request
$s = socket_create(AF_INET, SOCK_DGRAM, 0);//AF_INET ipv4 internet based protocol
$z = socket_connect($s, gethostbyname("yourhost"), 80);
socket_write ($s, $header, strlen($header));
$header = "";
while (true) {
if (strlen($c = socket_read($s, 1))) { //this is line 20
$header .= $c;
}
}
socket_close($s);
print nl2br(htmlspecialchars($header));
?>
我正在从 localhost 运行这两个代码。我想我在这里遇到套接字问题。要么页面一直加载,要么我给了我致命错误:第 20 行左右的最大时间超过 60 秒。
当我在服务器上尝试代码时,我得到了错误
Warning: socket_read() [function.socket-read]: unable to read from socket [111]: Connection refused in second.php on line 20
我不知道这里有什么问题。有人可以告诉我为什么会出现此错误。我不知道套接字是如何在 Android 上工作的。
【问题讨论】:
-
请注意,您可以 format lines as code 将它们缩进四个空格。编辑器工具栏中的“{}”按钮会为您执行此操作。编辑您的问题并尝试一下。单击编辑器工具栏中的橙色问号以获取有关格式设置的更多信息和提示。
标签: php android sockets push message