Sur la route d'Oxiane digressions diverses

LeBlog OXiane

18 nov
2014

Utiliser oauth pour se connecter à des services Google sur Android

Je découvre, un peu tard, comment on peut récupérer et utiliser un token d’authentification sur Android. Le but de cet article est de se connecter à un Google Site (sites.google.com) ou n’importe quel autre service Google depuis un device Android, en utilisant le comptes installé sur notre device.

On récupère son AccountManager, qui va nous servir d’une part à lister les comptes disponibles sur votre device, d’autre part à récupérer le token d’authentification.

        AccountManager accountManager = AccountManager.get(mContext);
        //avec mContext votre activité, contexte...

Si on veut, on peut filtrer nous-mêmes sur les comptes d’utilisateur comme ça:

        for (Account a : accountManager.getAccounts())
	{
	        if(a.name.contains("@oxiane.com")){
	        	Log.d("toto", "trouvé un compte oxiane! "+a.name+ " "+a.type);
	        }
	}

Sinon, en spécifiant le type de compte, Android nous affiche une popup pour sélectionner un compte. Par exemple, pour un compte Google, on met « com.google » dans le type de compte.

        accountManager.getAuthTokenByFeatures("com.google", SCOPES, null, mContext, null, null, new MyAccManagerCallBack(), null);

        //Si on a déjà fait le tri sur les comptes, pas besoin de lister tous les comptes Google.
        //ici on fait l'appel pour obtenir un token d'authent avec un Account a
        accountManager.getAuthToken(a, SCOPES, null, true, new MyAccManagerCallBack(), null);

La constante SCOPES utilisée plus haut permet de spécifier quels services notre token pourra utiliser.
Par exemple, si on veut avoir accès aux infos de l’utilisateur, il faut écrire dans notre scope « oauth2:https://www.googleapis.com/auth/userinfo.email ». Si on veut accéder à d’autres services, on peut simplement rajouter des urls après cette valeur, avec un espace. Pour connaître la liste des services Google disponibles avec un token d’authentification, le plus simple est d’aller faire un tour sur le site de playground oauth/.

Requêtes disponibles pour l'API Youtube

Puis, lorsqu’on exécute notre requête sur le playground oauth, bien regarder les headers utilisés:

exécution de la requête sur le playground oauth

Dans cet exemple, comme le but est de se connecter à sites.google.com et d’obtenir les informations de l’utilisateur en JSON, voici la constante SCOPES utilisée:

private final String SCOPES = "oauth2:https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile https://sites.google.com/feeds/";

Lorsque la requête d’authentification est effectuée, un AccountManagerCallBack est appelé, celui que nous avons spécifié plus haut:

private final class OxAccManagerCallBack implements AccountManagerCallback<Bundle> {
		public void run(AccountManagerFuture<Bundle> future) {
		    try {
		        Bundle bundle = future.getResult();
		        //On peut récupérer, si besoin, l'account name et type
		        //bundle.getString(AccountManager.KEY_ACCOUNT_NAME);
		        //bundle.getString(AccountManager.KEY_ACCOUNT_TYPE);
		        authToken = bundle.getString(AccountManager.KEY_AUTHTOKEN);

		       //bim on a récupéré notre token!

		    } catch (Exception e) {
		        System.out.println("getAuthTokenByFeatures() cancelled or failed:");
		        e.printStackTrace();
		        authToken = "failure";
		    }

		    if(!authToken.equals("failure")) {
		        new GetWikiFeedTask().execute(new Void[]{});
		    }
		}
	}

Dans mon exemple, je vais utiliser le token pour aller chercher le contenu du feed du Wiki d’Oxiane, qui se trouve sur un site Google. La clé ici, c’est d’utiliser un Header Http « Authorization: Bearer  » et votre token. Il faut aussi rajouter le header « Gdata-version: 1.4″. Attention, il vaut mieux faire le test sur le playground oauth pour être sûr de la syntaxe et des headers http à fournir.
Concrètement, ce qui est fait ici, c’est l’initialisation de la requête http avec HttpClient avec les headers qui vont bien, l’exécution de la requête et la copie du flux vers un fichier « toto.html » sur la SDcard.

