5

当我尝试发送推送通知时,我收到此错误:“连接被拒绝”,但我不知道为什么...我已将我的 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);
?>

有谁知道我做错了什么?当我删除密码并且不发送它时,它也不起作用......

4

3 回答 3

7

确保输出端口 2195 已打开。这将在您的防火墙配置中。

于 2012-06-07T06:53:37.667 回答
2

除非您的 .pem 文件需要密码,否则您不需要密码。连接需要打开对等验证(选项 verify_peer)。此外,请确保 $apnsCert 是证书的有效路径,您可以使用绝对路径作为完整性检查。

最后,这不应该影响您的连接能力,但您的设备令牌需要有效。

于 2009-10-08T17:54:19.103 回答
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))。$有效载荷;

编辑:我发现了问题: 我的服务器拒绝传出端口,刚刚发送了一封邮件,希望他们可以激活它......

于 2009-10-09T16:32:06.150 回答