PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → nouvelle api v1 notification
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)

// Clé Firebase JSON (service account, version test)
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"
}
]

// Création notification
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

// Envoi via FCM v1
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()

Cdlt
Message 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 !