Ok je comprends très bien cela ressemble à la méthode d’exemple de PCSOFT.
Comment peux tu utiliser ce token dans un script PHP pour envoyer une notification comme on peut le faire avec Firebase pour Android.
J’ai un script php/curl qui me permet de récupère mes token dans ma bdd mysql et j’envoie la notification qui passe par le serveur firebase et ensuite envoyé sur le téléphone. Mais pour IOS le format du token qui est donné par la méthode WM ne permet pas de l’exploiter par Firebase.
-
Bonjour tout le monde ! Veillez consulter la Politique de forum pour comprendre nos règles, Merci a vous !Rejeter la notice
Notification Push avec Firebase pour IOS
Discussion dans 'Windev Mobile' créé par fr85, Juil 14, 2020.
Page 1 sur 3
les notifications ios de windev passe par apple pas par firebase.
du coup je suis un peut perdu.
du coups je comprend plus du tout ton pb.
je te renvoie au message deBonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!
.
pour moi ton téléphone renseigne ta base (mysql) de la maniere que tu veux(webservice ou srcipt). je te conseille d’enregistrer l'os, car la notification ne transite pas par le même serveur selon ios ou android.
pour ios il te faudra un certificat fournis par apple. un serveur sécurisé (ssl).
la fonction notifiactionenvoie prend comme paramètre android, ios production ou ios developpement.
attention le token générer pour ios production ne fonctionne pas en envoie production et inversement.
J'avoue que je me suis un peu perdu dans mes explications aussi ! lol
Je reprends tout depuis le début :
J'ai actuellement une application mobile Android dans laquelle j'ai intégré correctement Firebase via WM pour que mon application puisse recevoir des notifications push.
J'utilise la procédure suivante pour activer les notifications :
[windev]PROCÉDURE ActivationNotifPush(bufIdentifiant est un Buffer, sErreur est une chaîne)
/ Gestion de l'enregistrement
PROCEDURE EnregistreNotifPush(Token est un Buffer, ErreurNotif est une chaîne)
SI Taille(Token) > 0 ALORS
// Informe le serveur d'application du nouvel identifiant
EnvoieTokenversBDD(Token)
SINON
// Remonte l'erreur
Info("Erreur d’enregistrement : " + ErreurNotif)
FIN
[/windev]
Je récupère donc correctement mon Token venant de Firebase et je le stock dans ma BDD MYSQL
Les notifications push sont automatiquement générées via un serveur web hébergeant script php/curl qui récupére mes tokens précédement stockés dans ma base, transite via les serveurs Firebase qui lui envoie la notifications vers les terminaux correspondants à ces tokens.
Donc tout va bien pour Android.
Maintenant pour cette même application mais pour IOS, les choses se compliquent !
J'ai intégré correctement Firebase via CocoaPods dans mon projet XCODE. (Ce n'a pas été une mince affaire !)
Je récupère donc ce token qui correspond au format Firebase. Maintenant je suis bloqué pour stocker ce token vers ma BDD MYSQL, car il faut passer en swift ou objectiv-c et e ne maitrise pas du tout !
Si j'utilise la même procédure Wlangage que j'ai montré plus haut cela ne fonctionne pas cra j'obtiens un token sous ce format : 808DFD925 736BC32A CA69B6FB A18BD17A 01ECD496 A2130516 4A03426E C10E840 --> Format du token donné par Apple Apns et complètement différent de firebase
Je ne peux pas utiliser directement le token généré par windev mobile car il ne correspond pas au format Firebase ! Le token généré par windev mobile pour IOS qui passe par APNS de Apple, est uniquement utilisable si on utilise une application windev qui permet de réutiliser ce token.
Comme tu dis la fonction NotifPushEnvoie permet d'envoyer une notification IOS (Ca fonctionne très bien chez moi lors d'un test en local) MAIS uniquement avec une application windows/inux créée par windev comme on peut retrouver dans l'exemple fourni pr PCSOFT ! Donc impossible pour moi d'utiliser ce token pour envoyer ma notification depuis mon script PHP !
A moins que tu as une solution à me proposer que je ne connais pas pour utiliser le token généré par windev mobile/Apns dans un script php/curl...... Et finalement je me dis que la solution est peut-être par la, je vais creuser en cherchant éventuellement un script php qui permet d'envoyer des notifications en utilisant le token directement d'Apple.
J'espère avoir été plus claire dans mon problème !
Merci de ton aide.![]()
Le problème c'est que tu insistes à vouloir utiliser firebase sur ios.
Or, quel est le format attendu par firebase?
As-tu un lien expliquant le bon format ?
Tu dis qu'il faut du swift ou objective c, alors que normalement tout est possible de ce que tu veux faire avec wlangage.
Tu dis que tu as intégré dans xcode mais as-tu fourni ton code ou ta façon de faire ?
Tu dis que tu obtiens
808DFD925 736BC32A CA69B6FB A18BD17A 01ECD496 A2130516 4A03426E C10E840
Mais tu ne dis pas quel est le problème.
Peut être faut il une convertion, problème vers quoi?
Par contre il existe plusieurs liens pour créer un webservice php avec apns.
Voici un des liens
Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!
Il existe aussi des méthodes pour utiliser Apns avec firebase
Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!
Directement fourni par Google.
Tu es donc quand même obligé d'utiliser APNS
Donc du coup pour ios tu ne veux pas utiliser le wlanguage .
donc pas sur que ce soit le bon forum.
avec google j'a trouve :
Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!
c'est une librairie open source pour script php pour apns.
et je rejoinsBonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!
sur l'obligation de passer par apns.
Le problème c'est que tu insistes à vouloir utiliser firebase sur ios.
Or, quel est le format attendu par firebase?
As-tu un lien expliquant le bon format ?
Tu dis qu'il faut du swift ou objective c, alors que normalement tout est possible de ce que tu veux faire avec wlangage.
Tu dis que tu as intégré dans xcode mais as-tu fourni ton code ou ta façon de faire ?
Tu dis que tu obtiens
808DFD925 736BC32A CA69B6FB A18BD17A 01ECD496 A2130516 4A03426E C10E840
Mais tu ne dis pas quel est le problème.
Peut être faut il une convertion, problème vers quoi?Cliquez pour agrandir...
Le format attendu du token pour firebase est le suivant par exemple (C'est le même format que j'obtiens correctement avec Android avec la procédure WLangage que j'ai mise plus haut dans le fil) : dvV98sl9Y9M:APA91bFcBIgFqTUKOGYkzHDEWKUyE26CsgxWsMWqeATjQD2gq7A8uVcZr_vFUrZqOzuZp4aZFwvPz5bn6ahS7wbri24do6hcl6AXiaxYyYSftUxCef6AwWs2aEImkzr3QhdHap4ugzZN
J'ai intégré dans XCODE Firebase et celui ci fonctionne très bien, je l'ai fait via le terminal du mac avec COCOAPOD et j'ai intégré les fichiers que j'ai repris d'un exemple de Firebase pour IOS.
Le problème avec la procédure WLangage que j'ai citée plus haut dans le fil, j'obtiens le token suivant pour IOS : 808DFD925 736BC32A CA69B6FB A18BD17A 01ECD496 A2130516 4A03426E C10E840
Est-ce le bon format pour utiliser directement avec Apple APNS je ne sais pas , mais je pense que oui car l'appli via cette procédure WM se connecte à APNS comme le dit la doc de PCSOFT, donc le token qui m'est renvoyé est forcément celui fourni par Apple normalement...
Après j'ai la même question que toi comment convertir le token obtenu par la procédure WLangage IOS en celui attendu par Firebase. La est la question !
Si je n'utilise pas Firebase :
Deuxième question, si on ne peut pas convertir ce token otenu pour IOS vers le format de token Firebase (Ce qui peut être logique et compréhensible), comment utiliser le token obtenu dans WM IOS directement dans un script PHP ? Car c'est une action précise faite sur un site internet qui doit déclencher une notification Push sur les mobiles (Dès qu'une actualité est déposée sur le site internet, une notification se déclenche à ceux qui ont instalé l'application pour les informer d'une nouvelle actualité, en récupérant les token que j'ai précédemment stocker lorsque ils ont ouvert l'application.)
J'ai trouvé le script suivant pour communiquer avec APNS :
PHP:
<?php
// THE FINAL SCRIPT WITHOUT DEPENDENCIES!!! ...except curl with http2
$device_token = "EA4E4E02 A5DA0D9A BED6713C 1217DCCF 29CE16E2 2AE95943 F57E36F8 17354363";
//echo $key;
$kid = "XXXXXXXXXXXXXXXX";
$teamId = "XXXXXXXXXXX";
$app_bundle_id = "com.XXXXX.XXXXXXXe";
$base_url = "https://api.development.push.apple.com";
$header = ["alg" => "ES256", "kid" => $kid];
$header =
$claim = ["iss" => $teamId, "iat" =>
$claim =
$token = $header.".".$claim;
// key in same folder as the script
$filename = "AuthKey_XXXXXXXXXXXXXXX.p8";
$pkey =
$signature;
$sign =
$jws = $token.".".$sign;
$message = '{"aps":{"alert":"You are welcome.","sound":"default"}}';
function sendHTTP2Push($curl, $base_url, $app_bundle_id, $message, $device_token, $jws) {
$url = "{$base_url}/3/device/{$device_token}";
// headers
$headers =
"apns-topic: {$app_bundle_id}",
'Authorization: bearer ' . $jws
);
// other curl options
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_2_0,
CURLOPT_URL => $url,
CURLOPT_PORT => 443,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POST => TRUE,
CURLOPT_POSTFIELDS => $message,
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_TIMEOUT => 30,
CURLOPT_SSL_VERIFYPEER => FALSE,
CURLOPT_HEADER => 1
));
// go...
$result =
if ($result === FALSE) {
throw new Exception("Curl failed: " .
}
// get response
$status =
return $status;
}
// open connection
$curl =
sendHTTP2Push($curl, $base_url, $app_bundle_id, $message, $device_token, $jws);
?>
// THE FINAL SCRIPT WITHOUT DEPENDENCIES!!! ...except curl with http2
$device_token = "EA4E4E02 A5DA0D9A BED6713C 1217DCCF 29CE16E2 2AE95943 F57E36F8 17354363";
//echo $key;
$kid = "XXXXXXXXXXXXXXXX";
$teamId = "XXXXXXXXXXX";
$app_bundle_id = "com.XXXXX.XXXXXXXe";
$base_url = "https://api.development.push.apple.com";
$header = ["alg" => "ES256", "kid" => $kid];
$header =
Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!
(Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!
($header));$claim = ["iss" => $teamId, "iat" =>
Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!
()];$claim =
Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!
(Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!
($claim));$token = $header.".".$claim;
// key in same folder as the script
$filename = "AuthKey_XXXXXXXXXXXXXXX.p8";
$pkey =
Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!
("file://{$filename}");$signature;
Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!
($token, $signature, $pkey, 'sha256');$sign =
Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!
($signature);$jws = $token.".".$sign;
$message = '{"aps":{"alert":"You are welcome.","sound":"default"}}';
function sendHTTP2Push($curl, $base_url, $app_bundle_id, $message, $device_token, $jws) {
$url = "{$base_url}/3/device/{$device_token}";
// headers
$headers =
Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!
("apns-topic: {$app_bundle_id}",
'Authorization: bearer ' . $jws
);
// other curl options
Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!
($curl,Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!
(CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_2_0,
CURLOPT_URL => $url,
CURLOPT_PORT => 443,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POST => TRUE,
CURLOPT_POSTFIELDS => $message,
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_TIMEOUT => 30,
CURLOPT_SSL_VERIFYPEER => FALSE,
CURLOPT_HEADER => 1
));
// go...
$result =
Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!
($curl);if ($result === FALSE) {
throw new Exception("Curl failed: " .
Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!
($curl));}
Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!
($result."\n");// get response
$status =
Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!
($curl);return $status;
}
// open connection
$curl =
Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!
();sendHTTP2Push($curl, $base_url, $app_bundle_id, $message, $device_token, $jws);
?>
HTTP/2 400
apns-id: 8A350FBD-0069-860D-0FF2-154C9CE61853
{"reason":"BadDeviceToken"}
Donc j'en déduis que le token fourni par windev mobile n'est pas bon, ou alors pas au bon format ou alors je suis tellement paumé que je ne comprends plus rien, (ou bien peut être un problème de certificat aussi....Mais il n'a pas l'air de mentionner un refus de connexion à APNs et ce certificat fonctionne très bien dans la console de test de Firebase.)
Je comprends très bien que je suis obligé de passer par APNs car c'est eux qui fournissent le token et eux qui envoie la notification vers le mobile associé.
as tu tenter un hexaversbuffer....
en effet je stock mes identifiant sous forme hexa et sont de cette forme la.
par contre ma fonction callback a moi me renvoi bien un buffer de chaine.
Je vais tenter cette manipulation,
J'ai essayé de mettre ma table MYSQL en binaire ce qui me donne un token sous cette forme : 63dde4ea 311e42f348feed8dd3455bba325239ceb4e699d25615dcf565d8c824 mais visiblement cela ne fonctionne pas non plus....
As tu moyen de tester de ton côté d'utiliser ce script php avec tes tokens de ton application mobile pour voir si déjà il n'y a pas d'erreur dans ce script et voir si cela fonctionne avec le format de token que tu obtiens grâce à windev mobile.
Merci
J'avais oublié que je faisais déja un bufferershexa
[windev]test_buf est une chaîne UNICODE = BufferVersHexa(bufIdentifiant,4,BigEndian)
[/windev]
Pour avoir un token exploitable, sinon le token avec un simple buffer ne ressemble à rien
JENHANI apprécie ceci.
oui car il contient des caractères non affichable...donc tu es obliger de faire l'inverse pour avoir le vrai token a passer en paramètre
si je stocke le token en buffer dans ma base j'ai des merdes...
du coup j'ai fait pareil bufferverhexa pour sauvegarder.. et hexa vers buffer pour notifier
Et dans le coup est ce que ce token est directement exploitable dans le script php que j'ai mentionné à ton avis ?
ben ²j'en sais rien j'utilise un webservice windev qiu envoie la notification. en tous cas c'est ce token que j'envoie.
je ne m'y connais pas en script.
y a que toi qui doit pouvoir tester
Page 1 sur 3