2012-07-09 18 views
5

Recibo este error después de intentar ejecutar mi script php para enviar una notifcación push a mi iphone.Notificación de inserción en PHP

He intentado todo y nada funciona. Creo que esto significa que mi ck.pem es incorrecto, pero no estoy seguro si es el key.pem o el cert.pem que está mal.

Por favor, ayuda

Guión

// This this a fake device id: 
$deviceToken = '9870h8v088bj29u080af894jj67klfgcv9mmm79k8e4l23456h908743n093e359'; 

// fake password: 
$passphrase = '123456'; 

// Put your alert message here: 
$message = 'New Message'; 
    //////////////////////////////////////////////////////////////////////////////// 

$ctx = stream_context_create(); 
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem'); 
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase); 

// Open a connection to the APNS server 
$fp = stream_socket_client(
          'ssl://gateway.sandbox.push.apple.com:2195', $err, 
          $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); 

if (!$fp) 
exit("Failed to connect: $err $errstr" . PHP_EOL); 

echo 'Connected to APNS' . PHP_EOL; 

// Create the payload body 
$body['aps'] = array(
        'alert' => $message, 
        'sound' => 'default', 
        'badge' => '1' 
        ); 

// Encode the payload as JSON 
$payload = json_encode($body); 

// Build the binary notification 
$msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload; 

// Send it to the server 
$result = fwrite($fp, $msg, strlen($msg)); 

if (!$result) 
echo 'Message not delivered' . PHP_EOL; 
else 
echo 'Message successfully delivered' . PHP_EOL; 

// Close the connection to the server 
fclose($fp); 

?> 

error

Warning: stream_socket_client(): SSL operation failed with code 1. OpenSSL Error messages: 
error:14094416:SSL routines:SSL3_READ_BYTES:sslv3 alert certificate unknown in  /Users/daveking/Desktop/App Certificates/simplepush.php on line 21 

Warning: stream_socket_client(): Failed to enable crypto in /Users/daveking/Desktop/App Certificates/simplepush.php on line 21 

Warning: stream_socket_client(): unable to connect to ssl://gateway.sandbox.push.apple.com:2195 (Unknown error) in /Users/daveking/Desktop/App Certificates/simplepush.php on line 21 
Failed to connect: 0 
+0

Posible duplicado: http://stackoverflow.com/questions/6372308/apns-ssl-gateway-sandbox-push-apple-com2195-connection-fails –

+1

@TimWithers Esto no me sirve. Es algo similar, ya que se ocupan de las notificaciones push, pero no es lo mismo. – BigT

+0

puede ser su carga útil más grande que 256 bytes permitidos por Apple, por lo tanto, puede causar 'fwrite' o este error - Me enfrento a este problema –

Respuesta

6

¿Qué has intentado exactamente?

http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12 http://www.raywenderlich.com/3525/apple-push-notification-services-tutorial-part-2

Este es un buen tutorial sobre la generación del certificado, haciendo que el script php etc.

+0

Esos son los tutoriales que seguí al crear mi ck.pem. He usado ese simplepush.php arriba, pero como he dicho, estoy recibiendo esos errores – BigT

+0

Acabo de ponerlo a trabajar. Mi archivo cer fue corrompido de alguna manera por lo que lo reinstalé y revisé esos tutoriales de nuevo. Gracias – BigT

3

Un buen enlace que describe los pasos que puede encontrarse dentro http://blog.boxedice.com/2009/07/10/how-to-build-an-apple-push-notification-provider-server-tutorial/

Un buen enlace para obtener su cabeza alrededor de los temas de certificación, echa un vistazo a Urban Airship:

http://urbanairship.com/docs/keys.html

Y con respecto a la aprobación , es bueno saber:

=>app signed with a dev cert = sandbox url & dev apns cert, app signed with 

=>appstore/adhoc cert = prod url & prod apns cert 

también utilizando una aplicación adhoc/appstore en un dispositivo que ha utilizado previamente la aplicación de desarrollo hará que se estrelle el trampolín. (así que básicamente necesita dos dispositivos) (por confirmar)

Importante: DEBE mantener la conexión a la zona de pruebas, es decir, NO debe conectar, enviar, desconectar. Si lo hace, Apple puede que estrangular como un posible DDoS

un PHP script de ejemplo para activar una notificación de inserción de un servidor podría ser algo como esto: Código

<?php 

// from http://www.macoscoders.com/2009/05/17/iphone-apple-push-notification-service-apns/ 
// call: /apns/apns.php?message=Hello%20from%20macoscoders&badge=2&sound=received5.caf 

$deviceToken = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';       

// Passphrase for the private key (ck.pem file) 
// $pass = ; 
// Get the parameters from http get or from command line 

$message = $_GET['message'] or $message = $argv[1] or $message = 'Message sent ' . @date("H:i:s d/M/Y", mktime()); 
$badge = (int)$_GET['badge'] or $badge = (int)$argv[2] or $badge = 111; 
$sound = $_GET['sound'] or $sound = $argv[3] or $sound = 'chime'; 

// Construct the notification payload 
$body = array(); 
$body['aps'] = array('alert' => $message); 
if ($badge) 
    $body['aps']['badge'] = $badge; 
if ($sound) 
    $body['aps']['sound'] = $sound; 
/* End of Configurable Items */ 

$ctx = stream_context_create(); 
stream_context_set_option($ctx, 'ssl', 'local_cert', 'push/apns-dev.pem'); 

// assume the private key passphase was removed. 
// stream_context_set_option($ctx, 'ssl', 'passphrase', $pass); 
$fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx); 

if (!$fp) { 
    print "Failed to connect $err $errstr\n"; 
    return; 
} else { 
    print "Connection OK 

"; 
} 

$payload = json_encode($body); 

// request one 
$msg = chr(0) . pack("n",32) . pack('H*', str_replace(' ', , $deviceToken)) . pack("n",strlen($payload)) . $payload; 
print "sending message :" . $payload . "\n"; 

fwrite($fp, $msg); 

fclose($fp); 

?> 
0

Trabajar aquí:

<?php 

$deviceToken = '8845ba7c41e95e12caea6381ea6f01b5cd7b59a52feb9005e0727a65a4105dc2a0'; 

$passphrase = ''; 

$message = 'Your message'; 


$ctx = stream_context_create(); 
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem'); 
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase); 

// Open a connection to the APNS server 
$fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); 

if (!$fp) 
    exit("Failed to connect: $err $errstr" . PHP_EOL); 

echo 'Connected to APNS' . PHP_EOL; 


$body['aps'] = array(
    'alert' => array(
     'body' => $message, 
     'action-loc-key' => 'Bango App', 
    ), 
    'badge' => 2, 
    'sound' => 'oven.caf', 
    ); 

$payload = json_encode($body); 

// Build the binary notification 
$msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload; 


$result = fwrite($fp, $msg, strlen($msg)); 

if (!$result) 
    echo 'Message not delivered' . PHP_EOL; 
else 
    echo 'Message successfully delivered' . PHP_EOL; 

fclose($fp); 
Cuestiones relacionadas