Zgodnie z dokumentacją PHP na Predefined Constants korzystając STREAM_CLIENT_PERSISTENT z połączenia APN powinny utrzymać aktywność połączenia między ładowaniem stron. Jest to wymagane w przypadku połączenia z APNS, ponieważ WILL będzie was dławić, gdy uzna jakiekolwiek rozłączenie po wysłaniu ładunku z potencjalnym atakiem Denial of Service.
Jeśli masz jakiekolwiek problemy z klientem poza głównymi połączeniami, możesz spróbować poniższych rozwiązań, ponieważ jest to najlepszy sposób, w jaki radziłem sobie z połączeniem APNS do tej pory w PHP. To używa klienta z PHPXMLRPC, więc będziesz musiał pobrać ten pakiet.
<?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";
}
?>
ŹRÓDŁO: How to get started with APNS for iPhone or iTouch
chciałbym poświęcić trochę czasu, aby podkreślić, że nie testowałem żadnej z tego kodu, nie mam aplikacji iPhone teraz przetestować to z, więc mogę powiedzieć, czy to faktycznie działa.
Jeśli jest to wykonalne, polecam zamiast tego używać Uban Airship, ponieważ zapewniają one 250 000 darmowych przeskoków miesięcznie do każdego z ich klientów i obsługują połączenie z serwerem APN dla ciebie, z tego miejsca używasz ich APIs do rozmowy z klientami.