Я схожу с ума от Apple push-уведомлений!
Я разработал свое приложение и тестовые уведомления, следуя инструкции Ray Wanderlich , и все работало нормально, пока я не изменил файл .pem с дистрибутивом и не изменил строку подключения с gateway.sandbox.push-apple.com на gateway.push-apple.com.
Теперь, если я пытаюсь отправить сообщение, сервер возвращает
Warning: stream_socket_client() [function.stream-socket-client]: unable to connect to ssl://gateway.push.apple.com:2195 (Connection timed out)
Failed to connect: 110 Connection timed out
Файл php и файл .pem находятся на TMDHosting: я пытаюсь спросить их, закрыт ли номер порта 2195, потому что поиск в Google обнаружил, что ошибка означает, что порт закрыт.
Хотя я не могу понять, связана ли ошибка с сертификатом или с сервером.
Странно то, что если я следую процедуре с Терминалом, чтобы проверить файл .pem, кажется, что все работает
CONNECTED(00000003)
depth=1 /C=US/O=Entrust, Inc./OU=www.entrust.net/rpa is incorporated by reference/OU=(c) 2009 Entrust, Inc./CN=Entrust Certification Authority - L1C
verify error:num=20:unable to get local issuer certificate
verify return:0
---
Certificate chain
0 s:/C=US/ST=California/L=Cupertino/O=Apple Inc/OU=Internet Services/CN=gateway.push.apple.com
i:/C=US/O=Entrust, Inc./OU=www.entrust.net/rpa is incorporated by reference/OU=(c) 2009 Entrust, Inc./CN=Entrust Certification Authority - L1C
1 s:/C=US/O=Entrust, Inc./OU=www.entrust.net/rpa is incorporated by reference/OU=(c) 2009 Entrust, Inc./CN=Entrust Certification Authority - L1C
i:/O=Entrust.net/OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/OU=(c) 1999 Entrust.net Limited/CN=Entrust.net Certification Authority (2048)
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIEXTCC..........
-----END CERTIFICATE-----
subject=/C=US/ST=California/L=Cupertino/O=Apple Inc/OU=Internet Services/CN=gateway.push.apple.com
issuer=/C=US/O=Entrust, Inc./OU=www.entrust.net/rpa is incorporated by reference/OU=(c) 2009 Entrust, Inc./CN=Entrust Certification Authority - L1C
---
No client certificate CA names sent
---
SSL handshake has read 2541 bytes and written 2039 bytes
---
New, TLSv1/SSLv3, Cipher is AES256-SHA
Server public key is 1024 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1
Cipher : AES256-SHA
Session-ID:
Session-ID-ctx:
Master-Key: CBA98981BB512ED2FDF0C003F4556FDDA564BEBBEFC6528C37D8E0336BC141AEC6D7E014568B334B8330FFFE266E8CB4
Key-Arg : None
Start Time: 1332945845
Timeout : 300 (sec)
Verify return code: 0 (ok)
---
Это позволяет мне думать, что это не проблема .pem ...
Я не прав?
Я уже прочитал все подобные вопросы здесь и пытался изменить номер порта с 2195 на 30, но ничего не изменилось.
Намеки?
РЕДАКТИРОВАТЬ : я обнаружил , что , и, кажется, соответствует моей проблеме: TMDHosting сказал мне
... вы находитесь в среде общего хостинга и открываете
Порт для вас будет невозможен. Однако обратите внимание, что адрес
который вы делаете подключение через порт 2195 не связан с
наш сервер. Другими словами, вы пытаетесь установить связь с
удаленный сервер на порт 2195. Для того, чтобы сделать это подключение к
указанный выше порт, убедитесь, что порт открыт для
входящие соединения на удаленном сервере, а не на сервере на
на который полагается ваш аккаунт у нас.
Нужен ли VPS?
EDIT2
В уроке, за которым я следовал, я нашел
.. вам понадобится сервер, подключенный к Интернету. От себя
уведомления всегда отправляются сервером. Для разработки вы можете использовать
ваш Mac в качестве сервера (что мы сделаем в этом руководстве), но для
производственное использование, вам нужно хотя бы что-то вроде VPS (Virtual
Частный сервер). Дешевый общий хостинг недостаточно хорош.
Вы должны быть в состоянии запустить фоновый процесс на сервере, установить
SSL-сертификат и возможность устанавливать исходящие TLS-соединения на
определенные порты. Большинство провайдеров виртуального хостинга не позволяют вам сделать это,
хотя они могут, если вы спросите. Тем не менее, я действительно рекомендую использовать
VPS хост, такой как Linode.
Наконец-то я думаю, что мне нужен VPS. Вы можете подтвердить наверняка?
Но почему, если я отправляю push-уведомление с сервера песочницы, он работает правильно без VPS?
ПОСЛЕДНИЕ ОБНОВЛЕНИЯ : (надеюсь, кому-то помочь) похоже, что произошла ошибка, потому что правильно то, что я не могу отправить push-уведомление ни в песочницу, ни в производство сервер с моего хостинга (TMDHosting): мой общий хостинг не имеет открытого порта 2195. Сменил провайдера: все работает.