[SWIFT-PHP] Notifications iOs 10 ?
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
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 ? ^^
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.
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
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 :
Une idée du soucis ?
[edit]
Bon ok, c'était tout con..il faut juste fermer la connexion avec :
De retour sur mon code et oh surprise, ça ne fonctionne plus alors que tout fonctionnait bien avant..
Nouvelle erreur :
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