Как использовать Apple Push-уведомления, если вы не можете использовать порт 2195?

Я разработал скрипт, используя stream_socket_client() и он работает на моем localhost, но когда я пытаюсь использовать его в интернете (с Fatcow.com веб-хостинг) это не сработает. Я получаю следующую ошибку:

предупреждение: функции stream_socket_client() [функция.stream-socket-client]: невозможно подключиться к ssl: / / gateway.песочница.толкай.яблоко.com: 2195 (Соединение отказано) в .../отправка уведомлений.в PHP on line 18 Не удалось подключиться 111 Соединение отказано

это строка 18:

$fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);

Я знаю, что пароль для .файл PEM является правильным. Возникает вопрос: если я не могу использовать этот порт, что мне делать? Есть ли какие-либо бесплатные услуги, которые я могу использовать? Я знаю, что порт 80 открыт.

Я слышал, что с помощью curl() функция будет работать, но пока безуспешно.

Я был бы очень признателен, если бы меня указали в правильном направлении.

5 ответов


для отправки уведомлений на устройство необходимо включить порт 2195 в брандмауэре. По соображениям безопасности некоторые организации отключают эти порты в брандмауэре. Порт 2196 используется для служб обратной связи, и этот порт также должен открываться в брандмауэре. Без открытия этих портов сообщения не могут доставляться в APNS.


Я считаю, следующее-Это то, что вы ищете

$url = 'https://gateway.sandbox.push.apple.com:2195';
$cert = 'AppCert.pem';

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json"));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_SSLCERT, $cert);
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, "passphrase");
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"device_tokens": ["458e5939b2xxxxxxxxxxx3"], "aps": {"alert": "test message one!"}}');

$curl_scraped_page = curl_exec($ch);

более подробную информацию можно найти здесь: Apple push-уведомление с завитком


попробуйте использовать порт 2196.

Я также столкнулся с подобной проблемой, даже с cURL вы столкнетесь с этой проблемой. Дважды проверьте у вашего хостинг-провайдера, открыт ли или заблокирован исходящий порт (2195,2196). Или попробуйте telnet ssl://gateway.sandbox.push.apple.com:2195
и проверить, какой ответ вы получите. Если порты открыты, вы будете подключены.


У меня была такая же проблема с моим текущим хостинг-провайдером. Вы можете переключиться на другого провайдера - или - Просто "купите" бюджетную лампу VPS (3 евро/месяц). И вы хорошо идти


в каждом общем хостинге они отключают порт 2195 для этого вы можете запросить, чтобы включить этот порт, но в большинстве компаний общего хостинга не включите этот порт, поэтому, если вы хотите сделать iOS push-уведомление, я рекомендовал вам использовать Virtual Private Server (VPS), и вы можете легко настроить iOS push-уведомление.