2010-10-27 2 views
1

J'ai un problème lors de la recherche d'une erreur de réponse après l'envoi d'une notification push. Voici ma configuration:iPhone Push Notification - Problème de réponse à l'erreur

Depuis mon serveur PHP, j'envoie des notifications Push. Ces notifications sont envoyées dans le format amélioré, de sorte que je peux obtenir une réponse d'erreur du serveur Apple. Par exemple: Erreur n ° 7 "Taille de la charge utile non valide".

La façon dont je vérifier les erreurs est en train de lire la réponse socket:

const ERROR_RESPONSE_SIZE = 6; 
$errorResponse = @fread($this->_apnsSocket, self::ERROR_RESPONSE_SIZE); 

Cela fonctionne bien quand il y a une erreur réelle. Par mon problème est: quand il n'y a pas d'erreur, l'appel "fread" ne renvoie rien et continue à charger pour toujours.

Quelqu'un peut-il m'aider avec ceci? Merci de votre aide!

Répondre

2

Vous devez définir stream_set_blocking($this->_apnsSocket, 0); sur 0, ce qui est un mode non bloquant, car en cas de succès Apple ne renvoie rien, mais le fread attend des données en mode de blocage.

+0

Cela fonctionnera, sauf que cela provoquera également le retour de fread immédiatement avant que l'erreur ait une chance d'être envoyée. Donc, ce que vous pouvez faire est une vérification supplémentaire des erreurs une fois que vous avez fini d'envoyer toutes vos notifications push. Envoyez tous les push, puis faites une pause d'une demi-seconde, puis utilisez fread une fois de plus pour vérifier les éventuelles erreurs qui se sont produites avec les dernières notifications push qui ont été envoyées. J'ai testé cela en causant une erreur sur le dernier message push envoyé, puis en faisant une pause pendant des durées différentes (essayé jusqu'à 5 minutes), puis en faisant un fread et l'erreur était toujours là en attente d'être lu. – jsherk

Questions connexes