ich auf einem iOS-App bin arbeiten, die iOS Push-Benachrichtigungen verwenden. Ich möchte die Benachrichtigung von einem PHP-Skript auf meinem Server senden. Der Code in meiner App funktioniert wirklich gut für die Registrierung für die Remote-Benachrichtigung und erhalten sie. Ich benutze diese PHP-Skript-Benachrichtigung zu senden und es funktioniert zu gut:senden iOS Push-Benachrichtigung von PHP
<?php
// My device token here (without spaces):
$deviceToken = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
// My private key's passphrase here:
$passphrase = 'myPrivateKey';
// My alert message here:
$message = 'New Push Notification!';
//badge
$badge = 1;
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.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)
exit("Failed to connect: $err $errstr" . PHP_EOL);
echo 'Connected to APNS' . PHP_EOL;
// Create the payload body
$body['aps'] = array(
'alert' => $message,
'badge' => $badge,
'sound' => 'newMessage.wav'
);
// 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));
if (!$result)
echo 'Error, notification not sent' . PHP_EOL;
else
echo 'notification sent!' . PHP_EOL;
// Close the connection to the server
fclose($fp);
Mein Problem ist, dass, wenn ich dieses Skript auf meinem imac von Terminal läuft, funktioniert alles gut und Benachrichtigungen gesendet werden, aber wenn ich es lade auf Mein Server funktioniert nicht. Mein Zertifikat ist gültig und befindet sich im selben Ordner des Skripts. Wenn ich versuche, das Skript auf dem Server ausgeführt werden, füge ich diese Zeile die Zertifikatsdatei zu schließen und den Variable $ cerificate verwenden:
Dies ist der Fehler der PHP-Server-Seite:
Warning: stream_socket_client() [function.stream-socket-client]: unable to connect to ssl://gateway.sandbox.push.apple.com:2195 (Connection timed out) in script.php on line 29
Failed to connect: 110 Connection timed out
Warum passiert das? Muss ich etwas auf meinem Server hinzufügen, um die PAN-Verbindung zu aktivieren?
----- UPDATE FRAGE -----
Mein erstes Problem war, dass ich nicht über die Privilegien Verbindung auf Port 2195 senden und Antwort auf Port empfangen 2196. Nun, mein Server-Admin ermöglicht diese Verbindung, und ich habe verschiedene Fehler:
Warning: stream_socket_client() [function.stream-socket-client]: SSL operation failed with code 1. OpenSSL Error messages: error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure in script.php on line 28
Warning: stream_socket_client() [function.stream-socket-client]: Failed to enable crypto in script.php on line 28
Warning: stream_socket_client() [function.stream-socket-client]: unable to connect to ssl://gateway.sandbox.push.apple.com:2195 (Unknown error) in script.php on line 28
Es konnte keine Verbindung: 0
können Sie eine Telnet-Verbindung von Ihrem Server APNS Server machen (von Server-Konsole)? –
Irgendein Zeitserver lässt nicht zu, dass Sie Port verwenden, der erforderlich ist ... fragen Sie besser Ihren Serveradministrator und bestätigen Sie, wenn Sie Privilegien erhielten ... benutzen Sie shared hosting ...? Dies geschieht in Shared Hosting ... –
Ja, ich benutze Shared Hosting und ich habe nur auf meinem Server admin schreiben. @rokjarc leid, aber ich bin nicht in der Lage eine Telnet-Verbindung zu testen, weil nicht wissen, wie kann ich das tun, sorry, aber ich bin ein neuer Programmierer :( – lubilis