J'ai réussi à obtenir le jeton d'authentification de google et maintenant j'essaie de pousser le message à mon appareil Android.Push message dans 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('[email protected]'). "&Passwd=" . urlencode('xxx'). "&service=" . urlencode('ac2dm');
echo $post_fields; echo "<br/>";
$data = array('accountType' => 'GOOGLE', 'Email' => '[email protected]', '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/>";
?>
Je reçois le AuthToken de google. Maintenant, je dois envoyer mon message à l'appareil Android Voici le code PHP pour que ...
(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));
?>
Je courais à la fois le code de localhost. J'ai un problème de douille ici je pense. Soit la page continue à charger pour toujours ou je me donne une erreur fatale: le temps maximum a dépassé 60 secondes à la ligne 20 ou plus.
Lorsque je tente le code au serveur je reçois l'erreur comme
Warning: socket_read() [function.socket-read]: unable to read from socket [111]: Connection refused in second.php on line 20
Je ne sais pas ce qui ne va pas ici. Quelqu'un peut-il me dire pourquoi je reçois cette erreur. Je n'ai aucune idée de comment la chose socket fonctionne aussi bien sur Android.
Notez que vous pouvez [lignes de format code] (http: //meta.stackexchange.com/questions/22186/how-do-i-format-m y-code-blocks) en les indentant quatre espaces. Le bouton "{}" dans la barre d'outils de l'éditeur le fait pour vous. Modifiez votre question et essayez-le. Cliquez sur le point d'interrogation orange dans la barre d'outils de l'éditeur pour plus d'informations et des conseils sur le formatage. – outis