2015-03-11 9 views
17

Mam problemy z użyciem APN z PHP i otrzymuję następujący komunikat:APNS + PHP "stream_socket_client(): Nie udało się włączyć crypto"

stream_socket_client(): Failed to enable crypto 

Problem występuje tylko czasami, a innym razem byłoby faktycznie wysłać push.

Ponieważ mam skrypt testowy na pętli 10 iteracjach, chciałbym czasami to:

stream_socket_client(): SSL: Connection reset by peer 

jestem testowania przy użyciu serwera sandbox tls://gateway.sandbox.push.apple.com:2195

Oto, co starałem:

  • Próbowałem ponownie wystawić PEM i wszystkie certyfikaty.
  • Grałem z protokołem żądania sslv3:// i tls://.
  • Grałem z hasłem (push pracował bez podania hasła)
  • Próbowałem przeszukać stackoverflow dla rozwiązania i nic nie działało.
  • Sprawdzone uprawnienia do plików PEM 644
  • Sprawdzone katalogi macierzyste PEM uprawnienia 755

Wydaje się, że wszystkie rozwiązania znalazłem na Google, a więc są osoby mające problem pchanie całkowicie.

Czuję, że usługa może być ograniczona pod względem stawki? Ponieważ odczekałem chwilę (około 15 minut), a następnie spróbowaliśmy ponownie i udało nam się przesłać około 100 wiadomości, dopóki nie zacząłem otrzymywać tej wiadomości ponownie.

+0

Znalazłeś rozwiązanie, Samer? Moja sytuacja wygląda tak jak twoja! Właściwie udało mi się czasami wysłać apeny, ale ostatnio zdałem sobie sprawę, że mój skrypt spędził miesiące próbując wysyłać apsy jeden po drugim, nawet po wygaśnięciu mojego certyfikatu ... Pytam się, czy Apple właśnie zablokowało mój adres IP, a może teraz Przestałem próbować się połączyć, odblokuję mój IP po pewnym czasie ... – Heitor

+0

Nieważne, sprawdź moją odpowiedź na temat zmiany serwerów Apple !! Teraz używam ssl: //api.push.apple.com: 443 zamiast ssl: //gateway.push.apple.com: 2195 – Heitor

Odpowiedz

14

Usługa usługi sandbox jest ograniczona szybkością. Sam doświadczyłem tego podczas testów, ale nigdy nie spotkałem się z takim limitem za pomocą API produkcyjnego.

Możesz także uderzać w ich inne zabezpieczenia.

Czy otwierasz połączenie, wysyłasz wiadomość, zamykasz połączenie, a następnie zapętlasz i robisz to od nowa?

Dzięki temu powiadomienia zostaną usunięte. Apple chce, abyś wysyłał kilka powiadomień push, używając tego samego połączenia, a nie nowego za każdym razem.

Best Practices for Managing Connections

You may establish multiple connections to the same gateway or to multiple gateway instances. If you need to send a large number of remote notifications, spread them out over connections to several different gateways. This improves performance compared to using a single connection: it lets you send the remote notifications faster, and it lets APNs deliver them faster.

Keep your connections with APNs open across multiple notifications; don’t repeatedly open and close connections. APNs treats rapid connection and disconnection as a denial-of-service attack. You should leave a connection open unless you know it will be idle for an extended period of time—for example, if you only send notifications to your users once a day it is ok to use a new connection each day.

od Apple Docs @https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/CommunicatingWIthAPS.html

+0

To ma sens, zazwyczaj utrzymuję połączenie otwarte aż do wysłania na wszystkie urządzenia, więc powinno być dobrze w tej części. Miejmy nadzieję, że produkcja jest dobra. Dzięki! – Samer

+0

lol przepraszam, nie wiedziałem, że musiałem nacisnąć przycisk nagrody, aby go nagrodzić. Myślałem, że to było automatyczne. – Samer

+0

Jak powiedziano w odpowiedzi @greg_diesel, "Apple chce, abyś wysłał kilka powiadomień push przy użyciu tego samego połączenia, a nie nowego za każdym razem". Wiele bibliotek używa adresu stream_socket_client do wysyłania wiadomości z opcją STREAM_CLIENT_CONNECT. Spróbuj zmienić ją na STREAM_CLIENT_PERSISTENT –

5

Moje kodu PHP został generowanie następujący błąd:

PHP Warning: stream_socket_client(): Failed to enable crypto in /private/tmp/t.php on line 12 
PHP Warning: stream_socket_client(): unable to connect to ssl://gateway.sandbox.push.apple.com:2195 (Unknown error) in /private/tmp/t.php on line 12 
PHP Warning: fclose() expects parameter 1 to be resource, boolean given in /private/tmp/t.php on line 24 

Problem polegał na tym, psiakrew certyfikat wygasł przedwczoraj! :-) Uwierzysz w to?

Potrzebuję odtworzyć mój plik PEM.

1

Nie ma potrzeby odtworzyć plik PEM

że błąd ma miejsce podczas korzystania błędny hasło

pozdrowienia Emiliano

0

miałem tego problemu. Zniknął po przyznaniu prawa zapisu dla "wszystkich" dla pliku .pem.

0

Mam ten problem, ponieważ głupio zapomniałem dołączyć rozszerzenie pliku (.pem) podczas dostarczania ścieżki pliku dla local_cert.

0

kilka czeków:

  1. urządzenie znak powinien być - z obecnie spaces iz zewnątrz < lub >
  2. upewnić się, że ścieżka jest poprawna i certyfikat wygasł termin niego.
  3. upewnij się, że hasło używasz jest jeden u wykorzystywane do certyfikatowi
0

w moim przypadku problem był z moim Mac (OSX Sierra). Przesłałem php i cert na mój serwer, uruchomiłem go i otrzymałem powiadomienie.

Powiązane problemy