2015-03-11 7 views
17

Ich habe Probleme mit APNS mit PHP und erhalte die folgende Meldung mit:APNS + PHP „stream_socket_client(): Fehler Krypto ermöglichen“

stream_socket_client(): Failed to enable crypto 

Das Problem tritt nur manchmal, und manchmal wäre es eigentlich schicke den Push.

Da ich das Testskript auf einer Schleife von 10 Iterationen habe, ich würde das manchmal erhalten:

stream_socket_client(): SSL: Connection reset by peer 

-I-Tests sind mit dem Sandbox-Server tls://gateway.sandbox.push.apple.com:2195

Hier ist, was ich versuchte:

  • Ich habe versucht, die PEM und alle Zertifikate damit erneut auszugeben.
  • Ich spielte mit dem Anforderungsprotokoll sslv3:// und tls:// herum.
  • Ich spielte mit dem Passwort (push ohne das Passwort arbeitete btw)
  • Ich habe versucht, Stackoverflow für eine Lösung und nichts funktionierte die Suche.
  • Checked pem Dateiberechtigungen 644
  • Checked pem geordnete Verzeichnisse Berechtigungen 755

Es scheint, dass alle Lösungen, die ich auf Google gefunden und damit die Menschen sind Problem zusammen drängen müssen.

Ich fühle mich wie der Service ist Rate begrenzt vielleicht? Weil wir eine Weile gewartet haben (etwa 15 Minuten) und es dann noch einmal probiert haben und 100 Nachrichten erfolgreich übertragen konnten, bis ich diese Nachricht wieder erhielt.

+0

Haben Sie eine Lösung dafür gefunden, Samer? Meine Situation sieht so wie deine aus! Nun, in der Tat war ich in der Lage, apns manchmal zu senden, aber in letzter Zeit merkte ich, dass mein Skript monatelang versuchte, einzelne Antworten zu senden, auch nachdem mein Zertifikat abgelaufen war ... Ich frage mich, ob Apple meine IP blockiert hat und vielleicht jetzt Ich habe aufgehört zu versuchen, sie zu verbinden, sie werden meine IP nach einer bestimmten Zeit auflösen ... – Heitor

+0

Nevermind, überprüfen Sie meine Antwort über das Ändern von Apple's Servern !! Jetzt benutze ich ssl: //api.push.apple.com: 443 statt ssl: //gateway.push.apple.com: 2195 – Heitor

Antwort

14

Der Sandbox Push-Dienst ist ratenbegrenzt. Ich habe dies selbst beim Testen erlebt, bin aber noch nie mit der Produktions-API auf solche Einschränkungen gestoßen.

Sie könnten auch ihre anderen Schutzmaßnahmen treffen.

Öffnen Sie eine Verbindung, senden Sie eine Nachricht, schließen Sie die Verbindung und führen Sie dann eine Schleife aus und machen Sie alles erneut?

Dadurch werden Ihre Benachrichtigungen gelöscht. Apple möchte, dass Sie mehrere Push-Benachrichtigungen über dieselbe Verbindung senden, nicht jedes Mal eine neue.

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.

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

+0

Das macht Sinn, ich halte normalerweise die Verbindung offen, bis sie an alle Geräte gesendet wird gut in diesem Teil. Hoffen wir, dass die Produktion gut ist. Vielen Dank! – Samer

+0

lol sorry wusste nicht, dass ich den Kopfgeldknopf drücken musste, um es zu vergeben. Ich dachte es wäre automatisch. – Samer

+0

Wie in @greg_diesel gesagt, "Apple möchte, dass Sie mehrere Push-Benachrichtigungen mit der gleichen Verbindung senden, nicht jedes Mal eine neue". Viele Bibliotheken verwenden stream_socket_client, um Nachrichten mit der Option STREAM_CLIENT_CONNECT zu senden. Versuchen Sie, es in STREAM_CLIENT_PERSISTENT zu ändern –

5

wurde Erzeugung Mein PHP-Code-Fehler folgt:

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 

Das Problem war, das verdammte Zertifikat, am Tag vor gestern abgelaufen! :-) Kannst du das glauben?

Also, ich muss meine PEM-Datei neu erstellen.

1

Es ist nicht notwendig, erstellen Sie Ihre pem-Datei

dass Fehler passiert, wenn Sie eine falsche Passphrase verwenden

Grüße Emiliano

0

ich dieses Problem hatte. Verschwunden nach dem Erteilen der Schreibberechtigung für "alle" für die .pem-Datei.

0

Ich habe dieses Problem, weil ich dummerweise die Dateierweiterung (.pem) nicht mit einberechnet, wenn Sie den Dateipfad für local_cert liefern.

0

wenig Kontrollen:

  1. Gerät Token sollte - mit aus spaces und mit aus < oder >
  2. sicherstellen, dass der Pfad des Zertifikats korrekt ist und abgelaufen Zeitpunkt davon.
  3. stellen Sie sicher, das Passwort, das Sie verwenden ist derjenige u verwendet Zertifikat
0

In meinem Fall zu machen, war das Problem mit meinem Mac (OSX Sierra). Ich habe php und cert auf meinen Server hochgeladen, ausgeführt und die Benachrichtigung wurde zugestellt.