J'ai créé une application pour envoyer des notifications à distance à partir d'un serveur Web. Lorsque j'ai testé l'application en mode développement, toutes les notifications sont arrivées correctement sur le téléphone, après la sortie de l'AppStore, l'application n'a plus reçu de notifications.
Voilà ce que j'ai fait:
Voici ce que j'ai testé:
Voici comment je signe l'application sur Xcode:
Voici le code de la page php pour envoyer des notifications:
$ctx = stream_context_create();
//stream_context_set_option($ctx, 'ssl', 'passphrase', 'development_pwd');
//stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck_development.pem');
//$fp = stream_socket_client('ssl://gateway.sandbox.Push.Apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); //test
stream_context_set_option($ctx, 'ssl', 'passphrase', 'production_pwd');
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck_production.pem');
$fp = stream_socket_client('ssl://gateway.Push.Apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); //production
echo "<p>Connection Open</p>";
if(!$fp){
echo "<p>Failed to connect!<br />Error Number: " . $err . " <br />Code: " . $errstrn . "</p>";
return;
} else {
echo "<p>Sending notification!</p>";
}
$i = 0;
foreach ($deviceToken as $dt) {
$dt = str_replace(' ' , '' , $dt);
$msg = chr(0) . pack('n',32) . pack('H*', $dt) . pack('n',strlen($payload)) . $payload;
echo "<p>" . $i . " - Message sent: " . $payload . "<br />Token: ". $dt . "<br />***" . $msg . "***</p>";
$result = fwrite($fp, $msg, strlen($msg));
$i++;
if (!$result)
echo '<p>Message not delivered ' . PHP_EOL . '!</p>';
else
echo '<p>Message successfully delivered ' . PHP_EOL . '!</p>';
}
fclose($fp);
echo "<p>Total Notifications Sent: " . $i . "</p>";
echo "<p>Connection Closed!</p>";
}
?>
Conclusions: J'ai l'application de test sur mon PC qui reçoit des notifications push APNS. J'ai exactement la même application publiée sur l'App Store qui ne reçoit pas de notifications APNS Push.
J'ai vraiment fait tout ce qui était en mon pouvoir pour résoudre ce problème et lire environ des milliers de pages de forums, stackoverflow et Apple Documentations.
Je suis prêt à rendre hommage à tous ceux qui m'aident à trouver la solution à mon problème!
Le lien que vous avez mentionné est le lien Sandbox APNS. Le lien APNS de production est conforme à Apple documentation est:
Vous accédez à l'environnement de production sur gateway.Push.Apple.com , outbound TCP port 2195.
Peu de choses à vérifier:
Le jeton d'appareil pour la production et le bac à sable sont différents pour le même appareil.
Essayez donc d'obtenir un jeton d'appareil en utilisant des certificats Adhoc ou Distribution et utilisez le jeton généré en production, cela a fonctionné pour moi.
Je viens de rencontrer le même problème. Les notifications push arrivent en mode développement, pas en production. J'ai aussi tout vérifié plusieurs fois et j'étais sûr que tout allait bien.
Mais ce n'était pas le cas. C'était la toute première étape du processus. Création du csr. J'étais sûr que je n'avais pas à créer de fichier csr pour le développement et la production et j'ai fini par utiliser le même fichier csr pour les deux certificats. N'a pas fonctionné ...
Peut-être que quelqu'un à l'avenir fera la même erreur et économisera du temps maintenant.