Nous développons une application iPhone, et avons une notification push pour le développement et une version ad hoc fonctionnant correctement. Mais lorsque nous essayons d'envoyer une notification push à des périphériques utilisateur réels dans notre base de données, nous avons réinitialisé la connexion SSL, puis une erreur de tuyau cassé. Nous pensons qu'il y a peut-être trop de périphériques dans notre base de données (plus de 70000), donc il est impossible d'envoyer tous les messages en même temps. Nous essayons donc d'envoyer des messages à 1000 appareils une seule fois, mais nous avons quand même reçu cette erreur "Broken pipe" pour environ 100 messages. Et nous ne sommes pas sûrs que les messages ont été envoyés. Toute suggestion?get SSL Erreur de tuyau cassé lorsque vous essayez de faire une notification push
Répondre
Nous avons résolu ce problème. Il est cassé en raison de jetons invalides dans notre table de base de données. Et le service Apple Apns nous déconnectera s'il y a un jeton invalide. Étant donné que la connexion est rompue, l'erreur «Broken Pipe» s'affiche lorsque vous essayez d'envoyer à nouveau des messages. La solution de base consiste à déterminer si l'écriture sur le tube a réussi, sinon, déconnectez-vous et reconnectez-vous après un certain délai.
Je souhaite que vous aviez expliqué comment vous avez codé ceci - Mona Jun 14 à 23:52 – Mona
Habituellement, il arrive quand je boucle à travers tout jeton de l'appareil de l'utilisateur et si l'un échoue, il casse la chaîne et montre la même erreur, tout ce que nous peut faire est de trier l'utilisateur avec un jeton d'appareil récent et de vérifier la longueur de notre extrémité, cela a fonctionné après cela. Merci votre réponse m'a aidé!~ –
emagic est correct, une raison pour l'erreur "tuyau cassé" peut survenir à partir de jetons invalides. Il y a quelques autres raisons pour lesquelles cela peut arriver aussi. Ce qui suit est de Apple Technical Note TN2265:
Le problème le plus courant est un jeton de périphérique non valide. Si le jeton provient de l'environnement de bac à sable, par exemple lorsque vous testez un développement en interne, vous ne pouvez pas l'envoyer au service de production . Chaque environnement de commande émettra un jeton différent pour le même périphérique ou ordinateur que le . Si vous envoyez un jeton de périphérique au mauvais environnement , le service Push verra cela comme un jeton non valide et supprimera la notification. Un jeton de périphérique non valide peut également signifier que l'utilisateur a supprimé votre application de son périphérique ou de son ordinateur. Vous devez vérifier le service de retour au moins une fois par jour pour les jetons d'appareil qui ne sont plus valides.
D'autres problèmes possibles peuvent être l'envoi d'une charge utile supérieure à 256 octets, votre charge utile peut ne pas être formatée correctement, ou peut-être votre dictionnaire JSON a une syntaxe incorrecte.
Une déconnexion occasionnelle pendant que votre fournisseur est inactif n'a rien à voir avec ; rétablissez simplement la connexion et continuez. Si un des serveurs Push est hors service, le mécanisme d'équilibrage de charge dirigera de manière transparente votre nouvelle connexion vers un autre serveur en supposant que vous connectez par nom d'hôte et non par adresse IP statique.
Extension sur la réponse de Emagic, ceci est mon code php snipplet:
private $fp;
private function connect(){
$apnsHost = 'gateway.push.apple.com';
$apnsCert = 'certs/cert.pem';
$apnsPort = 2195;
$pass = "blah";
$streamContext = stream_context_create();
stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert);
stream_context_set_option($streamContext, 'ssl', 'passphrase', $pass);
$this->fp = stream_socket_client('ssl://' . $apnsHost . ':' . $apnsPort, $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $streamContext);
if (!$this->fp) return("Failed to connect: $err $errstr<br>");
echo 'Connected to APNS<hr />';
}
private function send(){
$this->connect();
foreach($pushes as $push) {
$payload['aps'] = array('alert' => $push->text, 'badge' => 0, 'sound' => 'default');
$payload2 = json_encode($payload);
$msg = chr(0) . pack('n', 32) . pack('H*', $push->token) . pack('n', strlen($payload2)) . $payload2;
try {
$result = fwrite($this->fp, $msg, strlen($msg));
}
catch (\Exception $e) {
fclose($this->fp);
echo('Error sending payload: ' . $e->getMessage());
sleep(5);
$this->connect();
}
}
}
J'essaye d'utiliser ceci mais le try/catch ne semble pas déclenché, même quand fwrite() échoue. Je reçois des messages de la console disant qu'elle n'a pas pu écrire, mais je n'ai jamais reçu le message «Erreur d'envoi de données utiles» à envoyer. Êtes-vous sûr que fwrite() lance réellement des exceptions? – othomas
Essayez de supprimer le \ leader \ Exception .... – JoeGalind
Essayé cela, ne fait pas de différence. Le bloc catch n'est jamais appelé. – othomas
- 1. Erreur de tuyau cassé
- 2. Erreur d'écriture: tuyau cassé
- 3. erreur JavaScript lorsque vous essayez de simple feu XMLHttpRequest (GET)
- 4. erreur de sélection lorsque vous essayez d'initialiser
- 5. Erreur Eclipse: java.net.SocketException: tuyau cassé Comment résoudre?
- 6. erreur lorsque vous essayez d'installer MSMQ
- 7. push service de notification de notification
- 8. Erreur avec cmake lorsque vous essayez de construire wt?
- 9. problème lorsque vous essayez de vider une pile dans c
- 10. Comment réparer une erreur SSL lorsque vous n'utilisez pas www
- 11. Push d'Apple Service de notification
- 12. Service de notification push Apple - aucune notification sur l'appareil
- 13. 1 Certificat SSL de notification push pour plusieurs applications
- 14. impossible d'obtenir une notification push à l'aide du service de notification push du dirigeable urbain?
- 15. didacticiels de notification push
- 16. explication de notification push
- 17. Limitations de notification push
- 18. Guide de notification push?
- 19. push notification
- 20. Badge de notification push
- 21. Filtrage Apple Push Notification
- 22. erreur étrange lorsque vous essayez d'écrire un MMAP sous Windows
- 23. Comment tester le service de notification de notification push iphone
- 24. Service de notification push BB
- 25. brew installer MySQL, erreur lorsque vous essayez d'arrêter le serveur
- 26. Apple Push notification examen
- 27. Puis-je utiliser Push d'Apple sans notification SSL
- 28. comment puis-je faire une notification push dans l'application iphone?
- 29. Service de rétroaction pour la notification push
- 30. Apple Push Notification Service
Nous allons avoir la même question; mais avec 100 000 utilisateurs. Dans la mesure où nous pouvons dire que la notification atteindra la première centaine d'années, mais pas après cela. Je ne peux que supposer qu'il y a une limite (soit par le nombre ou le temps) sur les notifications qui sont envoyées. Pourrait vraiment faire avec quelqu'un pour le confirmer? – Wex