iOS使用php代码的多个推送通知不会发送到所有设备

时间:2018-10-31 12:16:02

标签: php ios apple-push-notifications

我正在使用ios推送通知。所有证书均正确创建。通知将使用php服务器代码:-

$deviceTokens; // This is an array which has all tokens
$passphrase; // This is my passphrase

$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'iOSPushNotificationCertificate.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
stream_context_set_option($ctx, 'ssl', 'cafile', 'entrust_2048_ca.cer');
$fp = stream_socket_client('ssl://gateway.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);

$body; // This is my notification data body

$payload = json_encode($body);

for($i = 0; $i < sizeof($arr); $i++) {

    $msg = chr(0) . pack('n', 32) . pack('H*', $arr[$i]) . pack('n', strlen($payload)) . $payload;

    $result = fwrite($fp, $msg, strlen($msg));

    echo $result;

}

fclose($fp);

echo $ result 代码为我提供了所有好的或坏令牌的整数值。

当所有令牌都正确时,则所有设备都将收到通知。但是问题是,如果中间的一个令牌是旧的或过期的,或者类似的东西,那么该过期令牌之后的所有通知都将消失。 for循环针对所有令牌执行,但是通知仅针对错误令牌之前的令牌。该怎么办?

1 个答案:

答案 0 :(得分:0)

经过许多努力,我发现出了什么问题。我在我的问题中谈论的一个旧的或过期的令牌是开发APNs证书生成的令牌(可能是在开发过程中调用了分发URL并将开发令牌保存在服务器中),所有其他令牌都是从分发证书生成的。因此,如果您在分发令牌之间发送一个开发令牌,则Apple服务器会关闭与我们服务器的连接,而在该开发令牌之后的其他令牌将不会得到处理。切勿混用开发和发行令牌。谢谢。