Android C2DM Notification push en bash avec wget

plop à tous … encore un article « borderline » et completement useless …

Cette fois pour tester les notifications C2DM (cloud to device messaging), l’équivalent Android des push iphone en un peu plus complexe nécessité d’avoir un compte google devant s’authentifier pour ensuite envoyer un message par device_id (le device id pouvant expirer, tout comme l’authentification), pour les push iphone il suffisait d’avoir les tokens et basta ^^).

Mais au final le système répond plutôt rapidement, cela dit, en suivant de nombreux tuto sur le developement d’application utilisant C2DM (ici un premier tuto complet et ici un second tuto assez complet et intéressant).

Le problème c’est que pour tester le C2DM, la méthode nécessitant une authentification, et l’utilisation d’un header spé, pour tester l’envoi de notifications, certains recommendent de créer une seconde appli android pour envoyer les push, ou bien encore d’utiliser curl pour les requêtes, un outil qui n’est jamais installé de base sur une machine (la plupart des sytèmes unix intégrant wget, pourquoi utiliser curl?).

Donc pour le fun, voici ma version wgeté (j’ai découvert l’usage des headers sur wget) :

#!/bin/bash

if [ $# != 3 ]
then
        echo "Usage : $0 'mail' 'reg_id' 'message'"
        exit
fi
email="$1"
registration_id="$2"
message="$3"

post_data="registration_id=$registration_id&data.message=$message&collapse_key=0"

if [ ! -f /tmp/ClientLogin ]
then
        read -p "Password : " -e password
        wget "https://www.google.com/accounts/ClientLogin" --post-data="Email=$email&Passwd=$password&accountType=GOOGLE&service=ac2dm" -qO- > /tmp/ClientLogin
fi

auth=`cat /tmp/ClientLogin|grep "Auth"|awk '{split($0,array,"Auth="); print array[2]}'`

wget "https://android.apis.google.com/c2dm/send" --header="Authorization: GoogleLogin auth=$auth" --post-data="$post_data" --no-check-certificate -qO-

Si le script ne renvoit rien, c’est bon, si il répond par un Error=UnMessageDerreur, c’est pas bon, bon dev 😉