Apple推送通知FEEDBACK服务的PHP脚本每次都会获得TIMEOUT,

Too*_*ism 5 php timeout feedback apple-push-notifications

大家问候!我目前正在实施Apples推送通知的反馈服务.我已经完成了推送部分,并且在沙盒和分发应用程序上都可以使用.然而反馈服务似乎不起作用..每次我尝试使用我的功能..页面很好..只是得到超时.

我按照这个答案来实现我的功能:PHP技术来查询APNs反馈服务器

这是我的完整功能代码:

function checkFeedbackServer($appBundle,$useDev = TRUE)
{
    $apnsPort = 2195;
    $apnsCert = keyForApp($appBundle,$useDev);

    if($useDev)
    {
        echo 'FEEDBACK in DEVELOPER MODE <br/>';
        $apnsHost = 'feedback.sandbox.push.apple.com';
    }
    else
    {
        echo 'FEEDBACK in DISTRIBUTION MODE <br/>';
        $apnsHost = 'feedback.push.apple.com';
    }
    $finalPath = 'ssl://' . $apnsHost . ':' . $apnsPort;

    echo 'OPENING STREAM TO -> ' . $finalPath . '<br/>';
    echo 'USING CERT : ' . $apnsCert . "<br/>";


    $stream_context = stream_context_create();
    stream_context_set_option($stream_context, 'ssl', 'local_cert', $apnsCert);

    $apns = stream_socket_client($finalPath, $error, $errorString, 2, STREAM_CLIENT_CONNECT, $stream_context);

    if(!$apns) 
    {
        echo "ERROR $errcode: $errstr\n";
        return;
    }
    else echo 'APNS FEEDBACK CONNECTION ESTABLISHED...<br/>';

    $feedback_tokens = array();    
    $count = 0;

    echo 'error= ' . $error . '<br/>';
    echo 'errorString= ' . $errorString . '<br/>';

    if(!feof($apns))
        echo 'APNS NOT FINISHED <br/>';
    else
        echo 'APNS FINISHED? <br/>';    

    $result = fread($apns, 38);
    echo 'result= ' . $result;
    fclose($apns);
}
Run Code Online (Sandbox Code Playgroud)

我注意到,如果我删除行:

$result = fread($apns, 38);
echo 'result= ' . $result;
Run Code Online (Sandbox Code Playgroud)

然后该功能正常工作.因此,在nuthsell中,我能够打开与生产和开发人员的反馈服务的连接,但是一旦我尝试从服务器获取任何数据,我的脚本就会超时...

此函数keyForApp($appBundle,$useDev)只是对我的数据库的查询的简单包装,它获取正确的证书.我保证它有效,因为我在将消息推送到设备时也使用它.

Too*_*ism 6

解决了..事实证明我有错误的端口.澄清 :

  1. 端口2195用于推送消息
  2. 端口2196用于获取反馈

我的坏..;)我将两者混合在一起,并连接到端口2195上的反馈服务器而不是2196