re,
J'ai aussi énooooormément galéré pour savoir comment récupérer et stocker les TOKEN des smartphone Android et IOS sous MySql mais j'ai trouvé la solution que voici :
Au lancement de l'application je récupère le token de l'appareil(Android/ios). Ensuite si l'appareil est connecté à Internet, j'envoie en BDD Mysql le token et le type d'OS vers une base de donnée Mysql (important pour l'envoi de notification push ensuite).
Cela fonctionne sans soucis jusqu'à aujourd'hui et voici comment je procède :
1) sous windev mobile, initialisation du projet j'appelle une procédure globale qui récupère le TOKEN :
NotifPushActive(Récupération_Token)
PROCÉDURE Récupération_Token(bufToken est un Buffer, sErreurNotif est une chaîne)
SI Taille(bufToken) > 0 ALORS
HLitPremier(Token,IDToken)
<COMPILE SI TypeConfiguration=iOS>
sZchaine_token est une chaîne =BufferVersHexa(bufToken, 4, BigEndian)
sZchaine_token=ChaîneSupprime(sZchaine_token,RC)
sZchaine_token=ChaîneSupprime(sZchaine_token," ")
Token.Token_user=sZchaine_token
<FIN>
<COMPILE SI TypeConfiguration=Android>
Token.Token_user=UTF8VersChaîne(bufToken)
<FIN>
SI HEnDehors(Token) ALORS
HAjoute(Token)
SINON
HModifie(Token)
FIN
SINON
Info("Erreur d'enregistrement : " + sErreurNotif)
FIN
Ma table token est composée de 4 zones
IDTOKEN (ID automatique, IDUser texte de 9, Token_USER teste de 500 (important car la longueur entre IOS et Android est différente, Token_envoyé texte de
2) si le smartphone est connecté à Internet je fais ensuite appel à un Webservice qui s'occupe d'envoyer le token en BDD MySQL externe :
// on envoie le token du device si cela n'a pas encore été fait
HLitPremier(Token,IDToken)
SI PAS HEnDehors(Token) ALORS
SI Token.Token_envoye<>"OUI" ALORS // si en BDD locale le Token n'a pas été envoyé
ZtypeOS est une chaîne =""
sZUserIdWP est une chaîne ="0"
<COMPILE SI TypeConfiguration=Android>
ZtypeOS="ANDROID"
<FIN>
<COMPILE SI TypeConfiguration=iOS>
ZtypeOS="IOS"
<FIN>
HLitPremier(user,IDuser)
SI HTrouve(user) ALORS
sZUserIdWP=user.IDUserWP
FIN
Token.Token_envoye="OUI"
HModifie(Token)
_MAJUserToken(sZUserIdWP,ZtypeOS,Token.Token_user)
FIN
FIN
PROCÉDURE _MAJUserToken(sZIDUserWP est une chaîne,sZtypeOS est une chaîne,sZToken_user est une chaîne)
maReq.URL =ZAdresse_Serveur+"/MRDB/ADDTOKEN.php?Id_UserWP="+sZIDUserWP+"&TypeOS="+sZtypeOS+"&Token="+sZToken_user
maRep =RESTEnvoie(maReq)
SI ErreurDétectée OU maRep.CodeEtat <>"200" ALORS
Erreur(ErreurInfo(errComplet))
FIN
Script PHP (côté Webservice) pour stocker le token (fichier ADDTOKEN.php) :
public function Add_Token($IDWP,$OS,$TOKEN){
try
{
$stmt = $this->conn->prepare('INSERT INTO TOKEN (Date_Token,IDWP, TYPEOS, TOKEN) VALUES (CURRENT_TIMESTAMP,:IDWP, :TYPEOS, :TOKEN)');
$stmt->bindParam(':IDWP',$IDWP);
$stmt->bindParam(':TYPEOS',$OS);
$stmt->bindParam(':TOKEN',$TOKEN);
if($stmt->execute()){
return true;
}
return false;
}
catch(PDOException $e)
{
echo $e->getMessage();
}
}
Et c'est tout, les Token IOS et Android sont en BDD sous Mysql sans soucis et cela fonctionne 100%
Ensuite pour les envois de notification push vers ces token, j'ai créé un script PHP qui s'en occupe.
Pour l'envoi Android, pas de soucis on sait récupérer vers quels smartphones ont été envoyé les notifications (donc on peut mettre à jour la BDD en supprimant les token qui ne sont pus actifs) mais sous IOS ce n'est pas possible car sécurité Apple oblige, on envoie le message vers les token mais APPLE ne retournera pas lequel à reçu ou non la notification ( si on envoi 100 messages APPLE va répondre par exemple 90/100. Donc 10 n'ont pas été envoyés. Il y a de fortes chances que l'appli à été supprimée sur 10 smartphones, mais on ne sait pas quel smartphone donc on ne sait pas quel token et on ne peut pas mettre à jour la BDD MySQL)
Pour tout cela j'ai mis à peu près 3 semaines galères, de recherche et de développement pour comprendre comment récupérer les token des smartphones, les stocker et comment envoyer des notifications push quelque soit le smartphone (IOS/Android).
Voilà vous savez tout. j'espère que cela pourra servir à plus d'un.
Cdlt,
-
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 2 sur 3
Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!
en tous cas il donne la methode via language tiers et le token n'est pas sous la forme hexaCliquez pour agrandir...
Khaliassas, cette information n'est plus à jour et il faut faire un subtile mélange entre l'information de PCSOFT et ce que dit Apple (IOS) ou Google (Android). A voir sur les sites correspondant (par exemple, badge ou Sound ne sont plus utilisés et il faut impérativement utiliser l'option priority uniquement pour Android sinon cela ne fonctionnera pas (j'ai aussi galéré pour trouver ce truc).Cliquez pour agrandir...
re,
J'ai aussi énooooormément galéré pour savoir comment récupérer et stocker les TOKEN des smartphone Android et IOS sous MySql mais j'ai trouvé la solution que voici :
Au lancement de l'application je récupère le token de l'appareil(Android/ios). Ensuite si l'appareil est connecté à Internet, j'envoie en BDD Mysql le token et le type d'OS vers une base de donnée Mysql (important pour l'envoi de notification push ensuite).
Cela fonctionne sans soucis jusqu'à aujourd'hui et voici comment je procède :
1) sous windev mobile, initialisation du projet j'appelle une procédure globale qui récupère le TOKEN :
NotifPushActive(Récupération_Token)
PROCÉDURE Récupération_Token(bufToken est un Buffer, sErreurNotif est une chaîne)
SI Taille(bufToken) > 0 ALORS
HLitPremier(Token,IDToken)
<COMPILE SI TypeConfiguration=iOS>
sZchaine_token est une chaîne =BufferVersHexa(bufToken, 4, BigEndian)
sZchaine_token=ChaîneSupprime(sZchaine_token,RC)
sZchaine_token=ChaîneSupprime(sZchaine_token," ")
Token.Token_user=sZchaine_token
<FIN>
<COMPILE SI TypeConfiguration=Android>
Token.Token_user=UTF8VersChaîne(bufToken)
<FIN>
SI HEnDehors(Token) ALORS
HAjoute(Token)
SINON
HModifie(Token)
FIN
SINON
Info("Erreur d'enregistrement : " + sErreurNotif)
FIN
Ma table token est composée de 4 zones
IDTOKEN (ID automatique, IDUser texte de 9, Token_USER teste de 500 (important car la longueur entre IOS et Android est différente, Token_envoyé texte de
2) si le smartphone est connecté à Internet je fais ensuite appel à un Webservice qui s'occupe d'envoyer le token en BDD MySQL externe :
// on envoie le token du device si cela n'a pas encore été fait
HLitPremier(Token,IDToken)
SI PAS HEnDehors(Token) ALORS
SI Token.Token_envoye<>"OUI" ALORS // si en BDD locale le Token n'a pas été envoyé
ZtypeOS est une chaîne =""
sZUserIdWP est une chaîne ="0"
<COMPILE SI TypeConfiguration=Android>
ZtypeOS="ANDROID"
<FIN>
<COMPILE SI TypeConfiguration=iOS>
ZtypeOS="IOS"
<FIN>
HLitPremier(user,IDuser)
SI HTrouve(user) ALORS
sZUserIdWP=user.IDUserWP
FIN
Token.Token_envoye="OUI"
HModifie(Token)
_MAJUserToken(sZUserIdWP,ZtypeOS,Token.Token_user)
FIN
FIN
PROCÉDURE _MAJUserToken(sZIDUserWP est une chaîne,sZtypeOS est une chaîne,sZToken_user est une chaîne)
maReq.URL =ZAdresse_Serveur+"/MRDB/ADDTOKEN.php?Id_UserWP="+sZIDUserWP+"&TypeOS="+sZtypeOS+"&Token="+sZToken_user
maRep =RESTEnvoie(maReq)
SI ErreurDétectée OU maRep.CodeEtat <>"200" ALORS
Erreur(ErreurInfo(errComplet))
FIN
Script PHP (côté Webservice) pour stocker le token (fichier ADDTOKEN.php) :
public function Add_Token($IDWP,$OS,$TOKEN){
try
{
$stmt = $this->conn->prepare('INSERT INTO TOKEN (Date_Token,IDWP, TYPEOS, TOKEN) VALUES (CURRENT_TIMESTAMP,:IDWP, :TYPEOS, :TOKEN)');
$stmt->bindParam(':IDWP',$IDWP);
$stmt->bindParam(':TYPEOS',$OS);
$stmt->bindParam(':TOKEN',$TOKEN);
if($stmt->execute()){
return true;
}
return false;
}
catch(PDOException $e)
{
echo $e->getMessage();
}
}
Et c'est tout, les Token IOS et Android sont en BDD sous Mysql sans soucis et cela fonctionne 100%
Ensuite pour les envois de notification push vers ces token, j'ai créé un script PHP qui s'en occupe.
Pour l'envoi Android, pas de soucis on sait récupérer vers quels smartphones ont été envoyé les notifications (donc on peut mettre à jour la BDD en supprimant les token qui ne sont pus actifs) mais sous IOS ce n'est pas possible car sécurité Apple oblige, on envoie le message vers les token mais APPLE ne retournera pas lequel à reçu ou non la notification ( si on envoi 100 messages APPLE va répondre par exemple 90/100. Donc 10 n'ont pas été envoyés. Il y a de fortes chances que l'appli à été supprimée sur 10 smartphones, mais on ne sait pas quel smartphone donc on ne sait pas quel token et on ne peut pas mettre à jour la BDD MySQL)
Pour tout cela j'ai mis à peu près 3 semaines galères, de recherche et de développement pour comprendre comment récupérer les token des smartphones, les stocker et comment envoyer des notifications push quelque soit le smartphone (IOS/Android).
Voilà vous savez tout. j'espère que cela pourra servir à plus d'un.
Cdlt,Cliquez pour agrandir...
merci beaucoup pour ton partage d’info.
De mon coté j’arrive très bien à enregistrer le token IOS mais après je bloque pour l’utiliser.
justement comment envoies tu tes notifications Vers IOS en utilisant php ? Peux tu me partager ton script php d’envoie de notification en utilisant les token iOS ?
merci.