Enfrentando problemas en ios push code de notifications php

Yo uso este código en php

function pushnotificationios( $deviceToken, $message, $badges){ $passphrase = "12345"; $ctx = stream_context_create(); stream_context_set_option($ctx, 'ssl', 'local_cert', $_SERVER['DOCUMENT_ROOT'].'/include/ck.pem'); stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase); $fp = stream_socket_client( "ssl://gateway.push.apple.com:2195", $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); $body['aps'] = array( //'badge' => $badges, 'badge' => "+1", 'alert' => $message['message'], 'sound' => 'default', 'content-available' => '1' ); $body['msg'] =$message; $payload = json_encode($body); $msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload; $result = fwrite($fp, $msg, strlen($msg)); //echo "<pre>"; print_r($result); fclose($fp); return $result; } 

El file .pem y su contraseña son correctos. pero cuando presiono esta function, solo en el modo de producción me da retorno falso;

 $result = pushnotificationios( $deviceToken, $message, $badges); echo "<pre>"; print_r($result); 

Y toma demasiado time para responder.

Actualmente no encuentro ninguna solución … mi API va a Apple y mis notifications no funcionan. Lo interesante es que es una aplicación chating y toda la aplicación se basa en notifications. Es un mal día para mí.

Por favor, ayuda si algo me pasa bien para la aplicación.

Producción:

ssl: //gateway.push.apple.com: 2195

.

Desarrollo:

ssl: //gateway.sandbox.push.apple.com: 2195

En mi aplicación Estoy recibiendo directamente deviceToken que está en NSData

 - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { NSString *deviceTokenString = [NSString stringWithFormat:@"%@", deviceToken]; // this is producing something like: // <xxxxxxx 9b0f527f xxxxxxxx 2727ed28 xxxxxxxx 4e693a61 xxxxxxx ac2f7dbb> // // and i am directly saving that to my servers database 

Esto es lo que tengo en mi server.

 $from_database = "<xxxxxxx 9b0f527f xxxxxxxx 2727ed28 xxxxxxxx 4e693a61 xxxxxxx ac2f7dbb>"; // this removes the '<' and '>' to make the device token valid // $token_string = substr($from_database, 1, -1); $token_array[] = $token_string; // you can also add multiple 'token_string' to the 'token_array' for push notification broadcasting, i am currently doing that and it is working properly. ... public function __push_notification($message_input, $token_array) { $message = stripslashes($message_input); $passphrase = 'xxxxxx'; $cert = realpath('xxx.pem'); $payload = '{ "aps" : { "alert" : "'.$message.'", "badge" : 1, "sound" : "bingbong.aiff" } }'; $ctx = stream_context_create(); stream_context_set_option($ctx, 'ssl', 'local_cert', $cert); 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); if (!$fp) { // echo "Failed to connect $err $errstr <br>"; return; } else // echo "Post notification sent<br>"; $dev_array = array(); $dev_array = $token_array; foreach ($dev_array as $device_token) { $msg = chr(0) . pack("n", 32) . pack('H*', str_replace(' ', '', $device_token)) . pack("n", strlen($payload)) . $payload; // echo "sending message :" . $payload . "n"; fwrite($fp, $msg); } fclose($fp); } 

Si todavía no puede enviar notifications, verifique esta Solución de problemas de notifications automáticas

Editar

He estado mirando su empuje de notificación push, hace un time, luego he notado que su 'badge' => "+1" No puede boost la insignia de esa manera.

La única opción es administrarla en su aplicación y usar la database para seguir el rastro.

y tal vez esté causando el problema … y la badge debe ser un Número, aquí: Tabla 3-1

Y también verifique que esta discusión también lo pueda ayudar.

En el modo de producción, no use la url del entorno limitado

  $fp = stream_socket_client( "ssl://gateway.push.apple.com:2195", $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); 

Sí … finalmente obtuve la solución.

El problema es el puerto. Estoy usando el server Bluehost. Bluehost bloquea el puerto que se utiliza mediante notifications push. Ahora cambié mi server y las notifications funcionaron para mí … Gracias, todos los meses.