2016-05-06 6 views
0

Ich habe meinen Kopf an die Wand geschlagen und versucht, diese Arbeit für die letzte Woche zu bekommen. Ich habe gerade wieder von vorne angefangen und alles protokolliert, was ich gemacht habe und es funktioniert immer noch nicht. Hier sind die Schritte i genommen habe:Apple Push Notification Service stellt eine Verbindung her, aber es wird keine Benachrichtigung empfangen

1) Erstellen Sie einen neuen App-ID Identifier eine neue Bundle-ID verwenden (die alten nicht Push-Benachrichtigungen hat)

a) made sure push notifications were added to the app id and proceeded to the last step, this resulted in an app id with push notifications in the ‘configurable’ state. 

b) I then went to edit the app id and saw that i could create a new production or development certificate so i did both using the steps listed 

2) Erstellt zwei neue Provisioning-Profile ein für Entwickler und ein für die Produktion, werden sowohl mit der neuen Bundle-ID

3) importieren, um die neuen Provisioning-Profile in Xcode und stellen Sie sicher, dass diejenigen, die in den Build-Einstellungen ausgewählten sind

4) erstellen die .p12 Dateien mit dem Schlüsselbund und Exportieren der CER-Dateien für Entwickler und Produktion

5) erstellen die .pem-Datei aus den P12-Dateien, diese Befehle:

openssl pkcs12 -in VX-Mobile-Dev.p12 -out apns-dev.pem -nodes -clcerts 

openssl pkcs12 -in VX-Mobile-Prod.p12 -out apns-prod.pem -nodes -clcerts 

6) Als nächstes ein PHP-Skript erstellt (das i eklatant von abgezockt ein anderes Blog), das ich von der Kommandozeile einer meiner virtuellen Maschinen aus laufe. Im selben Ordner wie diese Datei lege ich die Datei pans-prod.pem ab. Hier ist der Inhalt dieser Datei

Hinweis, für das Gerät Token ich einfach die App von Xcode, wo es bereits erfolgreich mit dem Apns-Server verbindet und bekommt ein Geräte-Token, die abgemeldet in der Konsole zu Testzwecken i Ich kopiere das neue Token einfach jedes Mal in die Datei.

Inhalt der Datei:

// set time limit to zero in order to avoid timeout 
set_time_limit(0); 

// charset header for output 
header('content-type: text/html; charset: utf-8'); 

// this is the pass phrase you defined when creating the key 
$passphrase = '{passphrase is hidden to you!}'; 

// you can post a variable to this string or edit the message here 
if (!isset($_POST['msg'])) { 
$_POST['msg'] = "Notification message here!"; 
} 

// function for fixing Turkish characters 
function tr_to_utf($text) { 
    $text = trim($text); 
    $search = array('Ü', 'Þ', 'Ð', 'Ç', 'Ý', 'Ö', 'ü', 'þ', 'ð', 'ç', 'ý', 'ö'); 
    $replace = array('Ãœ', 'Åž', 'Ğž', 'Ç', 'Ä°', 'Ö', 'ü', 'ÅŸ', 'ÄŸ', 'ç', 'ı', 'ö'); 
    $new_text = str_replace($search, $replace, $text); 
    return $new_text; 
} 

// tr_to_utf function needed to fix the Turkish characters 
$message = tr_to_utf($_POST['msg']); 

// load your device ids to an array 
$deviceIds = array(
'97c8c0a77e1380d052d17352e33b1f2224f082a3436ee90310cf88c7278329e7' 
); 

// this is where you can customize your notification 
$payload = '{"aps":{"alert":"' . $message . '","sound":"default"}}'; 

$result = 'Start' . "\r\n"; 

//////////////////////////////////////////////////////////////////////////////// 
// start to create connection 
$ctx = stream_context_create(); 
stream_context_set_option($ctx, 'ssl', 'local_cert', 'apns-prod.pem'); 
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase); 

echo count($deviceIds) . " devices will receive notifications.\r\n"; 

foreach ($deviceIds as $item) { 
    // wait for some time 
    sleep(1); 

    // 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" . "\r\n"); 
    } else { 
     echo 'Apple service is online. ' . "\r\n"; 
    } 

    // Build the binary notification 
    $msg = chr(0) . pack('n', 32) . pack('H*', $item) . pack('n', strlen($payload)) . $payload; 

    // Send it to the server 
    $result = fwrite($fp, $msg, strlen($msg)); 

    if (!$result) { 
     echo 'Undelivered message count: ' . $item . "\r\n"; 
    } else { 
     echo("\r\nRESULT\r\n\r\n"); 
     var_dump($result); 
     echo("\r\n\r\n"); 
     echo 'Delivered message count: ' . $item . "\r\n"; 
    } 

    if ($fp) { 
     fclose($fp); 
     echo 'The connection has been closed by the client' . "\r\n"; 
    } 
} 

echo count($deviceIds) . " devices have received notifications.\r\n"; 

// set time limit back to a normal value 
set_time_limit(30); 

Bitte helfen.

+0

Überprüfen Sie, ob das Entwicklerzertifikat im Xcode-Projekt ausgewählt ist, Sie benötigen die dev pem-Datei auf dem Server und erwähnen den dev apns-Server im php-Code. –

+0

Besser Sie beginnen zuerst mit Dev-Zertifikaten zu testen. Verwechsle dich nicht mit Prod Cert. Weil Sie den PHP-Server im PHP-Code erwähnen. –

+0

Ok, also habe ich versucht, die andere .pem-Datei zu verwenden (Sie werden feststellen, dass ich beide in den oben genannten Schritten erstellt habe) und das hat auch nicht funktioniert. –

Antwort

0

Es stellte sich heraus, dass ich fast da war. Das einzige Problem war, dass ich den Sandbox-Endpunkt verwendet haben sollte.

ssl://gateway.sandbox.push.apple.com:2195 

Auch als Reaktion auf RJV Kumar, sobald ich es bekam Arbeit habe ich versucht, es sowohl mit meinem prod und meinem dev Zertifikat und es in beiden Fällen gearbeitet. Das erscheint mir verdächtig, aber was auch immer ich bin, ich bin nur froh, dass es funktioniert.

[UPDATE]

Während die Schritte in diesem Beitrag sind technisch korrekt, ich gelernt, dass man eine neue App-ID nicht schaffen sollten, wenn Sie tatsächlich eine neue Version der App freizugeben in der Lage sein. Stattdessen sollten Sie einfach Push-Benachrichtigungen zu Ihrer aktuellen App-ID hinzufügen.

Verwandte Themen