2009-09-18 18 views
5

Cuando intento enviar notificaciones automáticas aparece este error: "Connection refused", pero no sé por qué ... He subido mis apns-dev. pem en el mismo directorio también en el directorio raíz, pero eso tampoco funcionará.Las notificaciones push (iPhone) dan "111 Connection refused"

<?php 
$payload['aps'] = array('alert' => 'This is the alert text', 'badge' => 1, 'sound' => 'default'); 
$payload = json_encode($payload); 
$apnsHost = 'gateway.sandbox.push.apple.com'; 
$apnsPort = 2195; 
$apnsCert = 'apns-dev.pem'; 
$apnsPass = 'secret'; 

$streamContext = stream_context_create(); 
stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert); 
stream_context_set_option($streamContext, 'ssl', 'passphrase', $apnsPass); 

$apns = stream_socket_client('ssl://' . $apnsHost . ':' . $apnsPort, $error, $errorString, 60, STREAM_CLIENT_CONNECT, $streamContext); 

if (!$apns) { 
    echo "Error: $errorString ($error)"; 
} 

// Do this for each 
$deviceToken = '00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000'; 
$apnsMessage = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $deviceToken)) . chr(0) . chr(strlen($payload)) . $payload; 
fwrite($apns, $apnsMessage); 
// End do 

socket_close($apns); 
fclose($apns); 
?> 

¿Alguien sabe lo que estoy haciendo mal? Cuando elimino la frase de contraseña y no la envío, tampoco funciona ...

Respuesta

2

No desea una frase de contraseña a menos que su archivo .pem requiera una. La conexión requiere la verificación de pares (opción verify_peer) activada. Además, asegúrese de que $ apnsCert sea la ruta válida al certificado, puede usar una ruta absoluta como verificación de cordura.

Por último, esto no debería afectar su capacidad de conexión, pero el token del dispositivo debe ser válido.

+0

Realmente gracias, voy a comprobar si esto funciona. ¿Quiere decir ftp-path (/public-html/directory/file.pem) o (http://www.server.com/directory/file.pem) por ruta absoluta? Recibo este error antes de enviar cualquier dato, por lo que no es el token del dispositivo, creo ... Gracias: D! – elslooo

+0

No funciona: (..., a continuación se muestra mi respuesta para evitar ese error. – elslooo

0

he conocido fija ese error añadiendo esto: STREAM_CLIENT_ASYNC_CONNECT | STREAM_CLIENT_CONNECT

sabe que yo no recibo ningún error, pero no reciben ninguna notificación. Creo que Dev-token no es válido saber, por lo tanto, así es como se ve

números números números números números números números números.

Los espacios se eliminan en esta línea: $ apnsMessage = chr (0). chr (0). chr (32). pack ('H *', str_replace ('', '', $ deviceToken)). chr (0). chr (strlen ($ payload)). $ carga útil;

Editar: fundé el problema: Mi servidor está rechazando el puerto de salida, acaba de enviar un correo electrónico, con la esperanza de que puedan activarlo ...

6

Asegúrese de que el puerto de salida 2195 es open.This sería estar en la configuración de tu firewall

+0

Sí, ese fue realmente el problema. Gracias por ayudarme. :) – elslooo

Cuestiones relacionadas