APNS连接问题

时间:2013-02-07 21:47:10

标签: apple-push-notifications apns-php

好的,我知道有很多关于APNS连接失败的讨论。大多数讨论建议检查传出服务器端口2195以确保它将允许连接。这不是我的问题,虽然我遇到了“拒绝连接”错误(111)。

我已经验证了我的服务器与沙箱服务器之间的通信是否正在从Apple Gateway收到200响应。我知道我的证书很好,因为我已经使用Mac上的openssl测试了连接。我也能够从我的服务器连接网关 一次 ,但无法获得一致的连接。

我使用的测试代码如下:

$ctx = stream_context_create();

stream_context_set_option($ctx,'ssl', 'local_cert', $pem);
stream_context_set_option($ctx, 'ssl', 'passphrase', $key);
$gateway = 'gateway.sandbox.push.apple.com';
$port = '2195';

$remote_socket = 'ssl://'.$gateway.':'.$port;
$fp = stream_socket_client($remote_socket, $err, $errstr, 60,STREAM_CLIENT_CONNECT, $ctx);

if (!$fp){
    echo $err.'<br>';
    echo $errstr.'</br>';
    echo 'error=apple failed to connect';
} else {
    fclose($fp);
    echo 'success';
}

我已将.pem文件放在与脚本文件相同的目录中,删除了使用密码,指定了verify_peer,使用了STREAM_CLIENT_ASYNC_CONNECT和STREAM_CLIENT_PERSISTENT标记但没有成功。

这是我正在做的事情的问题,apns沙盒服务器的问题,或者这是我应该从apns中得到的?非常感谢您提供的任何见解或帮助 - 我的头发变得很薄!

问候。

PS - 如果我删除密码,我会收到115错误,说无法访问该密钥。

2 个答案:

答案 0 :(得分:2)

尽管能够至少连接一次,但事实证明,如果没有GoDaddy上的虚拟专用服务器,就无法访​​问APNS网关。至少每月80美元,预付,这太贵了。其他方式。

答案 1 :(得分:1)

其他一些尝试:

  1. 在stream_socket_client调用中使用 STREAM_CLIENT_CONNECT | STREAM_CLIENT_PERSISTENT
  2. 请勿使用verify_peer
  3. 检查PHP脚本的所有者是否有足够的权限来读取pem文件并连接到位于其他位置的端口(即/不仅仅是localhost)