Я пытаюсь реализовать уведомление Apple Push, используя php-код. Вот мой код
$deviceToken = 'My device token'; $passphrase = ''; $message = 'My first push notification!'; //////////////////////////////////////////////////////////////////////////////// $ctx = stream_context_create(); stream_context_set_option($ctx, 'ssl', 'local_cert', 'apns-dev-cert.pem'); stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase); $fp = stream_socket_client( 'ssl://gateway.sandbox.push.apple.com:2195', $err, $errstr, 120, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); if (!$fp) exit("Failed to connect: $err $errstr" . PHP_EOL); echo 'Connected to APNS' . PHP_EOL; $body['aps'] = array( 'alert' => $message, 'sound' => 'default' ); $payload = json_encode($body); $msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload; $result = fwrite($fp, $msg, strlen($msg)); if (!$result) echo 'Message not delivered' . PHP_EOL; else echo 'Message successfully delivered' . PHP_EOL; fclose($fp);
Файл сертификата .pem находится в том же каталоге, что и файл. Этот код работает нормально на моей локальной машине. Я использую MAMP. Я получаю уведомление на своих устройствах.
Но когда я пытаюсь на сервере, он не работает и не дает ошибку.
Предупреждение: stream_socket_client () [function.stream-socket-client]: невозможно подключиться к ssl: //gateway.sandbox.push.apple.com: 2195 (соединение отклонено) в / home / nextgen / public_html / ApplicationGenerator / sessionportal / iosapp / SimplePush / simplepush.php в строке 14 Не удалось подключиться: 111 Соединение отклонено
Если файл сертификата неверен, как он будет работать на моем локальном сервере?
Я не получаю от этого никакого выхода. Можете ли вы, ребята, помочь мне?
Предполагая, что ваш сервер имеет правильные порты, «Connection Refused» обычно указывает на недопустимый .PEM-файл или неверную кодовую фразу. Убедитесь, что при открытии файла .PEM заголовок выглядит примерно так:
Bag Attributes friendlyName: Apple Development IOS Push Services: com.yourapp.app localKeyID: A8 77 BC 0C 2E 81 10 6E 78 9F XX XX XX XX XX XX
subject = / UID = com.yourapp.app / CN = Apple Development IOS Push Services: com.yourapp.app/C=FR issuer = / C = US / O = Apple Inc./OU=Apple Всемирные отношения разработчиков / CN = Сертификационный центр по связям с общественностью Apple Worldwide
за которым следует ключ, за которым должен следовать заголовок, который выглядит так для вашего закрытого ключа:
Bag Attributes friendlyName: Joe Black localKeyID: A8 77 BC 0C 2E 81 10 6E 78 9F XX XX XX XX XX XX XX XX Key Attributes: <No Attributes>
Я предлагаю вам также удалить кодовую фразу, чтобы уменьшить потенциальные источники ошибок.