Служба обратной связи Apple Push-уведомлений с PHP - ошибки сокетов

Я выполнил этот вопрос для использования службы обратной связи APNS. Вот мой код для запроса серверов обратной связи;

function send_feedback_request() {
    //connect to the APNS feedback servers
    //make sure you're using the right dev/production server & cert combo!
    $stream_context = stream_context_create();
    stream_context_set_option($stream_context, 'ssl', 'local_cert', 'my_production_cerficate.pem');
    $apns = stream_socket_client('ssl://feedback.push.apple.com:2196', $errcode, $errstr, 60, STREAM_CLIENT_CONNECT, $stream_context);
    if(!$apns) {
        die("ERROR $errcode: $errstr\n");
    }


    $feedback_tokens = array();
    //and read the data on the connection:
    while(!feof($apns)) {
        $data = fread($apns, 38);
        if(strlen($data)) {
            $feedback_tokens[] = unpack("N1timestamp/n1length/H*devtoken", $data);
        }
    }
    fclose($apns);
    return $feedback_tokens;
}

Когда я использую эту функцию, она сообщает о следующих ошибках;

Warning: stream_socket_client() [function.stream-socket-client]: Unable to set private key file /my_directories/my_production_cerficate.pem in /my_directories/apnsfeedback.php on line 7

Warning: stream_socket_client() [function.stream-socket-client]: failed to create an SSL handle in /my_directories/apnsfeedback.php on line 7

Warning: stream_socket_client() [function.stream-socket-client]: Failed to enable crypto in /my_directories/apnsfeedback.php on line 7

Warning: stream_socket_client() [function.stream-socket-client]: unable to connect to ssl://feedback.push.apple.com:2196 (Unknown error) in /my_directories/apnsfeedback.php on line 7

Я использую свой производственный сертификат (.pem), который я использую для отправки сообщений push-уведомлений, и он действителен + работает. Значит, проблема не в недействительном сертификате. Что я здесь делаю не так?


person Bartu    schedule 08.04.2013    source источник
comment
У вас есть комбинация сертификата + ключа в этом файле? У вас такие разрешения, что веб-сервер может читать файл? Защищен ли ключ парольной фразой? И т. Д. И т. Д.   -  person Colin M    schedule 08.04.2013
comment
Я отправляю push-уведомления через этот сертификат в том же каталоге, что и сценарий push.php. Так что да, у него есть сертификат + ключ. Обычный pem-файл, используемый для push-сообщений. Он защищен ключом, но я не могу установить ключ, так как возникает другая ошибка, говорящая, что кодовая фраза не может быть установлена ​​... Должен ли я использовать другой сертификат, чем мой обычный сертификат push-уведомлений?   -  person Bartu    schedule 08.04.2013


Ответы (1)


После долгого раздражения я наконец понял, в чем проблема для меня. Наш сертификат отлично подходил для отправки сообщений, но мне пришлось создать сертификат без шифрования или парольной фразы, чтобы он работал с обратной связью.

openssl rsa -in apns-dev-key.pem -out apns-dev-key-noenc.pem

Это была ступенька, которую мы не использовали на нашем компьютере для отправки толчков. После его использования обратная связь, похоже, в порядке, но она возвращает только 3 токена, хотя я считаю, что у нас должно быть больше.

person naphier    schedule 25.02.2014
comment
Эта служба сообщает об удаленных устройствах только один раз. Что немного опасно, поскольку, если вы не обрабатываете обратную связь в момент ее получения, вы пропустите ее навсегда. Я действительно хочу, чтобы у Apple был второй api обратной связи, который возвращает все удаленные устройства. - person Bartu; 25.02.2014
comment
Это или, по крайней мере, пробный запуск, такой как GCM. К счастью, мы планируем довольно часто подталкивать наших пользователей к тому, чтобы сообщать им о новостях. Это позволит нам определить, какие токены тоже плохие. Я должен сказать, что настройка APNS очень недружелюбна. - person naphier; 04.03.2014