当我尝试发送推送通知时,我收到此错误:“拒绝连接”,但我不知道为什么...我已将我的apns-dev.pem上传到根目录中的同一目录中目录,但这也无济于事。
<?php
$payload['aps'] = array('alert' => 'This is the alert text', 'badge' => 1, 'sound' => 'default');
$payload = json_encode($payload);
$apnsHost = 'gateway.sandbox.push.apple.com';
$apnsPort = 2195;
$apnsCert = 'apns-dev.pem';
$apnsPass = 'secret';
$streamContext = stream_context_create();
stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert);
stream_context_set_option($streamContext, 'ssl', 'passphrase', $apnsPass);
$apns = stream_socket_client('ssl://' . $apnsHost . ':' . $apnsPort, $error, $errorString, 60, STREAM_CLIENT_CONNECT, $streamContext);
if (!$apns) {
echo "Error: $errorString ($error)";
}
// Do this for each
$deviceToken = '00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000';
$apnsMessage = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $deviceToken)) . chr(0) . chr(strlen($payload)) . $payload;
fwrite($apns, $apnsMessage);
// End do
socket_close($apns);
fclose($apns);
?>
有谁知道我做错了什么?当我删除密码并且不发送它时它也不起作用......
答案 0 :(得分:7)
确保传出端口2195已打开。这将在您的防火墙配置中。
答案 1 :(得分:2)
除非您的.pem文件需要密码,否则您不需要密码。连接需要打开对等验证(选项verify_peer)。另外,确保$ apnsCert是证书的有效路径,您可以使用绝对路径作为完整性检查。
最后,这不应影响您的连接能力,但您的设备令牌必须有效。
答案 2 :(得分:0)
我知道通过添加以下内容修复了该错误:STREAM_CLIENT_ASYNC_CONNECT | STREAM_CLIENT_CONNECT
知道我没有收到任何错误,但我没有收到任何通知。我认为Dev-token无效,所以,这就是它的样子
号码号码号码号码号码号码。
此行中删除了空格: $ apnsMessage = chr(0)。 chr(0)。 chr(32)。 pack('H *',str_replace('','',$ deviceToken))。 chr(0)。 chr(strlen($ payload))。 $有效载荷;
编辑:我发现了问题: 我的服务器拒绝传出端口,只是发送邮件,希望他们可以激活它......