5

Ich erstelle App in iOS/Android. Wenn eine Remote-Benachrichtigung auf dem Gerät empfangen wird, sollte didReceiveRemoteNotification aufgerufen werden. Aber es passiert nicht. Mein Server-seitigen Code für msg durch APNS Senden wie unter:didReceiveRemoteNotification wird nicht aufgerufen

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

Mein Objective-C-Side-Code ist wie unter:

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

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

    return; 
} 

Ich habe für das Gerät Token auf dem serverseitigen Code überprüft. Es ist korrekt für das Gerät. Warum wird die obige Funktion nicht aufgerufen? Danke im Voraus.

+1

Überprüfen Sie Ihre iPhone-Einstellungen, wenn die Push-Benachrichtigung für Ihre Anwendung aktiviert ist –

+0

Stellen Sie außerdem sicher, dass Sie das richtige Bereitstellungsprofil verwenden (verknüpft mit dem Zertifikat, das Sie im Servercode verwendet hätten.) –

+0

ist es nicht alle erreichen das Gerät. – clint

Antwort

0

Wenn Anwendung nicht im Hintergrund ist, sollten Sie folgenden Code verwenden

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

Wenn Sie Benachrichtigungen an Ihre App Start nicht registrieren, werden sie nie empfangen werden.

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

nun über die Serverseite, schlage ich vor, Sie Ihren Code im Debug-Modus laufen und sehen, ob Apple-Gateway richtig durch SSL erreicht wird. Ein einfaches schlechtes Zertifikat oder das Fehlen davon kann Sie Tage der Arbeit wegnehmen. Persönliche Erfahrung.