2015-03-11 22 views
17

Ho problemi con l'utilizzo di APNS con PHP e ottenere il seguente messaggio:APNS + PHP "stream_socket_client(): Impossibile attivare Crypto"

stream_socket_client(): Failed to enable crypto 

il problema si verifica solo a volte, e altre volte sarebbe in realtà inviare la spinta.

Dal momento che ho lo script di test su un loop di 10 iterazioni, vorrei a volte ottenere questo:

stream_socket_client(): SSL: Connection reset by peer 

sto testando utilizzando il server sandbox tls://gateway.sandbox.push.apple.com:2195

Ecco quello che ho provato:

  • Ho provato a riemettere il PEM e tutti i certificati con esso.
  • Ho giocato con il protocollo di richiesta sslv3:// e tls://.
  • Ho giocato con la passphrase (push ha funzionato senza la passphrase btw)
  • Ho provato a cercare StackOverflow per una soluzione e non ha funzionato.
  • Controllato autorizzazioni file PEM 644
  • Controllato directory PEM genitore permessi 755

Sembra che tutte le soluzioni che ho trovato su Google e così sono persone che hanno problema di spingere del tutto.

Mi sembra che il servizio sia limitato? Perché abbiamo aspettato un po '(circa 15 minuti) e poi provato di nuovo, ed è stato in grado di spingere con successo circa 100 messaggi fino a quando ho iniziato a ricevere nuovamente quel messaggio.

+0

Hai trovato una soluzione per questo, Samer? La mia situazione assomiglia molto alla tua! Beh, in effetti sono stato in grado di inviare apns a volte, ma ultimamente ho realizzato che la mia sceneggiatura trascorreva mesi cercando di inviare apns uno alla volta anche dopo che il mio certificato è scaduto ... Mi chiedo se Apple abbia appena bloccato il mio IP e forse ora Ho smesso di provare a connetterti, sbloccherò il mio IP dopo un certo periodo di tempo ... – Heitor

+0

Nevermind, controlla la mia risposta sul cambiamento dei server di Apple !! Ora uso ssl: //api.push.apple.com: 443 invece di ssl: //gateway.push.apple.com: 2195 – Heitor

risposta

14

Il servizio push sandbox è a tariffa limitata. L'ho sperimentato personalmente durante il test ma non ho mai riscontrato alcun limite di questo tipo utilizzando l'API di produzione.

Si potrebbero anche colpire le altre protezioni.

Stai aprendo una connessione, inviando un messaggio, chiudendo la connessione e quindi eseguendo il ciclo e ricominciando tutto da capo?

Ciò farà perdere le notifiche. Apple vuole che tu invii più notifiche push utilizzando la stessa connessione, non una nuova ogni volta.

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.

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

+0

Questo ha senso, di solito mantengo la connessione aperta finché non viene inviato a tutti i dispositivi, quindi dovrebbe essere bene da quella parte. Speriamo che la produzione sia buona. Grazie! – Samer

+0

lol dispiace non sapevo che dovevo premere il pulsante della taglia per premiarlo. Pensavo fosse automatico. – Samer

+0

Come detto nella risposta @greg_diesel, "Apple vuole che tu invii più notifiche push usando la stessa connessione, non una nuova ogni volta". Molte librerie utilizzano stream_socket_client per inviare messaggi con l'opzione STREAM_CLIENT_CONNECT. Prova a cambiarlo in STREAM_CLIENT_PERSISTENT –

5

Il mio codice PHP stava generando seguente errore:

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 

Il problema era, il certificato accidenti, è scaduto l'altro ieri! :-) Puoi crederci?

Quindi, ho bisogno di ricreare il mio file PEM.

1

Non è necessario ricreare il file PEM

che errore si verifica quando si utilizza un passphrase corretta

riguarda Emiliano

0

ho avuto questo problema. Scomparso dopo aver dato il permesso di scrittura per "tutti" per il file .pem.

0

Ho questo problema perché ho stupidamente dimenticato di includere l'estensione del file (.pem) quando si fornisce il percorso del file per local_cert.

0

alcuni controlli:

  1. periferica token dovrebbe essere - con fuori spaces e con fuori < o >
  2. assicurarsi che il percorso del certificato è corretto e la data di esso scaduto.
  3. assicurarsi la passphrase che si sta utilizzando è quella u usati per fare certificato
0

Nel mio caso, il problema è stato con il mio Mac (OSX Sierra). Ho caricato php e cert sul mio server, l'ho eseguito e la notifica è stata consegnata.

Problemi correlati