APNS + PHP "stream_socket_client (): Error al habilitar la cryptography"

Tengo problemas para usar APNS con PHP y obtengo el siguiente post:

stream_socket_client(): Failed to enable crypto 

El problema solo ocurre algunas veces, y otras veces enviará el impulso.

Como tengo el script de testing en un ciclo de 10 iteraciones, a veces obtengo esto:

 stream_socket_client(): SSL: Connection reset by peer 

Estoy probando usando el server sandbox tls://gateway.sandbox.push.apple.com:2195

Esto es lo que probé:

  • Traté de volver a emitir el PEM y todos los certificates con él.
  • sslv3:// alnetworkingedor con el protocolo de request sslv3:// y tls:// .
  • Jugué alnetworkingedor con la frase de contraseña (empuje trabajado sin la frase de contraseña por cierto)
  • Traté de search stackoverflow para una solución y nada funcionó.
  • Comprobado los permissions del file pem 644
  • Comprobado los permissions de los directorys padre pem 755

Parece que todas las soluciones que encontré en Google y SO son personas que tienen problemas para empujar por completo.

¿Siento que el service tiene una tarifa limitada? Porque esperamos un time (alnetworkingedor de 15 minutos) y luego lo intentamos de nuevo, y fue capaz de impulsar con éxito alnetworkingedor de 100 posts hasta que empecé a recibir ese post nuevamente.

El service push de sandbox tiene una tarifa limitada. Lo he experimentado yo mismo al probar, pero nunca he encontrado ningún límite de ese tipo con la API de producción.

También podría estar golpeando sus otras protecciones.

¿Estás abriendo una connection, enviando un post, cerrando la connection y luego haciendo un bucle y volviéndolo a hacer todo?

Eso hará que se le caigan las notifications. Apple quiere que envíes varias notifications push con la misma connection, no una nueva cada vez.

Mejores prácticas para administrar conexiones

Puede establecer varias conexiones a la misma puerta de enlace o a varias instancias de puerta de enlace. Si necesita enviar una gran cantidad de notifications remotas, sepárelas mediante conexiones a varias puertas de enlace diferentes. Esto mejora el performance en comparación con el uso de una sola connection: le permite enviar las notifications remotas más rápido, y permite que los APN los entreguen más rápido.

Mantenga sus conexiones con APN abiertas a través de múltiples notifications; no abra ni cierre las conexiones repetidamente. Los APN tratan la connection rápida y la desconnection como un ataque de denegación de service. Debe dejar abierta una connection a less que sepa que estará inactiva durante un período de time prolongado; por ejemplo, si envía notifications a sus usuarios una vez al día, puede usar una connection nueva todos los días.

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

Mi código PHP estaba generando el siguiente error:

 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 

¡El problema fue que el maldito certificate expiró anteayer! 🙂 ¿Puedes creer esto?

Entonces, necesito recrear mi file PEM.

No es necesario volver a crear tu file pem

ese error ocurre cuando usa un PassPhrase incorrecto

saludos Emiliano

Tuve este problema Desapareció después de dar permiso de escritura para 'todos' para el file .pem.

Tengo este problema porque olvidé tontamente include la extensión de file (.pem) al proporcionar la ruta del file para local_cert.

pocas comprobaciones :

  1. dispositivo token debe ser – sin spaces y sin < o >
  2. asegúrese de que la ruta del certificate sea correcta y la date de caducidad.
  3. asegúrese de que la frase de contraseña que está utilizando es la que usó para hacer el certificate

En mi caso, el problema fue con mi Mac (OSX Sierra). Subí php y cert a mi server, lo ejecuté y la notificación se entregó.