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
APNs Zertifikate
Ich habe sowohl Entwicklungs- als auch Vertriebszertifikate. Es ist der Dist, der mir wichtig ist.
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:
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?
Sie versuchen, adhoc mit aktuellen Zertifikaten für Push-Benachrichtigung zu bauen? Vielleicht verwenden Sie Ihr Add-On-Store-Zertifikat. –
Hey! Hast du meine Lösung versucht? –
@ JulianE. Noch sollte ich in den nächsten Tagen eine Chance über die Feiertage bekommen, um es auszuprobieren. –