2010-10-08 9 views
5

Ich versuche so Push-Benachrichtigungen zu meinem iPhone (APNS) senden. Ich lese das post und versuche, es zu implementieren. Also alle meine Zertifikate sind gut (normalerweise).Apple Push Notification Service mit PHP-Skript

Jetzt habe ich dieses PHP-Skript:

$device = '4f30e047 c8c05db9 3fa87e7d ca5325f7 738cb2c0 0b4a02d4 d4329a42 a7128173'; // My iphone deviceToken 
$payload['aps'] = array('alert' => 'This is the alert text', 'badge' => 1, 'sound' => 'default'); 
$payload['server'] = array('serverId' => $serverId, 'name' => $name); 
$output = json_encode($payload); 

$apnsCert = 'apple_push_notification_production.pem'; 

$streamContext = stream_context_create(); 
stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert); 

$apns = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $error, $errorString, 2, STREAM_CLIENT_CONNECT, $streamContext); 

$apnsMessage = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $device)) . chr(0) . chr(strlen($payload)) . $payload; 
fwrite($apns, $apnsMessage); 

//socket_close($apns); seems to be wrong here ... 
fclose($apns);

Als ich das Skript nichts passieren laufen. kein Fehler nur eine leere Seite, aber mein iPhone erhält keine Push-Benachrichtigung ...

Haben Sie eine Idee?

Vielen Dank!

Antwort

6

keinen Platz im Gerät Token, strippen sie

3

Streifen die Räume von Token und selbst dann ist es nicht funktioniert dann

$apnsHost = 'gateway.sandbox.push.apple.com'; 

Entfernen „Sandbox“ von dieser URL und es laufen soll.

2

Wenn Sie mehr als ein Gerät haben und sie durchlaufen, habe ich festgestellt, dass Sie für jedes fwrite ein neues stream_context_create erstellen müssen, um zu verhindern, dass Apple die Verbindung für ein schlechtes Token schließt.

FYI

4

Für die Entwicklung Zertifikat benötigen Sie url

'ssl://gateway.sandbox.push.apple.com:2195'
aber für die Produktion
'ssl://gateway.push.apple.com:2195'

1

Benachrichtigungen Erfolg zu verschicken voll haben Sie 1 weitere Sache zu tun.

Ersetzen $ output = json_encode ($ payload);

bis $ payload = json_encode ($ payload);

-1

Sie vermissen den privaten Schlüssel des Zertifikats. Fügen Sie diese Zeile hinzu: stream_context_set_option ($ streamContext, 'ssl', 'Passphrase', $ certificatePrivateKey);

Verwandte Themen