我在苹果推送通知服务指南中读到:
使用简单格式,如果您发送的通知数据包格式不正确(例如,有效负载超过规定的限制),APNs 会通过切断连接来响应。
但是如果消息(简单格式)是正确的呢?如果我发送保持活动数据包,APN 会保持连接吗?我不想建立大量的连接,因为这可能被视为 DOS。
我在苹果推送通知服务指南中读到:
使用简单格式,如果您发送的通知数据包格式不正确(例如,有效负载超过规定的限制),APNs 会通过切断连接来响应。
但是如果消息(简单格式)是正确的呢?如果我发送保持活动数据包,APN 会保持连接吗?我不想建立大量的连接,因为这可能被视为 DOS。
我的评论的散列版本,更详细:
这是我在第一点中的详细信息示例:
// connect to your MySQL database
$con = mysql_connect("localhost", "username", "password");
// select a database
mysql_select_db("my_database", $con);
// run a query to grab your device tokens
$result = mysql_query("SELECT device_tokens FROM some_table");
// set your message
$msg = 'important update';
// create the payload
$body['aps'] = array('alert' => array('body' => $msg, 'action-loc-key' => 'Read'));
// convert to JSON
$payload = json_encode($body);
// setup APNS connection
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'cert.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', 'password');
// open a connection to the APNS server
$apns = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $error, $errorString, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
while ($row = mysql_fetch_array($result))
{
$deviceToken = $row['device_tokens'];
$apnsMessage = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $deviceToken)) . chr(0) . chr(strlen($payload)) . $payload;
fwrite($apns, $apnsMessage, strlen($apnsMessage));
}
// close APNS connection
fclose($apns);
// close database connection
mysql_close($con);
...并记住在上面代码中的 URL 中切换沙盒或实时推送服务器。