private class GetWikiFeedTask extends AsyncTask<Void, Void, Void> {
		@Override
		protected Void doInBackground(Void... params) {
			HttpClient c = new DefaultHttpClient();
			HttpGet get = new HttpGet("https://sites.google.com/feeds/content/oxiane.com/wiki");
			get.setHeader("Gdata-version", "1.4");
			get.setHeader("Authorization", "Bearer "+authToken);
			try {
				HttpResponse r = c.execute(get);
				copyStream(r.getEntity().getContent(), new File(Environment.getExternalStorageDirectory(), "toto.html"));

			} catch (IOException e) {
				Log.d("toto", "erreur");
				e.printStackTrace();
			}
			return null;
		}
	}

Ne pas oublier les permissions!

    <uses-permission android:name="android.permission.INTERNET" />
    <!-- USE_CREDENTIALS is necessary for Google+ login -->
    <uses-permission android:name="android.permission.USE_CREDENTIALS" />
    <!-- GET_ACCOUNTS is necessary to display email address of logged in user. This permission is optional -->
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />

On peut, si on veut, sauvegarder le token dans les préférences de l’application (encrypté, c’est mieux). Il faudra dans ce cas gérer les codes retour de nos requêtes (401 forbidden, notamment) et rappeler getAuthToken() pour récupérer un nouveau token.

Johann Hilbold

jhilbold

7 nov
2014

LeanKanban France 2014

LeanKanban France 2014

LeanKanban France 2014 à la maison des associations, Paris

Les 5 et 6 Novembre a eu lieu la 3ème conférence LeanKanban France à la maison des associations. Au programme, 41 sessions de présentations, de retours sur expérience, de workshops et de jeux autour du Kanban et du lean management. J’y étais, notamment pour en apprendre un peu plus sur les méthodes d’apprentissage.

Stop Starting, Start Finishing!

« Stop Starting, Start Finishing! » (Arrêtez de commencer, commencer à finir !), c’était le maître mot des présentations. La conférence a commencé par une keynote de David Anderson, nous présentant une rétrospective de 10 ans de Kanban, de qes débuts en tant qu’outil du management agile jusqu’au Modern Management Framework. David Anderson est en outre l’auteur de Kanban: Successful Evolutionary Change for Your Technology Business (Blue Hole Press, 2010) dont la version française nous a été gracieusement offerte.

Parmi les keynotes, Donald Reinertsen nous a présenté pourquoi un système ne devrait pas souffrir des perturbations, mais plutôt les exploiter en évitant la résistance passive, dont on paye le prix même quand la perturbation n’est pas présente, en lui préférant la résistance active, où les efforts peuvent faire même augmenter la valeur. Avec des métaphores bien étudiées, il a très bien réussi expliquer pourquoi on ne devrait pas éviter la variabilité à tout prix, mais la conjuguer avec une fonction de valeur asymétrique, à la manière d’une option dans le domaine financier, afin de créer des systèmes anti-fragiles.

Pendant les présentations, Romain Couturier a conduit un exercice live de facilitation graphique pour résumer les talks dans des posters concis et dynamiques.

Rétrospective Kanban

Jeux

Les flux tirés et l’amélioration continue se prêtent particulièrement à des exercices pédagogiques sous forme de jeux. Parmi les nombreux proposés trois ont particulièrement retenu mon attention:

Kanbanzine

Avec Kanbanzine, découvrez le monde impitoyable de l’édition en collaborant dans une équipe de journalistes. Votre mission est de parvenir à faire des articles, de la conception à la publication en évitant les goulots d’étranglement pour préserver la fraîcheur nécessaire à tout bon magazine ! Ce jeu se joue en mode totalement collaboratif et le maître du jeu peut insérer des scénarios différents pour faire assez passer des points importants sur le développement de produit en flux. A noter, une version open source, donc modifiable pour vos besoins devrait bientôt être disponible. En tous cas, c’est la version que j’ai testé.

Sky Castle

Sky Castle, proposé par la skyteam, vous propulse au temps des princesses en détresse et des preux chevaliers. Cette fois-ci, vous intégrez la guilde des bâtisseurs agiles pour élever un château digne de ce nom pour accueillir la princesse. Pour ce faire, il va falloir mettre vos tailleurs de pierre, vos maçons, vos charretiers, vos bâtisseurs et vos essateurs au travail pour produire un flux continu de pièces pour votre château. Chose très intéressante, le rôle du roi (le product owner) est joué ici par un joueur (c’était moi pendant la session :P ), qui va devoir donner les bonnes pièces (user story) et animer les rétrospectives.

LeanTakeoff

