didReceiveRemoteNotification no se invocó

Estoy creando una aplicación en iOS / Android. Cuando se recibe una notificación remota en el dispositivo, didReceiveRemoteNotification debería recibir una llamada. Pero no está sucediendo El código secundario de mi server para enviar msg a través de APNS es el siguiente:

 $deviceToken = $obj_listener->ref_id; // Put your private key's passphrase here: $passphrase = 'blahblah'; $ctx = stream_context_create(); stream_context_set_option($ctx, 'ssl', 'local_cert', '/var/www/mobileapp/TestAppCK.pem'); stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase); // Open a connection to the APNS server $fp = stream_socket_client( 'ssl://gateway.sandbox.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); if (!$fp){ $this->log->debug("Failed to connect: $err $errstr" . PHP_EOL); exit("Failed to connect: $err $errstr" . PHP_EOL); } $badge_count = $obj_listener->badge_count + 1; // Create the payload body $body['aps'] = array( //'alert' => 'Message received', 'sound' => 'default', 'badge' => $badge_count, 'msg_id' => $this->msg_id, //'user_key' => $obj_listener->ref_id, 'email' => $obj_listener->to_email_id ); // Encode the payload as JSON $payload = json_encode($body); // Build the binary notification $msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload; // Send it to the server $result = fwrite($fp, $msg, strlen($msg)); // Close the connection to the server fclose($fp); 

Mi código lateral de objective c es como sigue:

 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{ //UIWebView *NewWebView = NULL; NSLog(@"didReceiveRemoteNotification function"); return; } 

He comprobado el token del dispositivo en el código del lado del server. Es correcto para el dispositivo. ¿Por qué no se llama a la function anterior? Gracias por adelantado.

Si no se registra para las notifications en el inicio de su aplicación, nunca se recibirán.

  [[UIApplication shanetworkingApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge |UIRemoteNotificationTypeSound)]; 

Ahora, sobre el lado del server, sugiero que ejecute su código en el modo de debugging y vea si la puerta de enlace de Apple se está accediendo correctamente a través de SSL. Un simple mal certificate o la falta de él puede llevarte días de trabajo. Experiencia personal.

Si la aplicación no está en segundo plano, debe usar el siguiente código

  //-------------- check notification when app is come to foreground after apllication get terminated ----------------// UILocalNotification *localNotif = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; if (localNotif) { [self handleRemotNotification:[launchOptions valueForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"]]; // private method }