APNS les Notifications Push ne fonctionne Pas sur la Production
J'ai créé une Application pour envoyer des notifications à distance à partir d'un serveur web.
Quand j'ai testé l'Application, le Mode de Développement toutes les notifications arrivé correctement sur le téléphone, après l'AppStore version de l'application n'a pas reçu de notifications plus.
Ici, c'est ce que j'ai fait:
- Créé une Clé Privée Pour la Production et un pour le développement.
- Généré sur mon ID de l'Application de deux Certificats SSL en passant par le précédent CertFile Généré. Je suis à 100% sûr d'avoir correctement généré 2 clés et les a transmises correctement pour télécharger le certificat SSL de Dev Center sous AppID.
- Créé un fichier .pem pour le développement et l'autre pour la production (par la conversion du fichier .p12 extrait de mon Trousseau, etc etc).
- Créé 2 profil de configuration pour un développement et un pour la production raccordée au AppID de l'étape 1.
- Signé de l'app dans les Paramètres de construction avec les bons Profils de configuration créé à l'étape 4.
- Créé une Application Web pour capturer et stocker les utilisateurs Jetons.
- Créé une page php de test d'Envoi de notifications Push.
Ici, c'est ce que j'ai testé:
- Testé le développement généré .fichier pem avec telnet sur le sandbox de lien avec un vrai succès de réponse.
- Testé la production générée .fichier pem avec telnet sur la production de lien avec un vrai succès de réponse.
- Je suis sûr à 100% d'avoir stocké sur mon application web le développement de la marque de mon iPhone.
- Je suis sûr à 100% d'avoir stocké sur mon web application server de la production, gage de mon iPhone.
- Je suis sûr à 100% de passer avec ma page php le bon message au Serveur Apple (à la fois pour le développement et la production).
- La page php qui retourne toujours un grand message de Serveur Apple (à la fois pour le développement et la production).
Ici est de savoir 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'Appli de Test sur mon PC qui reçoivent des APNS de Notifications Push.
J'ai exactement le même application publiée sur l'App Store que de ne pas recevoir des APNS de Notifications Push.
J'ai vraiment fait tout ce qui est en mon pouvoir pour résoudre ce problème et lire les milliers de pages de forums, stackoverflow et Apple Documentations.
Je suis prêt à retribuite à chacun de vous qui m'aide à trouver la solution à mon problème!
- Pour votre info, le script PHP renvoie le Message "livré avec succès", même si le jeton est incorrect ou a expiré.
- Dois-je créer deux .la rse fichiers pour la Production & Développement ?
Vous devez vous connecter pour publier un commentaire.
Le lien que vous avez mentionné est le bac à sable APNS lien. La Production APNS lien car il est par Apple la documentation est:
Peu de choses à vérifier:
Dispositif de jeton pour la Production et la Sandbox sont différents pour le même appareil.
Donc essayer d'obtenir un dispositif de jeton en utilisant ad-Hoc ou des certificats de Distribution et d'utilisation du jeton généré sur la production, cela a fonctionné pour moi.
Je Viens de tomber sur le même problème. Les Notifications Push sont arrivés, le Mode de Développement, pas de la Production. J'ai aussi vérifié le tout à quelques reprises, et il était sûr que tout allait bien.
Mais il n'était pas. C'était la première étape dans le processus. La création de la rse. J'étais sûr que je n'ai pas à créer un fichier csr pour le Développement et la Production a fini par utiliser le même fichier csr pour les deux certificats. N'a pas fonctionné...
Peut-être quelqu'un dans le futur fait la même erreur et permet de gagner du temps maintenant.