iOS 使用 php 代码的多个推送通知不会发送到所有设备
iOS Multiple push notifications using php code does not send to all devices
我正在使用 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 循环针对所有令牌执行,但通知仅针对坏令牌之前的令牌。可以做什么?
经过多次努力,我发现出了什么问题。我在问题中提到的一个旧的或过期的令牌是由开发 APNs 证书生成的令牌(可能在开发期间分发 url 被调用并且开发令牌被保存在服务器中),所有其他令牌都是从分发证书生成。因此,如果您在分发令牌之间发送一个开发令牌,苹果服务器将关闭与我们服务器的连接,并且不会处理该开发令牌之后的其他令牌。切勿混合开发和分发令牌。谢谢你。
我正在使用 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 循环针对所有令牌执行,但通知仅针对坏令牌之前的令牌。可以做什么?
经过多次努力,我发现出了什么问题。我在问题中提到的一个旧的或过期的令牌是由开发 APNs 证书生成的令牌(可能在开发期间分发 url 被调用并且开发令牌被保存在服务器中),所有其他令牌都是从分发证书生成。因此,如果您在分发令牌之间发送一个开发令牌,苹果服务器将关闭与我们服务器的连接,并且不会处理该开发令牌之后的其他令牌。切勿混合开发和分发令牌。谢谢你。