Predefined Constantsに関する PHP ドキュメントに従って、APNS 接続でSTREAM_CLIENT_PERSISTENTを使用すると、ページの読み込み間で接続をアクティブに保つ必要があります。これは APNS 接続の要件です。ペイロードを送信した後の切断は、サービス拒否攻撃の可能性があると見なされるため、スロットルが発生します。
既存の接続以外でクライアントに問題がある場合は、次の方法を試してみてください。これは、これまで PHP 内で APNS 接続を処理するのに最適な方法でした。これはPHPXMLRPCのクライアントを使用するため、そのパッケージをダウンロードする必要があります。
<?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";
}
?>
出典: iPhone または iTouch の APNS の使用を開始する方法
時間をかけて、このコードをテストしていないことを指摘したいと思います。現在、これをテストするための iPhone アプリケーションを持っていないので、これが実際に機能するかどうかをお伝えできます。
実現可能な場合は、代わりに Uban Airship を使用することをお勧めします。Uban Airship は、各クライアントに毎月 250,000 回の無料プッシュを提供し、APN サーバーへの接続を処理します。そこからAPIを使用します。あなたのクライアントと話すために。