notificaciones mensaje enviar desde con php ssl notifications push

mensaje - notificaciones push android php firebase



¿Cómo enviar notificaciones push de iOS usando TLS y PHP? (3)

Mi aplicación todavía está en desarrollo y utilicé este tutorial para enviar Notificaciones Push de iOS usando PHP y SSL.

http://www.raywenderlich.com/32960/apple-push-notification-services-in-ios-6-tutorial-part-1

Funcionaba, pero se depreció recientemente porque Apple decidió recientemente suspender el SSL afectando inmediatamente a todas las aplicaciones en desarrollo y las aplicaciones en producción tienen hasta el 29 de octubre para cambiar su código.

Me gustaría saber cómo hacer lo mismo con TLS en lugar de SSL.

Aquí está mi php que solía funcionar:

$ctx = stream_context_create(); stream_context_set_option($ctx, ''ssl'', ''local_cert'', ''ck.pem''); stream_context_set_option($ctx, ''ssl'', ''passphrase'', $passphrase); $fp = stream_socket_client(''ssl://gateway.sandbox.push.apple.com:2195'', $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);

Traté de agregar un certificado de Encomienda como Apple sugiere:

$ctx = stream_context_create(); stream_context_set_option($ctx, ''tls'', ''local_cert'', ''ck.pem''); stream_context_set_option($ctx, ''tls'', ''passphrase'', $passphrase); stream_context_set_option($ctx, ''tls'', ''cafile'', ''entrust_2048_ca.cer''); $fp = stream_socket_client(''tls://gateway.sandbox.push.apple.com:2195'', $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);

Pero todavía no funciona. ¿Tienes alguna sugerencia para solucionarlo?


$ctx = stream_context_create(); stream_context_set_option($ctx, ''ssl'', ''local_cert'', ''ck.pem''); stream_context_set_option($ctx, ''ssl'', ''passphrase'', $passphrase); stream_context_set_option($ctx, ''ssl'', ''cafile'', ''entrust_2048_ca.cer''); $fp = stream_socket_client(''tls://gateway.sandbox.push.apple.com:2195'', $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);

si trabaja en un entorno de host local, no olvide descargar el archivo de certificación entrust_2048_ca.cer


<?php $message = ''aa_'' . rand(10000,99999); $deviceToken = array( ''xxxxxx'' ); $ctx = stream_context_create(); stream_context_set_option($ctx, ''ssl'', ''passphrase'', ''111111''); stream_context_set_option($ctx, "ssl", "local_cert", ''./apns.pem''); $fp = NULL; $errno = NULL; $errstr = NULL; $fp = stream_socket_client("tls://gateway.sandbox.push.apple.com:2195", $errno, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); if($fp === FALSE){ exit(''error message''); } $content = array("aps" => array("alert" => $message, "badge" => 4, "sound" => ''default'', "code" => 200)); $data = json_encode($content); foreach ($deviceToken as $token) { $msg = chr(0) . pack("n", 32) . pack("H*", $token) . pack("n", strlen($data)) . $data; fwrite($fp, $msg); fflush($fp); } fclose($fp);


Aquí hay algunos consejos que pueden ayudarle a descubrir:

  1. Vaya a entrust.net/downloads/root_request.cfm y descargue entrust_2048_ca.cer

  2. Agregue el siguiente código: stream_context_set_option ($ ctx, ''ssl'', ''cafile'', ''entrust_2048_ca.cer'');

  3. Asegúrese de que la ruta sea correcta: ''../folder/file/ck.pem''?

  4. Cambie y pruebe los enlaces sandbox y live ssl.

  5. Cambie el desarrollador y la producción de pem y pruebe ambos.