WinDev Mobile peut recevoir des notifications utilisant la plateforme GCM (Google Cloud Messaging) et les fonctions NotifPushActive et NotifPushProcedure.
Quelle déception/frustration de constater que seule une application WinDev peut envoyer une telle notification (fonction NotifPushEnvoie) ! Dans un monde où la communication entre systèmes hétérogènes devient incontournable, comment accepter une telle limitation qui restreint les échanges dans le microcosme WxxDev ?
Dans le cadre d’un de nos projets, nous avons besoin d’envoyer des notifications à une application WinDev Mobile Android depuis PHP. Après des essais infructueux, nous avons constaté l’incompatibilité des fonctions proposées par WinDev Mobile avec le standard proposé par les APIs Google.
La Squad InfoGones s’est alors mise en recherche d’un contournement. Nous avons hacké la connexion https établie entre une application WinDev et les serveurs Google lors de l’appel à la fonction NotifPushEnvoie. Nous avons ainsi pu intercepter les données envoyées par l’application WinDev à destination de WinDev Mobile (via Google Cloud Messaging). Effectivement, nous avons constaté l’utilisation d’une structure d’échanges spécifique qui rend impossible l’utilisation d’un autre langage sans connaître ladite structure.
On y retrouve les divers éléments du type Notification
proposé par WinDev :
WX_PUSH_VERSION WX_PROP_TITRE WX_PROP_MESSAGE WX_PROP_ICONE WX_PROP_TEXTEDEROULANT WX_PROP_SON WX_PROP_VIBRATION WX_PROP_AFFICHAGELED WX_PROP_COULEURLED WX_PROP_ACTIVEAPPLICATION WX_PROP_SUPPRIMABLE WX_PROP_CONTENU |
Pour que la notification soit comprise par l’application WinDev Mobile, le message qui transite par les serveurs Google doit donc contenir les valeurs ci-dessus pour une bonne prise en compte.
Ci-dessous, un script de test en PHP. Pour l’utiliser il convient de créer un projet dans votre Google Developers Console et de suivre le processus décrit dans l’aide de WinDev pour récupérer la clé d’API.
<?php // Clé API Google API’s Console define( ‘API_ACCESS_KEY’, ‘AIzaSyCGhsmNMe9Dlcg7ORhYCwSYAxdYWZ3nritAkE’ ); //Tableau des tokens destinataires $registrationIds = array(« APA91bFh_1877w2uQK0gogbWJBkscMxjKwIj0SmYnv52shc7S9c4zgr7RIsfI_RPnOXEEi7LQNl0jAk0CxNC_sNMA-S5jBGFiWRQ9JYP4MoI2-FvNurb1AD8k_NHJXBaWDy3WZ4UbTOjjFrvxYoPnRs7N3P4PH2JCpkllnoWC_NvSUHqWlE » ); $wx_data = array( ‘WX_PUSH_VERSION’ => « 1.0 », ‘WX_PROP_TITRE’ => « Titre », ‘WX_PROP_MESSAGE’ => « Nouvelle notification », ‘WX_PROP_ICONE’ => « », ‘WX_PROP_TEXTEDEROULANT’ => « », ‘WX_PROP_SON’ => « », ‘WX_PROP_VIBRATION’ => « false », ‘WX_PROP_AFFICHAGELED’ => « false », ‘WX_PROP_COULEURLED’ => 65280, ‘WX_PROP_ACTIVEAPPLICATION’ => « true », ‘WX_PROP_SUPPRIMABLE’ => « true », ‘WX_PROP_CONTENU’ => « » ); $fields = array ( ‘registration_ids’ => $registrationIds, ‘data’ => $wx_data ); $headers = array ( ‘Authorization: key=’ . API_ACCESS_KEY, ‘Content-Type: application/json’ ); $ch = curl_init(); curl_setopt( $ch,CURLOPT_URL, ‘https://android.googleapis.com/gcm/send’ ); curl_setopt( $ch,CURLOPT_POST, true ); curl_setopt( $ch,CURLOPT_HTTPHEADER, $headers ); curl_setopt( $ch,CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch,CURLOPT_SSL_VERIFYPEER, false ); curl_setopt( $ch,CURLOPT_POSTFIELDS, json_encode( $fields ) ); $result = curl_exec($ch ); curl_close( $ch ); echo $result; ?> |
Salut salut,
Très bonne initiative ce petit topic ! Merci beaucoup.
Est-ce que la même manipulation/solution est prévue pour Firebase (donc compatible avec IOS) ??
Merci encore
Bonne journée.
Je n’ai pas tester cette solution sous Firebase.
A voir