向大家致以问候! 我目前正在实施Apples推送通知的反馈服务。我已经完成了推送部分,并且在沙盒和分发应用程序上都可以使用。然而,反馈服务似乎不起作用..每次我尝试使用我的功能..页面很好..只是得到超时。
我按照这个答案来完成我的功能:PHP technique to query the APNs Feedback Server
这是我的完整功能代码:
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);
}
我注意到如果我删除这些行:
$result = fread($apns, 38);
echo 'result= ' . $result;
然后该功能正常工作。因此,在nuthsell中,我能够打开与生产和开发人员的反馈服务的连接,但是一旦我尝试从服务器获取任何数据,我的脚本就会超时...
函数keyForApp($appBundle,$useDev)
也只是查询数据库的一个简单包装器,它可以获取正确的证书。我保证它有效,因为我也在将消息推送到设备时使用它。
答案 0 :(得分:6)
解决了..原来我的端口错了。 澄清:
我的不好..;)我将两者混合在一起并连接到端口2195上的反馈服务器而不是2196