PHP-скрипт для службы Apple Push Notification FEEDBACK получает TIMEOUT каждый раз, - PullRequest
5 голосов
/ 23 января 2011

Приветствую всех!В настоящее время я внедряю сервис обратной связи для уведомлений Apple.У меня есть завершающая часть, и я работаю как с песочницей, так и с дистрибутивными приложениями.Однако служба обратной связи, кажется, не работает .. Каждый раз, когда я пытаюсь использовать свою функцию ... страница хорошо ... просто получает тайм-аут.

Я последовал этому ответу, чтобы выполнить свою функцию: Техника 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);
}

Я заметил, что если я уберу строки:

$result = fread($apns, 38);
echo 'result= ' . $result;

Функция будет работать правильно.Таким образом, я могу открыть соединение со службой обратной связи, как для производства, так и для разработчика, но как только я пытаюсь получить какие-либо данные с сервера, мой сценарий просто отключается ..

также функция keyForApp($appBundle,$useDev) это просто оболочка для запроса к моей базе данных, который выбирает правильный сертификат.Я гарантирую, что он работает, так как я также использую его при отправке сообщений на устройство.

1 Ответ

6 голосов
/ 24 января 2011

Решено .. Оказывается, у меня был неправильный порт.Для уточнения:

  1. порт 2195 предназначен для отправки сообщений
  2. порт 2196 предназначен для получения обратной связи

мой плохой ..;) Я смешал их вместе и подключался к серверу обратной связи через порт 2195 вместо 2196

...