5

Sto creando app in iOS/Android. Quando viene ricevuta una notifica remota nel dispositivo, è necessario chiamare didReceiveRemoteNotification. Ma non sta succedendo. Il mio codice lato server per l'invio msg attraverso APNS è come sotto:didReceiveRemoteNotification non invocato

$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); 

Il mio obiettivo-c codice lato è come sotto:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{ 

    //UIWebView *NewWebView = NULL; 
    NSLog(@"didReceiveRemoteNotification function"); 

    return; 
} 

Ho controllato per il token dispositivo nel codice lato server. È corretto per il dispositivo. Perché la funzione sopra descritta non viene chiamata. Grazie in anticipo.

+1

Verificare le impostazioni dell'iPhone, se la notifica push è attivata per l'applicazione –

+0

Inoltre, assicurarsi di utilizzare il profilo di provisioning corretto (collegato al certificato che si sarebbe utilizzato nel codice del server.) –

+0

non è in tutti raggiungono il dispositivo. – clint

risposta

0

se l'applicazione non è in background è necessario utilizzare codice seguente

//-------------- 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 


} 
1

Se non si registra per le notifiche presso il vostro inizio app, non potranno mai essere ricevuti.

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

Ora, circa il vostro lato server, vi suggerisco di eseguire il codice in modalità debug e vedere se il gateway di Apple viene adeguatamente raggiunta tramite SSL. Un semplice cattivo certificato o la mancanza di esso può portarti via giorni di lavoro. Esperienza personale.

Problemi correlati