[SWIFT-PHP] Notifications iOs 10 ?

InsouInsou Membre
avril 2017 modifié dans API UIKit #1

Bonjour,


 


Je me retrouve devant un soucis avec les notifications d'iOs 10..Je n'arrive pas à  en envoyer via php..


 


J'ai suivi ce tutos là  :


https://www.sitepoint.com/developing-push-notifications-for-ios-10/


J'arrive bien à  envoyer (via Pusher) et recevoir la notification sur mon téléphone.


 


Du coup, je voulais envoyer mes notifications depuis mon serveur web et c'est là  que ça ne fonctionne plus..


 


J'ai bien générer mon fichier .pem (via ce tuto : http://www.apptuitions.com/generate-pem-file-for-push-notification/ )


 


Mon code php : 



$apnsServer = 'ssl://gateway.sandbox.push.apple.com:2195';
$privateKeyPassword = 'mykey';
$message = "Mon message ici !";
$deviceToken ='MONTOKENICI';

$pushCertAndKeyPemFile = 'pushcert.pem';
$stream = stream_context_create();
stream_context_set_option($stream,'ssl','passphrase',$privateKeyPassword);
stream_context_set_option($stream,'ssl','local_cert',$pushCertAndKeyPemFile);
$connectionTimeout = 30;
$connectionType = STREAM_CLIENT_CONNECT | STREAM_CLIENT_PERSISTENT;
$connection = stream_socket_client($apnsServer, $errorNumber, $errorString, $connectionTimeout,$connectionType,$stream);

if (!$connection){
    echo "Failed to connect to the APNS server. Error = $errorString <br/>";
    exit;
}
else{
    echo "Successfully connected to the APNS. Processing...</br>";
}
$messageBody['aps'] = array('alert' => $message,'badge' => 1, 'sound' => 'default');
$payload = json_encode($messageBody);
$notification = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;
$wroteSuccessfully = fwrite($connection, $notification, strlen($notification));

if (!$wroteSuccessfully){
    echo "Could not send the message<br/>";
} else {
    echo "Successfully sent the message<br/>";
}
fclose($connection); // EDIT : Il fallait rajouter cette ligne pour fermer la connexion et le soucis est résolu !!

Je me retrouve bien avec le message comme quoi c'est bien envoyé, aucune erreur, pourtant, je n'ai aucune notif..


 


Avez-vous une idée du pourquoi du comment ?


Comment gérez vous les notifications envoyées via php ?


 


Merci de votre aide :)


Réponses

  • Personne n'a ce soucis ? :/


  • pour valider toute ta chaine APNS je te conseille vivement d'utiliser un outil comme Pusher



  • pour valider toute ta chaine APNS je te conseille vivement d'utiliser un outil comme Pusher




     


     


    J'utilise déjà  Pusher (cf : premier message ^^) pour tester la réception de notification.. ça fonctionne avec Pusher mais ma question est : comment envoyer une notification push via php ? ^^

  • RomheinRomhein Membre
    novembre 2016 modifié #5

    Ton code me parait bon. As tu utilisé le bon combo de certificat et d'adresse du serveur push apple? Si tu es en environnement de dev ou de distribution ils changent.


  • InsouInsou Membre
    novembre 2016 modifié #6

    J'ai utilisé le certificat de dev et l'adresse push de dev (ssl://gateway.sandbox.push.apple.com:2195)


     


    [edit]


    J'ai regénéré les certificats et j'ai refait le .pem, ça à  l'air de fonctionner..


    Mystère sur le pourquoi que ça ne fonctionnait pas :/


  • InsouInsou Membre
    novembre 2016 modifié #7

    Bon après plusieurs tests, en local ça fonctionne bien (avec le certificat de dev), lorsque je déplace tout sur notre serveur de tests (donc toujours avec le certificat de dev), je me retrouve avec une erreur : 


     



     


    fwrite(): SSL operation failed with code 1. OpenSSL Error messages:


    error:1409F07F:SSL routines:SSL3_WRITE_PENDING:bad write retry


     


    Une idée du soucis ? :/


     


    [edit]


    Bon ok, c'était tout con..il faut juste fermer la connexion avec :



    fclose($connection);
  • InsouInsou Membre
    novembre 2016 modifié #8

    De retour sur mon code et oh surprise, ça ne fonctionne plus alors que tout fonctionnait bien avant..


     


    Nouvelle erreur :


     



    Warning :  stream_socket_client(): SSL operation failed with code 1. OpenSSL Error messages


    error:14094438:SSL routines:SSL3_READ_BYTES:tlsv1 alert internal error


     


    Quelqu'un à  déjà  eu le soucis ? 


    En googlant, je me retrouve avec un peu tout et n'importe quoi et c'est pas simple de comprendre d'où vient le problème :/


     


    Est-ce-que le certificat de dev serait limité à  un nombre restreint de push ? ou une autre limitation quelconque ?


  • Nan c'est pas limité en nombre de push (enfin sauf si tu en envoie un grand nombre dans un petit laps de temps), mais par exemple tu pourras recevoir tes notifications uniquement sur tes machines de dev présentent sur ton provisionning profile. 


    Aussi l'erreur que tu donnes provient bien de ton serveur? Il me semble que les connexions avec Apple se font exclusivement en ssl, sinon ca ne marchera pas.


  • Ah oui, c'est juste pour les téléphones de dev, en effet.


    Je vais donc faire mes tests en réel avec le certificat de prod ^^


     


    L'erreur provient bien de mon serveur et d'après mon code php, c'est bien en ssl.. du coup, je ne vois pas ce qui foire :/


    D'autant plus que ça fonctionnait il y a 2 jours.


  • En régénérant le certificat de dev, ça refonctionne...


    Du coup, pourquoi ça n'a fonctionné qu'une journée ? O_o


     


    Une autre question pour avancer sur ce soucis de notification push :


    J'aimerai passer sur le certificat de production mais je n'ai aucune idée de comment faire..


    Autant pour générer le certificat que pour le tester avant la mise en prod sur l'appstore.


     


    Comment vous vous y prenez pour faire tout ça ? :)


  • Utilise Firebase


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