4 votes

Erreur SSL dans les notifications Push d'Apple

L'APNS a fonctionné correctement pendant plusieurs mois jusqu'à quelques semaines. Chaque fois que nous envoyons des notifications push, la connexion s'interrompt avec l'erreur suivante :

Avertissement PHP : fwrite() : L'opération SSL a échoué avec le code 1. Messages d'erreur OpenSSL : error:1409F07F:Routines SSL:SSL3_WRITE_PENDING:mauvaise réessai d'écriture

Si je me reconnecte et renvoie ou renvoie uniquement le message au serveur Apple, j'obtiens la même erreur. Parfois, je peux envoyer à tous les appareils sans problème. Mais parfois, l'envoi s'arrête au 900e appareil, ou au 2000e. Ce n'est pas le Je n'ai pas collecté les appareils du service de retour et j'ai mis tous les appareils en mode inactif -Erreur. Je me connecte au service de rétroaction à intervalles réguliers. C'est un autre type d'erreur que je ne connais pas. Quelque chose a changé avec la connexion SSL. Se peut-il qu'Apple ait changé quelque chose avec la connexion SSL ? Apple a dit qu'il ne le faisait pas. Et ils ne supportent pas PHP.

Nous utilisons PHP 5.3.3-7+squeeze3 avec Suhosin-Patch (cli) (construit : Jun 28 2011 08:24:40) . C'est la dernière version stable de PHP pour Debian Linux Squeeze. Cette version de PHP utilise OpenSSL 0.9.8o (01 Jun 2010) sur notre serveur.

Aidez-moi, s'il vous plaît.

4voto

mrkhingston Points 41

J'ai eu un problème similaire en Python, je suppose que les bibliothèques ssl sous-jacentes sont les mêmes donc la solution pourrait être similaire.

SSL3_WRITE_PENDING semble être causé par l'échec d'une écriture sur une socket, puis par une nouvelle tentative d'écriture. Dans ce cas, pour une raison quelconque, SSL_write vous demande de réessayer l'écriture avec exactement les mêmes octets que l'écriture originale, sinon il omet l'erreur SSL_WRITE_PENDING.

Le modèle d'erreurs que je voyais était le délai d'attente de connexion, puis beaucoup d'erreurs SSL_WRITE_PENDING. Cela s'explique par le fait que l'une de mes écritures a d'abord échoué (par exemple, avec une erreur de délai d'attente ou une erreur de fermeture de connexion parce que j'ai envoyé une demande de poussée douteuse), puis, après cette erreur, j'essayais continuellement de réutiliser le socket cassé (et il renvoyait l'erreur SSL_WRITE_PENDING peu informative)

Êtes-vous sûr d'utiliser une nouvelle connexion de socket lorsque vous vous reconnectez et envoyez à nouveau ? Parce que je n'aurais pas pensé que vous obtiendriez SSL_WRITE_PENDING lors d'une nouvelle connexion de socket au serveur APNS.

Une autre chose qui pourrait aider est l'utilisation du format de notification amélioré, car si vous envoyez accidentellement un push cassé au serveur Apple, il vous renverra un code d'erreur avant de fermer la connexion. Si vous n'utilisez pas déjà le format amélioré, il serait bon de le faire, car vous pourrez ainsi vous assurer que vous ne commettez pas d'erreurs simples, comme un mauvais jeton ou une charge utile trop longue.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X