2015-12-16 15 views
6

Mit meiner App im App Store funktionieren Push-Benachrichtigungen nicht. Mit meiner App in der Entwicklung funktionieren Push-Benachrichtigungen.Apple Push-Benachrichtigungen funktionieren nicht in der Produktion

Ich denke, ich hätte über eine Ad-hoc-Bereitstellung getestet werden sollen. Wie auch immer, hier ist das, was ich weiß ...

App-ID

meine App-ID ist com.MyName.My-App

Es hat Hinweise für Entwicklung aktiviert Push-and Distribution

enter image description here

APNs Zertifikate

Ich habe sowohl Entwicklungs- als auch Vertriebszertifikate. Es ist der Dist, der mir wichtig ist.

enter image description here

Es hat den Namen com.MyName.My-App

zu einer PEM exportieren

ich ausgewählt habe sowohl die Cert und den privaten Schlüssel, und exportiert sie als folgt:

enter image description here

und Passwort geschützt es.

Ich lief dann

openssl pkcs12 -in Certificates.p12 -out pushcert.pem -nodes -clcerts 

das Passwort eingibt, und erfolgreich die pushcert.pem Ausgang bekommen.

Herunterladen App

ich für mein Gerät durch serverseitige Gerät Token gelöscht, ich meine App aus dem App Store herunterladen, öffnete sie und Push Notifications akzeptiert, und dann angemeldet in meinem Server mein Gerät Token zu überprüfen . Ich habe jetzt mein Produktionsgerät-Token. Ich habe dieses einfache PHP-Skript ausgeführt (das funktioniert, wenn ich mein Entwicklungsgerät-Token anliege), scheitert aber mit meinem Produktionsgeräte-Token.

<?php 

// Put your device token here (without spaces): 
$deviceToken = 'myProductionDeviceTokenInHere'; 

// Put your private key's passphrase here: 
$passphrase = 'myPasswordIsInHere'; 

// Put your alert message here: 
$message = 'Test'; 

//////////////////////////////////////////////////////////////////////////////// 

$ctx = stream_context_create(); 
stream_context_set_option($ctx, 'ssl', 'local_cert', 'pushcert.pem'); 
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase); 
stream_context_set_option($ctx, 'ssl', 'cafile', 'entrust_2048_ca.cer'); 

// 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; 

// Create the payload body 
$body['aps'] = array(
    'alert' => $message, 
    'sound' => 'default' 
    ); 

// 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 'Message not delivered' . PHP_EOL; 
else 
    echo 'Message successfully delivered' . PHP_EOL; 

// Close the connection to the server 
fclose($fp); 

Warum scheitert es? Es funktioniert mit meinem Entwicklungsgerät-Token, nicht jedoch mit meinem Produktionsgeräte-Token. Habe ich etwas nicht richtig gemacht?

+0

Sie versuchen, adhoc mit aktuellen Zertifikaten für Push-Benachrichtigung zu bauen? Vielleicht verwenden Sie Ihr Add-On-Store-Zertifikat. –

+0

Hey! Hast du meine Lösung versucht? –

+0

@ JulianE. Noch sollte ich in den nächsten Tagen eine Chance über die Feiertage bekommen, um es auszuprobieren. –

Antwort

3

Was passiert ist, dass Sie wahrscheinlich mit dem falschen Provisioning-Profil verteilen. Um Push-Benachrichtigungen in der endgültigen Version zu erhalten, müssen Sie das neueste Bereitstellungsprofil installiert haben, in dem Sie Push-Benachrichtigungen für die Verteilung bereits aktiviert haben. Dies ist der häufigste Fehler und ich habe es in der Vergangenheit ein- oder zweimal gesehen.

So, jetzt müssen Sie die folgenden Schritte ausführen:

  • Melden Sie sich bei dem Apple Developer Center
  • für den Vertrieb für diese App-ID ein neues Provisioning-Profil erstellen Screenshot
  • Weiter es einrichten voll, durch Eingabe aller notwendigen Details
  • Laden Sie das Profil herunter und doppelklicken Sie darauf, um es zu installieren
  • In Ihrem Projekt unter Build Settings-> Code Signing -> Distribution wählen Sie Ihr neu erstelltes Profil
  • Jetzt Push-Benachrichtigungen erreichen den Endbenutzer auch in der Distribution baut.

Hoffe, dass hilft, Julian.

+0

Ich habe ein neues Ad-hoc-Provisioning-Profil anstelle eines App Store-Profils erstellt, um zu testen, ob das zuerst funktioniert ... bevor ich das Verteilungs-Profil erstelle, schiebe es in den App Store und warte 2 Wochen. Auf diese Weise kann ich testen, ob Ad-Hoc sofort funktioniert. Jedenfalls hat es nicht: @. Dieses Problem bringt mich um! –

+0

Sie haben also eine Ad-hoc-Datei erstellt, diese in Xcode installiert und es hat nicht funktioniert? –

+0

Yup. Ich töte gerade alles in meinem Mitgliedszentrum. Alles aufräumen. Ich werde meinen Bildschirm über QuickTime aufnehmen und alles einrichten und sehen, ob es erneut fehlschlägt. Dann werden wenigstens alle meine Schritte aufgezeichnet. –

0

Stellen Sie sicher, dass Sie das Sandbox-Zertifikat nicht auf dem Server verwenden! Sie müssen dies ändern, damit es von Sandbox zu Prod funktioniert.

0

Es stellt sich heraus, dass es ein Problem mit dem Ruby Gem Dritter war, das ich benutzte (rpush). Ich weiß nicht genau was, aber sobald ich es ausgeschaltet habe, war alles großartig.

Verwandte Themen