IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Symfony2 et APNS iOS


Sujet :

Symfony PHP

  1. #1
    Invité
    Invité(e)
    Par défaut Symfony2 et APNS iOS
    Bonjour amis développeurs,

    J'ai développé une application web sous Symfony2 qui intègre une API permettant l’interaction avec une de mes applications mobiles sur iOS.
    Pour faire simple, mon application web doit envoyer tous les jours des notifications push via le service APNS d'Apple sur l'application mobile.
    Pour cela, j'utilise la fonction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    <?php 
     
    function sendNotification($message, $numBadge, $deviceTokenList)
    {
    	$body = array();
            $body['aps'] = array();
            $body['aps']['alert'] = $message;
            $body['aps']['badge'] = $numBadge;
            $body['aps']['sound'] = "default";
            $payload = json_encode($body);
     
            // Le jeton du terminal
            $deviceToken = "";
     
            // Création d'un contexte SSL
            $ctx = stream_context_create();
     
            // Ouverture du fichier PEM contenant clé privé et certificat
            $pathCk = $this->kernel->locateResource('@MonBundle/Notifications/ck.pem');
            stream_context_set_option($ctx, 'ssl', 'local_cert', $pathCk);
     
            // Ouverture d'une connexion réseau vers les serveurs de développement Apple
            $fp = stream_socket_client('ssl://gateway.push.apple.com:2195',
            $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);
     
            if(!$fp) {
                print "Erreur de connexion: $err $errstr\n";
            }
            else {
                print "Connection OK\n";
            }
     
            // Pour chaque device inscrit
            foreach($deviceTokenList as $deviceToken)
            {
                // Construction des données à envoyer
                $msg = chr(0) . pack('n', 32)
                . pack('H*', str_replace(' ', '', $deviceToken))
                . pack('n', strlen($payload)) . $payload;
     
                print "Message: " . $payload . "\n";
     
                // Envoie des données
                $result = fwrite($fp, $msg, strlen($msg));
     
                if (!$result){
                echo '<p>The message has not been sent '. PHP_EOL;
     
                }
                else{
                echo '<p>The message has been sent ' . PHP_EOL;
     
                }
            }
     
            // Fermeture de la connexion
            fclose($fp);
    }
     
    ?>
    Cette fonction MARCHE sans Symfony2 car avant de migrer sous ce Framework le système de notifications était intégré dans une autre application web.
    Pour essayer de le faire fonctionner sous Symfony2 j'ai donc ajouté la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <?php
            $pathCk = $this->kernel->locateResource('@MonBundle/Notifications/ck.pem');
    ?>
    et remplacer cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <?php
        stream_context_set_option($ctx, 'ssl', 'local_cert', './ck.pem');
    ?>
    par celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <?php
        stream_context_set_option($ctx, 'ssl', 'local_cert', $pathCk);
    ?>
    Le problème se trouve donc au niveau de l'ouverture et de la transmission du certificat ck.pem au service d'Apple: soit il est mal ouvert, soit pas du tout.


    J'espère que vous m'avez compris et que vous pourrez m'aider à y voir un peu plus clair.
    Merci d'avance.

  2. #2
    Invité
    Invité(e)
    Par défaut
    J'ai l'erreur suivante lorsque j'essaye d'envoyer les notifications :

    Unable to connect to ssl://gateway.push.apple.com:2195 (Network is unreachable)
    Personne n'a d'idée ?
    Dernière modification par rawsrc ; 04/10/2013 à 16h10. Motif: Balises [quote][/quote] pour les messages d'erreur

  3. #3
    Invité
    Invité(e)
    Par défaut
    J'ai réussi à isoler un peu mieux le problème :

    Cette fonction (sendNotification()) est dans un service. Lorsque j'appel ce service grâce à une commande console que j'ai créé, c'est là que la connexion ssl échoue mais si je l'appel depuis un contrôleur cela fonctionne !

    Avez-vous une idée d'où cela pourrai venir ?

  4. #4
    Membre à l'essai
    Femme Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2008
    Messages : 11
    Points : 19
    Points
    19
    Par défaut
    Avez-vous trouvé la solution SVP?

    Merci

Discussions similaires

  1. Recherche APN ou CVN
    Par Feilong dans le forum Périphériques
    Réponses: 1
    Dernier message: 14/09/2006, 00h29
  2. [APN] super zoom
    Par Lou Pitchoun dans le forum La taverne du Club : Humour et divers
    Réponses: 13
    Dernier message: 11/09/2006, 08h11
  3. Utiliser APN en lecteur vidéo, votre avis?
    Par dockurt2k dans le forum Vidéo
    Réponses: 3
    Dernier message: 09/09/2006, 11h21
  4. ostringstream( const string&, openmode ) et ios::app
    Par Herode dans le forum SL & STL
    Réponses: 10
    Dernier message: 07/04/2006, 23h00
  5. [HARDWARE] APN usb sur port serie ou autre
    Par SuperOliV dans le forum Périphériques
    Réponses: 4
    Dernier message: 15/07/2004, 13h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo