Skip to main content
Ce document fait partie du scénario d’architecture Mobile + API et explique comment mettre en œuvre l’application mobile pour Android. Veuillez consulter le scénario pour en savoir plus sur la solution mise en œuvre.

Étape 1. Configurer l’application

Projet d’exemple

Téléchargez un projet d’exemple pour ce tutoriel afin de commencer. Télécharger Créer un fork sur Github Configuration système requise
  • Android Studio 2.3
  • Android SDK 25
  • Émulateur - Nexus 5X - Android 6.0
Afficher la configuration requise

Configurer les dépendances

Pour cette mise en œuvre, nous utiliserons les dépendances suivantes dans le fichier build.gradle de l’application :
  • Auth0.Android : ce package permet l’intégration avec Auth0 pour authentifier les utilisateurs.
  • OkHttp : ce package fournit un client HTTP pour effectuer des requêtes vers l’API Node.JS.
  • JWTDecode.Android : ce package aidera à décoder les .
  • AppCompat : ce package nous permet d’utiliser le widget Toolbar pour la navigation dans nos activités.

Mettre à jour le Manifest

Ouvrez le fichier AndroidManifest.xml de l’application et ajoutez l’autorisation d’accès à Internet :
Nous mettrons aussi à jour les détails de l’application pour utiliser le widget Toolbar :

Définir les valeurs de configuration

Définissez votre , votre domaine Auth0 et l’URL de l’API dans la ressource strings.xml située dans /res/values/strings.xml :
Pour cette mise en œuvre, créez des répertoires activities, models et utils dans le package de l’application.
  • activities/ : ce package contiendra LoginActivity.java, TimeSheetActivity.java, FormActivity.java et UserActivity.java.
  • models/ : ce package contiendra les modèles de données TimeSheet.java et User.java.
  • utils/ : ce package contiendra UserProfileManager.java, TimeSheetAdapter.java et ImageTask.java

Étape 2. Autoriser l’utilisateur

Mettre à jour le Manifest

Ouvrez le AndroidManifest.xml de l’application et ajoutez LoginActivity :

Créer l’Activity Login

Le LoginActivity gérera l’autorisation de l’utilisateur et sera le premier écran affiché aux utilisateurs. Nous allons créer une méthode login() pour initialiser un WebAuthProvider et démarrer l’authentification. Assurez-vous de fournir le bon scheme, l’ et le scope au WebAuthProvider. Pour cette mise en œuvre, nous utiliserons :
  • scheme: demo
  • audience: https://api.exampleco.com/timesheets (l’API Node.JS)
  • response_type: code
  • scope: create:timesheets read:timesheets openid profile email offline_access. Ces scopes nous permettront d’envoyer des requêtes POST et GET à l’API Node.JS, ainsi que de récupérer le profil utilisateur et un .
Dans la méthode login(), une fois l’authentification réussie, on redirigera l’utilisateur vers TimeSheetActivity.

Stocker les identifiants

Pour stocker les identifiants reçus après la connexion, nous utiliserons le CredentialsManager de la bibliothèque Auth0.Android ainsi que SharedPreferences pour les stocker. Avant d’initialiser le WebAuthProvider dans la méthode login(), nous pouvons créer le CredentialsManager. En passant un AuthenticationAPIClient au CredentialsManager, celui-ci peut actualiser les s’ils ont expiré.
Mettez maintenant à jour la méthode login() afin que les identifiants soient stockés par le CredentialsManager une fois l’authentification réussie.

Étape 3. Récupérer le profil utilisateur

Créez le modèle User

Créez un modèle User simple qui servira à UserProfileManager et à UserActivity.

Stocker le profil utilisateur

Pour gérer le stockage des renseignements du profil utilisateur, nous allons créer une classe de gestion nommée UserProfileManager. Le UserProfileManager utilisera SharedPreferences pour stocker les données.
Ensuite, mettez à jour la méthode login() dans LoginActivity pour récupérer le et extraire le profil utilisateur du jeton à l’aide de la bibliothèque JWTDecode.Android. Enregistrez ensuite le profil utilisateur avec le UserProfileManager.

Étape 4. Afficher des éléments d’interface conditionnellement selon le scope

Pour déterminer si un utilisateur a les permissions nécessaires pour effectuer certaines actions, nous pouvons examiner le scope qui lui a été accordé pendant le processus d’authentification. Le scope contient une chaîne regroupant tous les scopes accordés à un utilisateur. Pour déterminer si un scope en particulier a été accordé, il suffit donc de vérifier si la chaîne de scopes contient la sous-chaîne correspondant à ce scope.

Stocker les scopes

D’abord, nous pouvons mettre à jour la classe User pour stocker les scopes accordés, puis fournir une méthode utilitaire, hasScope() , qui permet de déterminer si les scopes accordés contiennent un scope particulier :
N’oubliez pas non plus de mettre à jour le UserProfileManager pour y stocker le champ supplémentaire :
Ensuite, mettez à jour le LoginActivity pour transmettre le scope afin qu’il soit stocké dans l’objet User :

Afficher le menu d’approbation en fonction du scope

