Ios 推送通知:我几乎总是收到;“连接失败”;但它成功了几次

Ios 推送通知:我几乎总是收到;“连接失败”;但它成功了几次,ios,connection,push-notification,apple-push-notifications,Ios,Connection,Push Notification,Apple Push Notifications,我正在测试一个带有推送通知的iPhone应用程序 在过去的5天里,我让它工作了几次(通常在几分钟内连续发出通知) 相反,我几乎总是收到错误消息:“连接失败” 由于它工作了几次,我假设代码是正确的,证书也是有效的。所以我不知道如何解决这个问题 我还尝试使用以下代码多次连接: $ctx = stream_context_create(); stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem'); $fp = st

我正在测试一个带有推送通知的iPhone应用程序

在过去的5天里,我让它工作了几次(通常在几分钟内连续发出通知)

相反,我几乎总是收到错误消息:“连接失败”

由于它工作了几次,我假设代码是正确的,证书也是有效的。所以我不知道如何解决这个问题

我还尝试使用以下代码多次连接:

$ctx = stream_context_create();
    stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');

    $fp = stream_socket_client('ssl://gateway.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);

    for ( $tries = 5, $interval = 10, $fp = false; !$fp && $tries > 0; $tries-- ) {
      if (!($fp)) {
        print "Failed to connect $err $errstrn"; 
        sleep ( $interval );
      }
    }

    if ($fp) {

            ...
输出:无法连接到ssl://gateway.sandbox.push.apple.com:2195 (连接被拒绝)


谢谢

代码看起来基本正确。我建议你不需要这个循环(我从来没有);如果发送的请求过多,甚至可能会给您带来麻烦。我不知道为什么会有一些成功和一些失败,我发现APN服务器是相当一致的

需要检查的一个细节是:您使用的PHP代码在ssl选项中不包含密码;如果您使用的pem文件受密码保护,则需要此选项。(例如,请参见下面的代码)

我建议重新验证您使用的凭据。要做到这一点,最好的方法是使用
openssl
(从终端),如苹果的故障排除技术说明2265所述。我已经就以下问题编写了一个很好的演练:

验证pem文件后,您可以尝试使用以下PHP代码(从我的测试页面中窃取):

希望有帮助

// Put your private key's passphrase here:
$passphrase = 'p-a-s-s-p-h-r-a-s-e';

$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'CertificateAndPrivateKey.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);

// Open a connection to the APNS server
$fp = stream_socket_client('ssl://gateway.push.apple.com:2195',
    $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);

if (!$fp)
    exit("Failed to connect: $err $errstr" . PHP_EOL);

echo 'Connected to APNS' . PHP_EOL;