1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies. En savoir plus.
  2. 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.

  1. fr85

    fr85 Member

    Inscrit:
    Mai 22, 2020
    Messages:
    43
    J'aime reçus:
    0
    Bonjour,

    Je recherche des pistes pour récupérer et envoyer le token de Firebase vers une BDD MYSQL sous XCODE. Est-ce quelqu'un aurait un tuto la dessus ? On trouvede tout et rien sur internet et j'avoue que je ne maitrise pas du tout SWIFT ou Objectiv-c pour développer cette partie de mon projet.

    Dommage que PCSOFT ne fasse pas une intégration de Firebase dans le projet IOS comme il le font parfaitement bien avec Android...
     
    Tags:
  2. popoy

    popoy Well-Known Member
    MEMBRE WX

    Inscrit:
    Fev 23, 2018
    Messages:
    1,789
    J'aime reçus:
    962
    Pcsoft utilise 2 technologie différentes pour les notifications.
    Firebase sur android car c'est Google qui a créer android.
    Et la technologie Apple sur ios.
    Ce n'est pas pcsoft mais Apple et Google qui décident
    Voici un pour la partie Apple

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

     
  3. fr85

    fr85 Member

    Inscrit:
    Mai 22, 2020
    Messages:
    43
    J'aime reçus:
    0
    Je te remercie pour ton lien.

    J'ai déjà réussi a intégrer correctement Firebase dans mon projet WM via XCODE. Mon problème est que je ne sais pas comment faire pour récupérer le token et l'enregistrer dans ma base MYSQL. Il faut développer cette partie en Objective-c ou Swift mais je ne sais pas comment le faire.

    En lisant ton lien, il m'est venu une idée. Dis moi si c'est possible :

    Intégrer directement tout le code en C qui figure dans le tuto que tu m'as envoyé dans une procédure dans windev mobile en modifiant le type de langage et ensuite faire appel à une procédure windev qui enregistre le token. Le problème revient au même comment récupérer le token dans le langage C vers une variable utilisable en WLangage.

    J'espère avoir été claire dans la description ;)

    Je te remercie d'avance.

    Bonne journée.
     
  4. khaliassas

    khaliassas Active Member

    Inscrit:
    Mar 4, 2019
    Messages:
    425
    J'aime reçus:
    135

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Il faut développer cette partie en Objective-c ou Swift mais je ne sais pas comment le faire.
    Cliquez pour agrandir...
    ou pas.

    perso j'ai créer un web service qui permet de gérer les notification et les utilisateurs.
    des qu'un téléphone se connecte, je récupère le token et via web service j’enregistre l 'os , le nom utilisateur, et le token).
    (je le fais dans la procédure callback de notificationactive sur le téléphone)

    du coup cote windev toujours en interrogeant le web service je récupère une liste a jours des utilisateur.
     
  • fr85

    fr85 Member

    Inscrit:
    Mai 22, 2020
    Messages:
    43
    J'aime reçus:
    0
    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.
     
  • khaliassas

    khaliassas Active Member

    Inscrit:
    Mar 4, 2019
    Messages:
    425
    J'aime reçus:
    135
    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 de

    Bonjour 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.
     
  • fr85

    fr85 Member

    Inscrit:
    Mai 22, 2020
    Messages:
    43
    J'aime reçus:
    0
    J'avoue que je me suis un peu perdu dans mes explications aussi ! lol x'D

    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 ! :mad:)

    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 ! :openedeyewink:

    Merci de ton aide. :angel:
     
    #7 fr85, Juil 15, 2020
    Dernière édition: Juil 15, 2020
  • popoy

    popoy Well-Known Member
    MEMBRE WX

    Inscrit:
    Fev 23, 2018
    Messages:
    1,789
    J'aime reçus:
    962
    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?
     
  • popoy

    popoy Well-Known Member
    MEMBRE WX

    Inscrit:
    Fev 23, 2018
    Messages:
    1,789
    J'aime reçus:
    962
    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
     
    #9 popoy, Juil 16, 2020
    Dernière édition: Juil 16, 2020
  • khaliassas

    khaliassas Active Member

    Inscrit:
    Mar 4, 2019
    Messages:
    425
    J'aime reçus:
    135
    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 rejoins

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    sur l'obligation de passer par apns.
     
  • fr85

    fr85 Member

    Inscrit:
    Mai 22, 2020
    Messages:
    43
    J'aime reçus:
    0

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    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...
    C'est vrai que j'insite sur Firebase car j'ai déja un script PHP complétement fonctionnel avec pour Android... Et surtout je sais que ca fonctionne avec Firebase car en récupérant manuellement le token dans XCODE et le mettant dans la console de test de Firebase cela fonctionne. Le hic est que je ne sais pas comment récupérer et envoyer vers mysql ce token en C ou Swift.

    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 =

    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);
     
       ?>
    En utilisant le token fourni par la procédure WLangage, j'obtiens le message suivant avec ce script php :

    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é.
     
  • khaliassas

    khaliassas Active Member

    Inscrit:
    Mar 4, 2019
    Messages:
    425
    J'aime reçus:
    135
    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.
     
  • fr85

    fr85 Member

    Inscrit:
    Mai 22, 2020
    Messages:
    43
    J'aime reçus:
    0
    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
     
  • fr85

    fr85 Member

    Inscrit:
    Mai 22, 2020
    Messages:
    43
    J'aime reçus:
    0
    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
     
  • khaliassas

    khaliassas Active Member

    Inscrit:
    Mar 4, 2019
    Messages:
    425
    J'aime reçus:
    135
    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
     
  • fr85

    fr85 Member

    Inscrit:
    Mai 22, 2020
    Messages:
    43
    J'aime reçus:
    0
    Et dans le coup est ce que ce token est directement exploitable dans le script php que j'ai mentionné à ton avis ?
     
  • khaliassas

    khaliassas Active Member

    Inscrit:
    Mar 4, 2019
    Messages:
    425
    J'aime reçus:
    135
    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
     
  • fr85

    fr85 Member

    Inscrit:
    Mai 22, 2020
    Messages:
    43
    J'aime reçus:
    0
    ok merci quand même.

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    as tu peut-être la réponse, comment exploiter le token recu de windev mobile via la procédure classique dans un script externe PHP/CURL, ou est-il déjà exploitable dans cette forme là ?

    Merci
     
  • khaliassas

    khaliassas Active Member

    Inscrit:
    Mar 4, 2019
    Messages:
    425
    J'aime reçus:
    135
  • khaliassas

    khaliassas Active Member

    Inscrit:
    Mar 4, 2019
    Messages:
    425
    J'aime reçus:
    135

    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 hexa
     
  • Partager cette page

    Chargement...