|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
nouvelle api v1 notification |
Débuté par Laurent HERMANN, 17 juil. 2025 13:00 - 8 réponses |
| |
| | | |
|
| |
Membre enregistré 342 messages |
|
Posté le 17 juillet 2025 - 13:00 |
bonjour,
nous envoyons une notification push vers mobile au travers de l' api V1 firebase avec fonction notifpushenvoi
on arrive à se connecter mais le format du token n'est pas le bon le token est stocké en chaine binaire comme l'exemple wdm serveur push
dans la fenetre test api, nous avons cette erreur
Échec envoi : Le service Firebase n'a pas pu traiter la notification (vérifiez que les tokens identification sont valides)
dans quel format est le token ? ?
merci
-- LH |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 280 messages |
|
Posté le 17 juillet 2025 - 16:36 |
Bonjour Laurent,
Il y a énormément de sujets qui traitent de ce problème. C'est récurrent. Bien souvent, c'est lié à un problème de conversion du token entre la partie Mobile et la partie Windows
Voici en gros les étapes par lesquelles je passe :
1) Dans l'application mobile, il faut récupérer le token (buffer) renvoyé par la procédure callback de NotifPushActive() et la transmettre au webservice (ou autre application Windev) en le transformant en chaine Hexa Exemple :
sToken est une chaîne = BufferVersHexa(<token reçu>, SansRegroupement, BigEndian+SansLigne)
2) Dans le webservice Windev (ou l'application qui envoi les notifications), récupérer le token reçu (sous forme de chaine Hexa) et le repasser en Buffer avec HexaVersBuffer() Il suffit ensuite d'utiliser ce buffer dans NotifPushEnvoie()
Cdlt |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 10 messages |
|
Posté le 07 août 2025 - 17:09 |
Bonjour, J’ai bien suivi cette méthode justement.
Sur l’appli mobile, je récupère bien le token via NotifPushToken() dans la callback de NotifPushActive(), puis je le convertis en hexa avec BufferVersHexa(...). Je l’envoie ensuite à mon webservice et je le stocke en base (champ chaîne taille 1024, donc pas de troncation).
Côté serveur, je récupère ce token (vérifié, il est complet), je le reconvertis avec HexaVersBuffer() puis je le passe à NotifPushEnvoie() dans un tableau de buffer avec la clé Firebase V1. Et c’est à ce moment-là que j’ai l’erreur :
"Le service Firebase n’a pas pu traiter la notification (vérifiez que les tokens identification sont valides)"
Le token vient tout juste d’être généré, donc il ne peut pas être expiré. Je pense pas que ce soit un souci de conversion, mais plutôt peut-être un problème avec la clé Firebase V1 ou un paramètre que j’ai raté.
Cordialement. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 10 messages |
|
Posté le 01 septembre 2025 - 14:02 |
Bonjour,
Je me permets de up le sujet, j'ai toujours ce même soucis. Voila le code que j'utilise.
Côté mobile (enregistrement du token)
Procedure ActivationNotifPush(bufIdentifiant est un Buffer, sErreur est une chaîne)
SI Taille(bufIdentifiant) > 0 ALORS gsTokenPush = bufIdentifiant.BufferVersHexa(SansRegroupement, BigEndian+SansLigne) SINON Erreur("Activation PUSH KO : " + sErreur) FIN
Procedure EnregistreTokenPushAprèsConnexion(sEmail est une chaîne)
SI gsTokenPush = "" ALORS Trace("Aucun token push local trouvé") RETOUR FIN
vToken est un JSON vToken.mail = sEmail vToken.token = gsTokenPush
cRequete est un httpRequête cRequete.URL = urlapi + "settoken" cRequete.Méthode = httpPost cRequete.Entête["Content-Type"] = "application/json" cRequete.Contenu = vToken
cRéponse est un httpRéponse = RESTEnvoie(cRequete)
SI cRéponse = Null OU cRéponse..CodeEtat <> 200 ALORS Erreur("Erreur d'enregistrement du token push : " + cRéponse..CodeEtat) FIN
Côté API (envoi notification)
bufToken est un Buffer = looner.tokenPush tabTokens est un tableau de Buffers Ajoute(tabTokens, bufToken)
sCleFirebase est une chaîne = [ { "type": "service_account", "project_id": "xxxx", "private_key_id": "...", "private_key": "-----BEGIN PRIVATE KEY-----\\n...\\n-----END PRIVATE KEY-----\\n", "client_email": "firebase-adminsdk@xxxx.iam.gserviceaccount.com", "token_uri": "https://oauth2.googleapis.com/token" } ]
Notif est une Notification Notif..Titre = "Alerte SOS" Notif..Message = "La balise " + sNumSerie + " a déclenché une alerte SOS !" Notif..Contenu = sNumSerie
tabTokensInvalides est un tableau de Buffers
SI NotifPushEnvoie(Notif, tabTokens, sCleFirebase, tabTokensInvalides, npeFirebaseCM_v1) ALORS Trace("Notification SOS envoyée") SINON Erreur("Échec envoi push : " + ErreurInfo()) FIN
FIN
J'ai suivi la syntaxe de la doc et correctement enregistrer le token de l'appli mobile vers le web service, mais toujours cette même erreur (alors que le token en question est bien valide) "Le service Firebase n’a pas pu traiter la notification (vérifiez que les tokens identification sont valides)" |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 280 messages |
|
Posté le 01 septembre 2025 - 15:28 |
Bonjour,
Plusieurs choses à vérifier :
Il a peut être une incohérence dans le nom du package ou du project_id Lorsque tu génères l'application Android, vérifie que le package indiqué à la page n°3 correspond bien à celui qui figure dans le fichier google-services.json (qui est indiqué page 13)

Vérifies également que le "project_id" de ce fichier (google-services.json) est identique à celui contenu dans FirebaseCloudMessagingV1.json (dans ton code qui envoi la notification)
Autre chose : Essayes de charger "l'original" du fichier FirebaseCloudMessagingV1.json directement dans ta variable sCleFireBase par fChargeBuffer() plutôt que de le déclarer dans ton code. La clé privée (private_key) étant assez longue, il y a peut être un retour charriot ou autre caractère qui s'est glissé dans ton copier/coller
Cdlt |
| |
| |
| | | |
|
| | |
| |
Posté le 01 septembre 2025 - 17:40 |
Bonjour,
Voici ce que nous faisons et cela fonctionne parfaitement.
Côté mobile, nous enregistrons directement le buffer de cette manière : AnsiVersUnicode(bufToken) Puis on l'envoie à travers un webservice au serveur pour l'utiliser.
Cordialement, |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 10 messages |
|
Posté le 01 septembre 2025 - 17:45 |
Meri pour ta réponse.
J’ai vérifié le package name et le project_id : les deux sont corrects. Pour la clé, je la charge via fChargeBuffer() mais, avec cette méthode, elle est lue comme nulle au moment de l’envoi (NotifPushEnvoie). À ce stade, je ne pense pas que le souci vienne de la clé/service account, mais plutôt du token, même si je vois pas de problème lors de son enregistrement en base et de l'envoi au service. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 280 messages |
|
Posté le 02 septembre 2025 - 07:59 |
Gikali a écrit :
Meri pour ta réponse. Pour la clé, je la charge via fChargeBuffer() mais, avec cette méthode, elle est lue comme nulle au moment de l’envoi (NotifPushEnvoie).
Bonjour,
Ce n'est pas normal que la clé soit "nulle" quand tu la charges avec fChargeBuffer() car FirebaseCloudMessagingV1.json un JSON ! Le chemin indiqué dans la fChargeBuffer() doit être incorrect.
Autre solution : Mettre FirebaseCloudMessagingV1.json dans la bibliothèque et le charger avec fChargeRessource()
Ce que je trouve bizarre dans ton code de déclaration de la chaine sCleFirebase, c'est la présence des "\\n". Il ne devrait normalement pas y avoir de doubles \\
La suggestion de Stéphane est pertinente mais tu as indiqué (en #4) que tes Token sont bien récupérés et "valides". C'est la raison pour laquelle je penche plutôt vers un problème de chargement de la clé Firebase.
Pour info : Je viens de vérifier et je n'ai pas de doubles \\ dans mon fichier FirebaseCloudMessagingV1.json et je te confirme qu'il n'est pas nulle quand je le charge avec fChargeBuffer() ou fChargeRessource()
CdltMessage modifié, 02 septembre 2025 - 08:02 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 10 messages |
|
Posté le 02 septembre 2025 - 11:52 |
Bonjour, Avec fChargeRessource() ça marche et je recois bien ma notif, merci beaucoup pour votre aide ! |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|