2016-03-22 2 views
2

Mein Push-Benachrichtigungsskript funktionierte, bis ich abgelaufene Zertifikate erneuert und eine neue apk hochladen. Ich habe alles überprüft, meine Zertifikate und Bestimmungen sind korrekt und der Push-Benachrichtigungsdienst ist aktiviert. Außerdem funktioniert es mit dem Entwicklungszertifikat in Sandbox.Kann keine Verbindung zu Apple Push Notify Server für die Produktion

Wenn ich Produktionszertifikat verwende, habe ich Fehler und nichts, was ich im Internet gefunden habe, hat nicht geholfen. Hier ist der Code:

<?php 

$deviceToken = '1b66005d6ee0e58eac581a29dce21c34083a3560d3a097b8224ce99412c7a5c5'; 
$message = 'test!'; 

$ctx = stream_context_create(); 
stream_context_set_option($ctx, 'ssl', 'cafile', 'apple_ca.pem'); // entrust ca certificate 
stream_context_set_option($ctx, 'ssl', 'local_cert', 'apn-dist.pem'); // my certificate 

// Open a connection to the APNS server 
$fp = stream_socket_client(
    'ssl://gateway.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; 
// sending notification ... 

Above Code Dumps dieser Fehler:

PHP Warning: stream_socket_client(): Failed to enable crypto in test.php on line 14 
PHP Warning: stream_socket_client(): unable to connect to ssl://gateway.push.apple.com:2195 (Unknown error) in test.php on line 14 
Failed to connect: 0 

Wenn ich mein Zertifikat testen wie folgt aus:

openssl s_client -connect gateway.push.apple.com:2195 -cert apn-dist.pem -debug -showcerts -CAfile apple_ca.pem 

Es ist erfolgreich:

New, TLSv1/SSLv3, Cipher is AES256-SHA 
Server public key is 2048 bit 
Secure Renegotiation IS supported 
Compression: NONE 
Expansion: NONE 
SSL-Session: 
    Protocol : TLSv1 
    Cipher : AES256-SHA 
    Session-ID: 
    Session-ID-ctx: 
    Master-Key: 5E9F3C0A551D6A487*********** 
    Key-Arg : None 
    PSK identity: None 
    PSK identity hint: None 
    SRP username: None 
    Start Time: 1458680158 
    Timeout : 300 (sec) 
    Verify return code: 0 (ok) 
--- 

Es funktionierte in der Vergangenheit mit dem previo uns Zertifikat (auch ohne ca-Datei).

Antwort

0

Ich habe gerade das Problem gelöst, indem ich pem Bibliothek verwendet, um alle Zertifikate und Provisionierung Sachen, anstatt manuell zu tun. Es ist sehr einfach zu bedienen.

pem -o mycert.pem 

diesen Befehl eingeben, werden Sie aufgefordert Apfel Benutzernamen und ein Passwort, um Ihre Push-Benachrichtigung Zertifikat und was sonst noch neccesary zu erstellen.