De acuerdo con la documentación de PHP en Predefined Constants, utilizando STREAM_CLIENT_PERSISTENT con la conexión APN debe mantener la conexión activa entre la carga de la página. Este es un requisito para la conexión APNS, ya que WILL lo estrangulará ya que considera cualquier desconexión 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 actuales, puede intentar lo siguiente, ya que es la mejor manera que he visto para manejar una conexión APNS hasta el momento en PHP. Esto utiliza el cliente de PHPXMLRPC, por lo que tendrá que descargar ese paquete.
<?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 occurred: \nCode: " . $response->faultCode() . " Reason: '" . htmlspecialchars($response->faultString()) . "'\n";
}
?>
FUENTE: How to get started with APNS for iPhone or iTouch
me gustaría tomar el tiempo, señalar que, yo no he probado ninguna de este código, que no tienen una aplicación de iPhone en este momento para poner a prueba esto con, así que puedo decirte si esto realmente funciona.
Si es posible para usted, le recomiendo que use el Uban Airship, ya que proporcionan 250,000 empujones gratis al mes a cada uno de sus clientes, y que manejan la conexión con el servidor APN para usted, desde allí usa su APIs para hablar con sus clientes.