Avec LeanTakeoff, lancez le produit de vos rêves avec le Lean Startup. Le scénario est simple, votre directeur vient vous voir avec une super idée de produit. Vous lui proposez de mener quelques expériences sur la cible, le besoin et les usages du produit. La réalité est ici modélisée par un dé, qui vous donnera les résultats des expériences que vous aurez créer pour valider vos hypothèses. Avec des itérations très courtes, vous arriverez très rapidement à quelque chose de sûrement très différent de l’idée originale de votre directeur.

Ce jeu permet d’intégrer parfaitement les idées d’amélioration continue et de pivots nécessaires au développement d’un produit, qui peut bien sûr être une application, en mode Lean Startup.

Julien Bourdon

jbourdon

31 oct
2014

Yeoman rencontre Vagrant

Windows est communément le seul OS installé sur les postes de travail. Or avec des outils comme Yeoman, on évite beaucoup de contre-temps techniques si on bascule dans un environnement Unix.

Si comme moi, vous aimez vous simplifier la vie, voici une solution qui peut vous intéresser.

L’idée est d’utiliser Vagrant, utilitaire basé sur VirtualBox, pour créer, configurer et dupliquer des instances de VM (Virtual Machine i.e. Machine Virtuelle) contenant tout ce qui est nécessaire pour développer une appli web avec Yeoman.

Avantages ?

  • On évite d’entrer en conflit avec des dépendances d’outils déjà installés.
  • Plusieurs instances d’une même VM permettent d’isoler les dépendances propre à chaque projet.
  • Simplicité d’utilisation de Vagrant

Lire la suite du bllet »

Gaetan Le Brun

Gaëtan Le Brun

23 oct
2014

NgEurope : le chemin d’AngularJS 1.2 à 1.3 vers 2.0

NgEurope 2014 à l’espace charenton, Paris

Je sors tout juste de la conférence Angular 2.0 Core d’Igor Minar & Tobias Bosch au quatrième jour de l’excellente NgEurope 2014 qui a eu lieu cette semaine du 20-24 Octobre à Paris .

Le programme de ces 5 jours à Paris pour les 850 fondus du framework AngularJS n’était pas moins :

  • Premier jour : Formation EggHead.io
  • Deuxième jour : Formation EggHead.io, AngularJs et AngularJS Sprint
  • Troisième jour : 13 conférences + Lightning talks
  • Quatrième jour : 15 conférences + Lightning talks
  • Cinquième jour : Royal Hackathon

Un programme très intense et la présence de sociétés innovantes étaient de la partie.
Bien sur OXiane était présente avec:

  • la gestion des inscriptions de 70 français
  • un stand de présentation et d’échange
  • un test AngularJS pour les français aventureux

Lire la suite du bllet »

Julien Cheron

jcheron

8 oct
2014

Firebase sort une extension Chrome : Vulcan

Voilà encore un outil d’intégration pour nos développements front !
Firebase est une plateforme de services Cloud très efficace, fournissant un système de services REST pour stocker ses données ainsi que de multiples systèmes d’authentifications à des services tiers comme Facebook, Twitter ou Google+.
Le développement front avec AngularJS est aujourd’hui fortement accéléré par l’utilisation d’une plateforme comme Firebase.
En effet, AngularJS nous permet de monter notre modèle de données via de simples appels à des « resources », autrement dit … des services REST.

Avec Angular, je peux facilement gérer mes requêtes REST de cette façon :

.factory('FriendsBase', function ($firebase, FIREBASE_URL) {
var ref = new Firebase(FIREBASE_URL + 'friends');
var friends = $firebase(ref);
var FriendsBase = {
all: friends,
create: function(friend){
return friends.$add(friend);
},
...

Il me suffit d’appeler la méthode :create de mon service Angular pour voir le résultat en base :

Le seul hic, c’est que si je dois inspecter ma base pour vérifier la bonne insertion / édition de mes données, je dois aller sur le site de Firebase et m’identifier et garder un onglet ouvert dans un coin.
Avec Vulcan, l’éditeur va nous permettre de manipuler notre base directement dans le web developper !
Voici la configuration de la base à utiliser :

Une fois connecté à la base, l’interface apparait et on peut manipuler nos données directement !

Si notre service REST est correctement utilisé, l’API Firebase effectue la synchronisation des données automatiquement, il suffit donc de mettre à jour sa base pour voir le résultat dans son application.
Ici, nous avons testé avec une application Ionic, affichée en direct via la commande « serve » ajoutée récemment aux outils de commande.

A bientôt sur les conférences ngEurope !

Alain Boudard

aboudard