Conexión persistente a través de PHP a APNS

Sé que hay muchas publicaciones en SO que abordan este problema, desafortunadamente no soy tan avanzado en progtwigción PHP y tengo una pregunta que no ha sido respondida en otro lugar:

Muchos de los tutoriales para notifications push de Apple crean una connection a través de stream_socket_client (). Pero a la mayoría de ellos les falta la bandera "STREAM_CLIENT_PERSISTENT". ¿Esta bandera hará que la connection sea realmente persistente? De ser así, ¿cuándo estaría cerrado? La documentation dice que permanecerá conectado también en las recargas de la página. ¿Esto depende de las sesiones?

La versión sin esta bandera funciona, pero me temo que el APNS me bloqueará tan pronto como coloque los certificates de producción, etc. ( aquí se describe). Gracias por adelantado.

De acuerdo con la documentation de PHP en Constantes pnetworkingefinidas , el uso de STREAM_CLIENT_PERSISTENT con la connection APNS debería mantener la connection activa entre las cargas de página. Este es un requisito para la connection APNS, ya que lo estrangulará ya que considera cualquier desconnection después de enviar una carga útil a un posible ataque de Denegación de Servicio.

Si tiene algún problema con el cliente fuera de las conexiones presisitentes, quizás desee probar lo siguiente, ya que es la mejor manera que he visto de manejar una connection APNS hasta ahora en PHP. Utiliza el cliente de PHPXMLRPC , por lo que tendrá que download ese package.

<?php include '../vendors/xmlrpc.inc'; $hostName = 'localhost'; # Your services endpoint here. $rpcPath = ''; $port = 7077; if($_GET['action'] == 'provisioning') { $echoString = new xmlrpcmsg( 'provision', array( php_xmlrpc_encode('appid'), php_xmlrpc_encode('/path/to/certificate.pem'), php_xmlrpc_encode('sandbox'), php_xmlrpc_encode(100) ) ); $continue = TRUE; } if($_GET['action'] == 'notify') { $echoString = new xmlrpcmsg( 'notify', array( php_xmlrpc_encode('paparazzme'), php_xmlrpc_encode(array('6bcda...', '7c008...')), php_xmlrpc_encode(array(array("aps" => array("alert" => "Hello User 1" )), array("aps" => array("alert" => "Hello User 2" )))) ) ); $continue = TRUE; } if($continue == true) { # Create a client handle and send request $client = new xmlrpc_client($rpcPath, $hostName, $port); # A little verbose debug $client->setDebug(2); # The response $response = &$client->send($echoString); # Check if response is good if (! $response->faultCode()) print "\nReturned string is: " . php_xmlrpc_decode($response->value()) . "\n"; else print "An error occurnetworking: \nCode: " . $response->faultCode() . " Reason: '" . htmlspecialchars($response->faultString()) . "'\n"; } ?> 

FUENTE: Cómo comenzar con APNS para iPhone o iTouch

Me gustaría tomarme el time, para señalar que, no he probado ninguno de este código, no tengo una aplicación de iPhone en este momento para probar esto, así que puedo decirte si esto realmente funciona.

Si es factible para usted, le recomiendo que use Uban Airship en su lugar, ya que proporcionan 250,000 empujes gratis por mes a cada uno de sus clientes, y que manejan la connection al server APN para usted, desde allí usa sus API para hablar con sus clientes