Comment envoyer depuis PHP une notification push à une application WinDev Mobile Android

Android PHP Notification push Google Cloud Messaging GCM WinDev MobileWinDev 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;

?>

Les commentaires sont fermés.