2010-11-09 2 views
0

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.

+0

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

Répondre

0

Vous avez dit que vous exécutez sur localhost (je suppose que vous parlez sur un ordinateur et non le téléphone)

Si vous utilisez l'émulateur, il a fait son propre IP, les points à votre façon localhost émulateur, pas votre ordinateur. Vous devrez utiliser l'adresse IP de votre ordinateur (généralement 192.168.x.x si vous êtes derrière un routeur). Si vous utilisez un téléphone, vous devrez également utiliser l'adresse IP de votre ordinateur, mais vous devrez utiliser votre adresse IP externe et non celle derrière votre routeur (le téléphone ne se trouve pas sur votre réseau local).).

Cela dit, je remarqué que vous avez cette ligne (pas de chiffres, mais son à la fin)

socket_connect($s, gethostbyname("yourhost"), 80); 

Je devine par "yourhost" que vous vouliez dire « localhost », et par ce que vous vouliez dire de votre ordinateur adresse IP :)

en fait, je remarque que vous avez "yourhost" utilisé quelques fois, était que juste une erreur de copie d'une page de tutoriel ou de la documentation

+0

Eh bien, je vais utiliser l'IP alors. Je vais essayer celui-là. btw, j'ai écrit yourhost moi-même parce que j'essayais simultanément sur mon hôte aussi. – user501582

Questions connexes