Nous pouvons maintenant afficher certains éléments de l’interface utilisateur selon que l’utilisateur s’est vu accorder ou non un scope précis. Par exemple, nous avons un élément de menu d’approbation qui ne devrait être visible que pour les utilisateurs qui ont obtenu le scope approve:timesheets. Vous pouvez voir ci-dessous le code de la classe BaseActivity qui vérifie si un utilisateur possède le scope approve:timesheets et qui, en conséquence, définit la visibilité de l’élément de menu affichant l’activité d’approbation :

Étape 5. Faire une requête à l’API

Mettre à jour le Manifest

Ouvrez le fichier AndroidManifest.xml de l’application et ajoutez TimeSheetActivity :

Créez les mises en page de l’Activity Timesheets

Ensuite, créez timesheet_activity.xml, la mise en page de TimeSheetsActivity :
Le widget ListView contiendra des entrées individuelles, représentées par la mise en page item_entry.xml :
Et pour la navigation de la Toolbar de TimeSheetActivity, nous créerons la ressource de menu timesheet_action_menu.xml (/res/menu/) :

Créer le modèle de feuille de temps

Créez un modèle pour utiliser les données de feuille de temps dans nos vues :

Créer l’adaptateur Timesheet

Le TimeSheetAdapter est une classe utilitaire qui prend un tableau d’entrées de feuille de temps et les applique au ListView de TimeSheetActivity.

Créer l’Activity Timesheet

Le TimeSheetActivity affiche les entrées de feuille de temps de l’utilisateur connecté, stockées sur le serveur.
  • @string/api_url est défini sur http://10.0.2.2:8080/timesheets afin que l’émulateur Android puisse se connecter à l’API Node.JS en cours d’exécution sur http://localhost:8080.
  • La méthode callAPI() récupère les feuilles de temps à partir de l’API Node.JS.
  • La méthode processResults() prend la réponse JSON de callAPI() et la convertit en objets TimeSheet.
  • Les méthodes onCreateOptionsMenu() et onOptionsItemSelected() gèrent la navigation du widget Toolbar.

Étape 6. Afficher le profil de l’utilisateur

Pour afficher le profil de l’utilisateur connecté, nous allons créer UserActivity, le fichier de mise en page correspondant user_activity.xml, ainsi que user_action_menu.xml pour la navigation dans la Toolbar. Cette vue affichera le nom de l’utilisateur, son adresse courriel et sa photo de profil.

Mettre à jour le Manifest

Ouvrez le fichier AndroidManifest.xml de l’application et ajoutez UserActivity :

Créer les mises en page de User Activity

Ensuite, créez user_activity.xml, la mise en page de UserActivity, avec un ImageView pour la photo de profil et des TextViews pour le nom et l’adresse courriel de l’utilisateur.
Et créez le user_actions_menu.xml pour la Toolbar de UserActivity :

Charger la photo de profil depuis l’URL

Pour charger la photo de profil de l’utilisateur depuis l’URL, créez une tâche qui hérite de AsyncTask et s’exécute en arrière-plan.

Créer la User Activity

Dans la méthode onCreate(), nous récupérerons les renseignements de l’utilisateur à partir de UserProfileManager et définirons les valeurs dans la vue. Comme auparavant, les méthodes onCreateOptionsMenu() et onOptionsItemSelected() gèrent la fonctionnalité de navigation de la Toolbar.

Étape 7. Formulaire pour les nouvelles feuilles de temps

Créez ensuite FormActivity et le fichier de mise en page pour gérer la création de nouvelles entrées de feuille de temps.

Mettre à jour le Manifest

Ouvrez le fichier AndroidManifest.xml de l’application et ajoutez FormActivity :

Créer les mises en page de l’Activity de formulaire

Créez la mise en page form_activity.xml avec des champs EditText pour le nom du projet et le nombre d’heures travaillées, ainsi qu’un DatePicker pour le jour travaillé.
Créez ensuite le form_actions_menu.xml pour la barre d’outils de FormActivity :

Créer la Form Activity

  • La valeur de @string/api_url est définie sur http://10.0.2.2:8080/timesheets afin que l’émulateur Android puisse se connecter à l’API Node.JS qui s’exécute sur http://localhost:8080.
  • La méthode onCreate() initialise le formulaire et recueille les données saisies pour la méthode postAPI() lorsque le bouton de soumission est sélectionné.
  • La méthode postAPI() enverra à l’API Node.JS, au format JSON, les données saisies par l’utilisateur et récupérées à partir du formulaire.
  • La méthode clearForm() efface les champs de saisie du formulaire.
  • Les méthodes onCreateOptionsMenu() et onOptionsItemSelected() gèrent la fonctionnalité de navigation du widget Toolbar.

Testez l’application

Avant de continuer, assurez-vous d’avoir mis en œuvre l’API Node.JS.
  1. Démarrez l’API en accédant au répertoire de l’API dans votre terminal et en entrant la commande node server.
  2. Ouvrez l’application mobile dans Android Studio et appuyez sur le bouton Run.
  3. Sélectionnez l’appareil virtuel Nexus 5X API 23.
  4. Une fois l’application mobile chargée dans l’émulateur, vous pouvez alors vous connecter, puis créer et consulter des entrées de feuille de temps à partir de l’API Node.JS en cours d’exécution.
Et voilà ! C’est terminé !