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.
Überprüfen Sie Ihre iPhone-Einstellungen, wenn die Push-Benachrichtigung für Ihre Anwendung aktiviert ist –
Stellen Sie außerdem sicher, dass Sie das richtige Bereitstellungsprofil verwenden (verknüpft mit dem Zertifikat, das Sie im Servercode verwendet hätten.) –
ist es nicht alle erreichen das Gerät. – clint