在PHP中发送IOS批量推送通知的正确方法

时间:2016-02-04 19:47:32

标签: php ios apple-push-notifications

我正在尝试使用PHP在IOS上发送推送通知,有300,000个设备令牌

我编写了一个小例程,每次执行时例程都会向100个设备发送通知,并且在1秒后再次执行延迟例程并将通知发送到下一个100个设备,例程如下

$body['aps'] = array('alert' => 'Energy is full',
        'sound' => 'default',
        'badge' => '0'
);


$url = 'ssl://gateway.push.apple.com:2195';
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ProductionCertificate.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', 'my pass phrase');
stream_context_set_option($ctx, 'ssl', 'cafile', 'trusted_ca.cer');

$fp = stream_socket_client($url, $err,
    $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
if (!$fp) { return -1;}
    foreach($OneHundredTokens as $deviceToken) {
        $payload = json_encode($body, 256);
        $msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;
        $result = fwrite($fp, $msg, strlen($msg));
    }

fclose($fp);

有些时候这个例程工作得很好,我已经看到在设备上发送了通知。

但有时会出现以下错误

  

警告:fwrite():SSL:已建立的连接被中止   主机上的软件。

我的问题是:

  1. 发送批量通知是否正确?
  2. 我打开一次连接并为100个设备写入数据(通知),然后关闭连接,或者最好是为每个设备令牌打开连接然后关闭?
  3. 导致上述错误的原因是什么?
  4. 首饰 发送大约90,000个推送通知(单个连接打开100个,延迟1秒后接下来100个) 大约60,000失败(fwrite失败),上面的错误和大约30,000推送成功发送(fwrite返回正整数,表示写入的字节数)。

0 个答案:

没有答案