Notification Push

Bonjour à  tous,


 


Je suis actuellement sur le développement d'une application qui utilise les notifications Push d'Apple.


J'ai créé une application en PHP pour gèrer les notifications push APNS qui tourne tout le temps.


J'ai réussi à  envoyer des notifications entre un IPad et un Iphone via le gateway.sandbox.push.apple.com.


Jusque là  tout fonctionne très bien, mais je suis étonné de ne pas toujours recevoir les notifications sur mes devices hors j'observe que dans les logs de mon app php il met bien que le message a été délivré avec succès. Est ce possible qu'il y ait parfois trop de charge ou que ce n'est pas toujours fiable en mode developpement?


En faite pour mon application, il est nécessaire que les notifications arrivent tout le temps.


Quelqu'un a t'il un avis sur la question?


 


Bien à  vous.


Réponses

  • LarmeLarme Membre
    juin 2013 modifié #2

    Y'a pas un temps de latence pour les push, genre un rafraà®chessement tous les X temps afin de ne pas pomper trop sur la batterie ?


     


    Car j'ai l'impression que je les reçois par "paquets" de mon côté...


  • Est on limité par un certain nombre de requête sur l'APNS d'Apple pour les notifications?


    Je comprends pas car après un certains temps je ne les reçois plus et tout m'indique que c'est correctement partit dans les logs...

  • Oui mon payload contient des paramètres à  passer un device à  un autre et change donc souvent.


    Aujourd'hui, mes notifications push met un temps de dingue a arrivé d'un device à  un autre!


    Je sais pas si c'est un problème de réseau ou si c'est l'APNS de Apple qui est lent?


    Je commence à  croire qu'utiliser les notifications push pour communiquer entre deux devices ne soient pas une bonne solution.


    Si quelqu'un a une idée pour me dépanner?


    Bien à  vous


  • FKDEVFKDEV Membre


    Est on limité par un certain nombre de requête sur l'APNS d'Apple pour les notifications?


    Je comprends pas car après un certains temps je ne les reçois plus et tout m'indique que c'est correctement partit dans les logs...




     


    Non mais par contre il faut éviter d'ouvrir des connexions vers le serveur apns pour chaque notification.


    Je ne sais pas quels sont les quantités qui commencent à  poser des problèmes et je ne sais pas si ces règles s'appliquent au serveur de sandbox.

  • Pour mon application, je n'ai pas le soucis d'abondance d'envoi de notification push.


    Mon application a besoin juste d'envoyer une notification à  un autre device et d'attendre sa réponse en notification.


    C'est assez bizarre car j'ai des périodes ou ca marche très bien des réponses toutes les 2,3 secondes et puis après un certain temps plus moyen d'en envoyer...


  • FKDEVFKDEV Membre
    Tu sais que quand ton app est lancé ou en background tu reçois les notifications directement dans l'app et non dans le centre de notification ?
  • Oui oui bien sûr je sais sinon je ne dirais pas que ca fonctionne de temps en temps :-)


    Est ce possible que mon serveur php soit mal configurer en terme de connexion vers l'outil d'Apple mais que malgré tout il m'indique toujours que le message a été délivré correctment chez Apple? Et donc Apple ne prévient pas qu'il ya  trop de connexion par exemple..


  • FKDEVFKDEV Membre

    D'après ce que j'ai compris, le serveur Apple ne délivre pas les notifications de manière synchrone.


    Il ne peut donc pas renvoyer une erreur quand tu lui fourni une notification pour un device donné.


    Par contre quand le serveur se met à  traiter tes notifications et qu'il détecte une erreur alors, si tu es encore connecté, il t'envoie un message d'erreur sur la connexion et se met à  refuser tes messages.


     


    Donc si tu te connectes, que tu envoie une notification et que tu te déconnectes, tu n'auras jamais de message d'erreur.


     


    Ce que nous avons conclu dans un autre sujet récent, c'est que le serveur de sandbox accepte un peu tout et n'importe quoi. Y compris des deviceToken de production ou des messages mal formés.


     


    Le serveur de production, quant à  lui, vérifie immédiatement les deviceToken et coupe la connexion immédiatement s'ils sont incorrects.


     


    Je n'ai pas testé de messages incorrects avec le serveur de production donc je ne sais pas s'il va les refuser immédiatement ou pas. Mon hypothèse est que NON.

  • Je ne sais pas répondre à  ta question mais je ne peux que te conseiller d'ajouter des logs dans ton php pour bien détecter les refus de connexion et les erreurs en écriture.


     


    Combien de messages envoies-tu ?

  • Dans un cycle complet de mon application, j'envoie une notification push d'un device à  l'autre et ensuite le premier reçoit la réponse du deuxième. Il y a pas d'envoi abondant simultanément. En faite en test mon application tourne bien et envoi les notifications mais si je laisse les devices en attente pendant 1h par exemple, lorsque je réessaye, fonctionne plus !


    J'ai modifié mon serveur APNS php pour qu'il ne se connecte chez Apple que lorsqu'on a des messages à  envoyer et une fois le message envoyé il se déconnecte.


    Mon serveur APNS tourne tout le temps (avec un sleep de 5) et non via un CRON comme easyAPNS, je ne sais pas si c'est ça le problème?


    J'espère que ca va fonctionner !

  • Est-ce que ton serveur se connectait même quand il n'y avait pas de message à  envoyer ?


    Est-ce que ton serveur ferme bien les connections dans ce cas ?


    Et ça se remet à  marcher au bout de combien de temps ?


    Je ne sais pas si c'est facile à  faire en php mais tu peux essayer de faire lectures non bloquantes sur la connection pour voir si le serveur apns t'envoie un message d'erreur.


  • Bon voilà  après une série de tests, j'ai enfin résolu mon problème de notification push.


    Dans mon cas il est primordial que les notifications push aboutissent pour le bon déroulement du workflow de l'application et son nombre ne devait pas être élevé.


    Pour résoudre mon problème, j'ai du modifier le serveur php qui envoie les notifications chez Apple que j'ai téléchargé sur le net.


    Voici les directives que j'ai suivies:


    - Se connecter sur le serveur d'Apple uniquement quand on a des messages à  envoyer.


    - Se déconnecter du serveur d'Apple après que les messages ont été envoyées.


    Il me semble que se sont justement des bonnes pratiques mais qui malheureusement n'était pas en place (toujours connecté message ou pas à  envoyer et jamais de déconnection).


    Merci à  tous pour vos conseils !

  • FKDEVFKDEV Membre
    juin 2013 modifié #14

    Du coup tu avais essayé de récupérer d'éventuels messages d'erreurs ou pas ?


     


    Peut-etre que ta connection finissait par etre coupée mais que ton script php ne le testait pas.


  • Non je n'essayais pas de récupérer les éventuels messages d'erreurs. En tout cas, je n'ai plus aucun soucis, à  mon avis le serveur php APNS que j'avais téléchargé n'était pas top. en tout cas merci pour ta réactivité. Par contre, je voulais savoir si on sait récupérer l'évênement quand l'utilisateur clique sur le bouton fermer lorsque le client reçoit une notifications en mode alerte ?


  • Attention. Tu ne peux pas savoir sur ton serveur si les notifications push no bien été délivrées à  l'iPhone. Ce que tu obtiens c'est la confirmation de livraison au serveur APNS.


     


    Il est déconseillé de baser le modèle d'échange de données de l'applciation sur les notifications push. Il faut toujours prévoir un système parallèle (appels à  une API serveur, etc, programmés, sur pull-to-refresh, ou autre, etc)


Connectez-vous ou Inscrivez-vous pour répondre.