代码之家  ›  专栏  ›  技术社区  ›  cutsoy

推送通知(iPhone)给出“111连接被拒绝”

  •  5
  • cutsoy  · 技术社区  · 16 年前

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

    有人知道我做错了什么吗?当我删除密码而不发送时,它也不起作用…

    3 回复  |  直到 14 年前
        1
  •  2
  •   Ben Lachman    16 年前

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

    最后,这不会影响您的连接能力,但您的设备令牌必须有效。

        2
  •  7
  •   mshau    14 年前

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

        3
  •  0
  •   cutsoy    16 年前

    我知道通过添加以下内容修复了该错误:stream_client_async_connect_stream_client_connect

    知道我没有收到任何错误,但我没有收到任何通知。我认为dev令牌是无效的know,所以这就是它的样子

    数字数字数字数字数字数字数字数字数字。

    此行中的空格将被删除: $apnsmessage=chr(0)。CHR(0)。CHR(32)。pack(“h*”,str_replace(“”,“$devicetoken))。CHR(0)。chr(strlen($payload))。有效载荷;

    编辑:我发现了问题: 我的服务器拒绝发送端口,只是发送了一封邮件,希望他们能激活它…

    推荐文章