1. Configurer l’application
Exemple de projet
Pour commencer, téléchargez un exemple de projet spécifique à ce tutoriel. Télécharger Fork sur Github Exigences Système- Android Studio 2.3
- Trousse SDK pour Android 25
- Emulateur - Nexus 5X - Android 6.0
Définir les dépendances
Pour cette mise en œuvre, nous utiliserons les dépendances suivantes au sein du fichierbuild.gradle
de l’application :
- Auth0.Android: ce package permet l’intégration avec Auth0 pour l’authentification des utilisateurs.
- OkHttp: ce package fournit une application HTTP pour effectuer des requêtes à l’API Node.JS.
- JWTDecode.Android : ce package aidera à décoder les .
- AppCompat: ce package nous permet d’utiliser le gadget logiciel de la barre d’outils pour la navigation dans nos activités.
Mise à jour du manifeste
Open the application’sAndroidManifest.xml
and add the internet permission:
Définir les valeurs de configuration
Définissez votre ID client Auth0, votre domaine Auth0 et l’URL de l’API dans la ressourcestrings.xml
située dans /res/values/strings.xml
.
activities/
: ce package contiendraLoginActivity.java
,TimeSheetActivity.java
,FormActivity.java
, etUserActivity.java
.models/
: ce package contiendra les modèles de donnéesTimeSheet.java
etUser.java
.utils/
: ce package contiendraUserProfileManager.java
,TimeSheetAdapter.java
, etImageTask.java
2. Autoriser L’utilisateur
Mise à jour du manifeste
Open the app’sAndroidManifest.xml
and add the LoginActivity
:
Créer l’activité de connexion
LaLoginActivity
traite l’autorisation de l’utilisateur et correspond à l’écran initial que les utilisateurs voient. Nous allons créer une méthode login()
pour initialiser un WebAuthProvider
et lancer l’authentification. Assurez-vous de fournir le bon schéma, la bonne et la bonne permission au WebAuthProvider
. Pour cette mise en œuvre, nous utiliserons :
- scheme:
demo
- audience:
https://api.exampleco.com/timesheet
s (l’API Node.JS) - response_type:
code
- permission :
create:timesheets read:timesheets openid profile email offline_access
. Ces permissions nous permettront d’envoyerPOST
etGET
à l’API Node.JS, ainsi que de récupérer le profil utilisateur et un jeton d’actualisation.
login()
method, upon successful authentication we’ll redirect the user to the TimeSheetActivity
.
Stocker les identifiants
Nous utiliserons leCredentialsManager
de la bibliothèque Auth0.Android et SharedPreferences pour stocker les identifiants reçus après la connexion.
Nous pouvons créer le CredentialsManager
avant d’initialiser le WebAuthProvider
dans la méthode login()
. La transmission d’un AuthenticationAPIClient
au CredentialsManager
lui permet d’actualiser les jetons d’accès s’ils ont expiré.
login()
pour que les identifiants soient stockés via le CredentialsManager
après une authentification réussie.
3. Obtenez le profil utilisateur
Créer le modèle utilisateur
Créer un modèle simple d’utilisateur qui sera utilisé parUserProfileManager
et UserActivity
.
Stocker le profil utilisateur
Pour gérer le stockage des informations relatives au profil de l’utilisateur, nous allons créer une classe de gestionnaire,UserProfileManager
. Le UserProfileManager
utilisera SharedPreferences pour stocker les données.
login()
dans LoginActivity
pour récupérer le jeton d’ID et obtenir le profil de utilisateur à partir du jeton avec la bibliothèque JWTDecode.Android. Stockez ensuite le profil utilisateur avec UserProfileManager
.
4. Afficher les éléments de l’interface utilisateur de manière conditionnelle en fonction de la permission
Pour déterminer si un utilisateur a les autorisations requises pour effectuer certaines actions, nous pouvons examiner la permissionscope
qui a été accordée à l’utilisateur au cours du processus d’authentification. La permission scope
contiendra une chaîne avec toutes les permissions accordées à un utilisateur, de sorte que pour déterminer si une permission particulière a été accordée, il suffit de regarder si la chaîne des permissions contient la sous-chaîne de cette permission particulière.
Stocker la permission
Tout d’abord, nous pouvons mettre à jour la classeUser
pour stocker les permissions accordées, puis fournir une méthode d’aide, hasScope()
, qui peut être utilisée pour déterminer si les permissions accordées contiennent une permission donnée.
UserProfileManager
afin de stocker le champ supplémentaire :
LoginActivity
pour transmettre la permission scope
afin qu’elle puisse être stockée dans l’objet User
:
Affichage du menu d’approbation basé sur la permission
Nous pouvons désormais afficher certains éléments de l’interface utilisateur en fonction de la permission accordée à l’utilisateur. Par exemple, nous avons un élément du menu d’approbation qui ne doit être visible que par les utilisateurs qui ont reçu la permissionapprove:timesheets
.
Vous pouvez voir ci-dessous le code de la classe BaseActivity
qui vérifie si un utilisateur dispose de la permission approve:timesheets
et qui, en fonction de cela, définit la visibilité de l’élément de menu qui affiche l’activité d’approbation.
5. Appeler l’API
Mise à jour du manifeste
Open the app’sAndroidManifest.xml
and add the TimeSheetActivity
:
Créer les modèles d’activité des feuilles de temps
Créez ensuitetimesheet_activity.xml
, le modèle de TimeSheetsActivity
:
ListView
contiendra des entrées individuelles représentées par le modèle item_entry.xml
:
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 travailler avec les données des feuilles de temps dans nos affichages :Créer l’adaptateur de feuille de temps
LeTimeSheetAdapter
est une classe utilitaire qui prend un tableau d’entrées de feuilles de temps et les applique au ListView
de TimeSheetActivity
.
Créer l’activité Feuille de temps
LaTimeSheetActivity
affiche les entrées de la feuille de temps de l’utilisateur connecté qui sont stockées sur le serveur.
@string/api_url
est définie surhttp://10.0.2.2:8080/timesheets
de manière à ce que l’émulateur Android puisse se connecter à l’API Node.JS s’exécutant surhttp://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 decallAPI()
et la convertit en objetsTimeSheet
. - Les méthodes
onCreateOptionsMenu(
) etonOptionsItemSelected(
) gèrent la fonctionnalité de navigation du gadget logiciel de la barre d’outils.
6. Afficher le profil utilisateur
Pour afficher le profil de l’utilisateur connecté, nous allons créerUserActivity
, un modèle user_activity.xml
correspondant et le fichier user_action_menu.xml
pour la navigation dans la barre d’outils. L’écran affiche le nom de l’utilisateur, son courriel et sa photo de profil.
Mise à jour du manifeste
Open the app’sAndroidManifest.xml
and add the UserActivity
:
Créer les modèles d’activité de l’utilisateur
Next createuser_activity.xml
, the layout for the UserActivity
, with an ImageView
for the profile picture and TextViews
for the user’s name and email.
user_actions_menu.xml
pour la barre d’outils UserActivity
:
Chargez l’image du profil à partir de URL
Afin de charger la photo du profil de l’utilisateur à partir de l’URL, créez une tâche qui étendAsyncTask
et s’exécute en arrière-plan.
Créer l’activité de l’utilisateur
Dans la méthodeonCreate()
nous allons récupérer les informations de l’utilisateur dans le UserProfileManager
et définir les valeurs affichées. Comme précédemment, les méthodes onCreateOptionsMenu()
et onOptionsItemSelected()
gèrent la fonctionnalité de navigation du gadget logiciel de la barre d’outils.
7. Formulaire pour les nouvelles feuilles de temps
Créez ensuite laFormActivity
et le modèle pour gérer la création de nouvelles entrées dans la feuille de temps.
Mise à jour du manifeste
Open the app’sAndroidManifest.xml
and add the FormActivity
:
Créer les modèles d’activité du formulaire
Créez le modèleform_activity.xml
avec EditText
pour le nom du projet et les heures travaillées, et un DatePicker
pour le jour travaillé.
form_actions_menu.xml
pour la barre d’outils FormActivity
:
Créer l’activité du formulaire
@string/api_url
est définie surhttp://10.0.2.2:8080/timesheets
de manière à ce que l’émulateur Android puisse se connecter à l’API Node.JS s’exécutant surhttp://localhost:8080
.- La méthode
onCreate()
initialise le formulaire et collecte les données pour la méthodepostAPI()
lorsque l’on appuie sur le bouton de soumission. - La méthode
postAPI()
enverra les données de l’utilisateur extraites du formulaire à l’API Node.JS au format JSON. - La méthode
clearForm()
vide les formulaires de saisie. - Les méthodes
onCreateOptionsMenu()
etonOptionsItemSelected()
gèrent la fonctionnalité de navigation du gadget logiciel de la barre d’outils.
Tester l’application
Avant de continuer, assurez-vous que vous avez mis en œuvre l’API Node.JS.- Start the API by navigating to the API’s directory in your terminal and entering the
node server
command. - Ouvrez l’application mobile dans Android Studio et appuyez sur le bouton Exécuter.
- Sélectionnez l’appareil virtuel Nexus 5X API 23.
- Une fois que l’émulateur a chargé l’application mobile, vous pouvez vous connecter en tant qu’utilisateur, puis créer et afficher des entrées de feuilles de temps à partir de l’API Node.JS en cours d’exécution.