Institut Supérieur de Comptabilité et d’Administration des Entreprises Nouakchott-Mauritanie PROJET DE FIN D’ETUDES Pour l’obtention de : LICENCE en DEVELOPPEMENT INFORMATIQUE Thème : Développement d’une application mobile (client) qui communique avec API serveur Elaboré par: Cheikh El Mustapha Hamady – I18189 Encadré par : Dr. Mohammed Ould Zoubeir Année Universitaire : 2022-2023 Dédicace Toutes les lettres ne sauront trouver les mots qu’il faut…Tous les mots ne sauraient exprimer la gratitude, L’amour, le respect, la reconnaissance. Aussi, c’est tout simplement que : Je dédie cette Mémoire Je remercie avant tous Allah A mon très cher père Tout l’encre du monde ne pourrait suffire pour exprimer mes sentiments envers un être très cher. J’implore Dieu, tout puissant, de vous accorder une bonne santé, une longue vie et beaucoup de bonheur A ma très chère mère, Aucune dédicace très chère maman, ne pourrait exprimer la profondeur des sentiments que j’éprouve pour vous. Vous m’avez aidé et soutenu pendant de nombreuses années avec à chaque fois une attention renouvelée. Puisse Dieu, tout puissant, vous combler de sante, de bonheur et vous procurer une longue vie . 1 REMERCEMENT Tout d’abord, nous remercions dieu le tout puissant de nous avoir donné l’opportunité d’achever ce projet. Nous commençons par remercier Dr. Mohammed Ould Zoubeir qui nous a fait l’honneur d’être encadrant. Nous le remercions profondément pour ses encouragements continus, d’être toujours là pour nous écouter, nous aider, nous guider à retrouver le bon chemin par sa sagesse et ses précieux conseils. En outre, son soutien moral, sa compréhension, sa générosité en matière de formation et d’encadrement nous ont été très utiles pour l’élaboration de ce mémoire. Nous le remercions aussi pour le conseil concernant les taches évoquées dans ce rapport, le suivi et la confiance qu’il nous a témoignée. Nous voulons également exprimer par ces lignes de remerciements notre gratitude envers tous ceux qui par leur présence, leur soutien, leur disponibilité ou leurs conseils, nous ont encourages pour accomplir ce projet. Enfin, nous ne pouvons achever ce mémoire sans exprimer nos sincères remerciements et notre profonde gratitude a tout le professeur de notre institut ISCAE, pour leur dévouement et leur assistance tout au long de notre cursus d’études universitaires. 2 TABLE DE MATIERES Dédicace.................................................................................................................................................. 1 REMERCEMENT................................................................................................................................. 2 INTRODUCTION ................................................................................................................................. 6 1 L’ENTREPRISE SYSONE ............................................................................................................ 8 2 ANALYSE ET SPECIFICATION DES BESOINS ....................................................................... 9 2.1 INTRODUCTION .................................................................................................................. 9 2.2 Spécifications des besoins : .................................................................................................... 9 2.2.1 Besoins fonctionnels ....................................................................................................... 9 2.2.2 Besoins non fonctionnels : ............................................................................................. 9 2.3 Analyse des besoins .............................................................................................................. 10 2.3.1 2.4 Méthodologie de développement : ........................................................................................ 10 2.4.1 Définition de processus unifié : ................................................................................... 10 2.4.2 Phase du processus unifié : .......................................................................................... 10 2.4.3 Activités du processus unifie : ...................................................................................... 10 2.5 3 Conclusion ............................................................................................................................ 11 DEVELOPPEMENT ET REALISATION ...................................................................................11 3.1 INTRODUCTION : .............................................................................................................. 11 3.2 Définition React Native : ...................................................................................................... 12 3.3 L’histoire de React Native .................................................................................................... 12 3.4 Le cross-platform .................................................................................................................. 16 3.5 Comment fonctionne React Native ? ................................................................................... 17 3.6 L’architecture React Native.................................................................................................. 18 3.6.1 Avant la nouvelle architecture React 18 ...................................................................... 18 3.6.2 Argumentation du choix de React Native .................................................................... 23 3.7 4 Étude préalable : ........................................................................................................... 10 Expo Go................................................................................................................................ 25 3.7.1 Fetch ............................................................................................................................. 30 3.7.2 Axios.............................................................................................................................. 31 3.8 Comment faire des appels d’API REST dans React Native App ........................................ 32 3.9 En conclusion ....................................................................................................................... 32 Node JS ......................................................................................................................................... 33 4.1 Package.json ......................................................................................................................... 33 4.2 @expo/vector-icons ............................................................................................................... 34 4.3 React-navigation/native ........................................................................................................ 35 4.4 React-native-render-html ..................................................................................................... 35 3 4.5 5 React-native-tailwindcss ....................................................................................................... 35 PRESENTATION DU SYSTEME ............................................................................................. 36 5.1 Les principales interfaces graphiques ................................................................................. 36 5.2 Interface pour l’offre d’emploi ............................................................................................ 36 5.3 Interface pour l’appels d’offre ............................................................................................. 37 5.4 Interface pour l’infos avis .................................................................................................... 38 5.5 Conclusion ............................................................................................................................ 38 Conclusion générale ............................................................................................................................ 40 WEBOGRAPHIE ................................................................................................................................ 41 4 Liste des figures Figure 1: logo React Native .......................................................................................... 12 Figure 2: logo hackathon .............................................................................................. 14 Figure 3:logo Android ................................................................................................... 15 Figure 4: logo IOS ........................................................................................................ 16 Figure 5: logo thread ..................................................................................................... 19 Figure 6: logo Bytecode ................................................................................................ 21 Figure 7: logo CODEGEN ............................................................................................ 22 Figure 8: logo shadow thread ........................................................................................ 23 Figure 9: logo Expo ...................................................................................................... 25 Figure 10: logo Développement.................................................................................... 25 Figure 11: logo Nom de projet ..................................................................................... 26 Figure 12: logo terminale pour créer un projet ............................................................ 28 Figure 13: logo terminal pour run l’application............................................................ 28 Figure 14: logo terminal pour commande turnel .......................................................... 29 Figure 15:logo fetch ...................................................................................................... 31 Figure 16: logo code en react native ............................................................................. 32 Figure 17: logo Node js................................................................................................. 33 Figure 18: page d’offre d’emploi .................................................................................. 36 Figure 19: page d’appels d’offre ................................................................................... 37 Figure 20: page d’infos et avis ...................................................................................... 38 5 INTRODUCTION L’application que nous avons développée est une plateforme dédiée à l’offre d’emploi, aux appels d’offre et aux informations et avis en Mauritanie. Dans un contexte ou la recherche d’opportunités professionnelles est essentielle pour les demandeurs d’emploi et les entreprises, notre application vise à faciliter la connexion entre les deux parties en fournissant un espace centralise pour la publication et la recherche d’offre d’emploi et d’appels d’offre. En Mauritanie, ou le marché du travail est dynamique et en constante évolution, il est crucial pour les demandeurs d’emploi d’avoir accès à des informations précises et a jour sur les opportunités professionnelles disponibles. De même, les entreprises et les organismes publics ont besoin d’une plateforme fiable pour diffuser leurs offres d’emploi et leurs appels d’offre de manière efficace. Notre application vise à répondre à ces besoins en fournissant une interface conviviale et intuitive, accessible à la fois sur les smartphones et les tablettes, Grace a notre application, les utilisateurs pourront explorer les différentes offres d’emploi et les appels d’offre en Mauritanie, ainsi que consulter des informations et des avis pertinents lies aux marches du travail local. L’utilisation de la technologie React Native pour le développement de notre application frontend garantit une expérience utilisateur fluide et réactive, quel que soit le dispositif utilise. En parallèle, nous avons mis en place une API robuste pour gérer les interactions avec notre base de données et assurer la fiabilité et la sécurité des informations fournies. Notre objectif principal est de simplifier le processus de recherche d’emploi et d’appels d’offre en Mauritanie, en fournissant une plateforme complète et facile à utiliser. Nous croyons fermement que notre application contribuera à réduire les frictions sur la marche du travail en facilitant le mise en relation des demandeurs d’emploi et des employeurs, ainsi qu’en offrant un accès rapide et fiable aux informations pertinentes. Dans ce rapport, nous décrirons en détail l’architecture de notre application, les défis rencontres lors de son développement, les fonctionnalités mise en place et les résultats obtenus. Nous discuterons également des avantages de l’utilisation de React Native pour le 6 front-end et d’une API pour le back-end, ainsi que de perspectives d’amélioration pour l’avenir. Nous espérons que cette application apportera une valeur ajoutée aux demandeurs d’emploi, aux entreprises et aux organismes publics en Mauritanie, en favorisant un meilleur visible et une plus grande efficacité dans la recherche d’opportunités professionnelles et d’appels d’offre. 7 1 L’ENTREPRISE SYSONE SYSONE est une société spécialisée en nouvelles technologies née de la volonté de ses fondateurs de mettre à profit leurs expertises et leur savoir-faire issus d’une expérience de plus 15 ans aux services de grandes structures publiques et privées en France et en Mauritanie. Grace a son engagement continue, SYSONE a su répondre au mieux aux besoins de ses clients, ce qui lui assure une vraie crédibilité et une reconnaissance dans le consulting en système d’information. SYSONE a développée, depuis sa création, une grande expérience dans les domaines suivants : ➢ Conception, Développé, depuis sa création, une grande expérience dans les domaines suivants ; ➢ Web (Sites, Modules, Design, Hébergement) ; ➢ Études et Conseils en Système d’information ; ➢ Développement de solutions mobiles ; ➢ Fourniture et Installation de matériels Informatique ; 8 2 ANALYSE ET SPECIFICATION DES BESOINS 2.1 INTRODUCTION Comme dans tous projet, l’analyse des besoins occupe une place très importante. En effet, avant de pouvoir entamer tout développement, il est absolument nécessaire de connaitre tous les besoins, mais également les contraintes, qu’ils soient techniques, ou imposes est aussi indispensable de connaitre les délais nécessaires pour le travail à effectuer. 2.2 Spécifications des besoins : Dans cette partie, on explique en détail ce que l’application est censée faire et ceci spécification des besoins fonctionnels et non fonctionnels. 2.2.1 Besoins fonctionnels Alertes et notifications : Envoyez des notifications aux utilisateurs lorsqu'une nouvelle offre d'emploi ou un nouvel appel d'offres ou infos avis correspondant à leurs critères de recherche est publié. Partage social : Intégrez des fonctionnalités de partage social qui permettent aux utilisateurs de partager des offres d'emploi ou des appels d'offres ou infos avis avec leurs contacts sur les réseaux sociaux. 2.2.2 Besoins non fonctionnels : Ce sont des exigences qui ne concernent pas spécifiquement le comportement du système mais plutôt ils identifient des contraintes internes et externes du système. Les principaux besoins non fonctionnels de mon application se résument dans les points suivants : ❖ Performance ⧫ L’application répond à tous les exigences de l’utilisateur d’une manière optimale. ❖ Fiabilité ⧫ Bon fonctionnement de l’application sans détection de défaillance. ❖ Rapidité ⧫ Le déplacement entre les pages sera facile et rapide. 9 2.3 Analyse des besoins L’objectif de l’analyse est d’accéder à une compréhension des besoins et des exigences du client. Il s’agit de livrer des spécifications pour permettre de choisir la conception de la solution. 2.3.1 Étude préalable : L’étude préalable est une partie primordiale dans la réalisation d’un projet informatique pour atteindre nos buts et objectifs, il est nécessaire d’avoir une vue claire des différents besoins escompter. Raison pour laquelle on est appelé à faire une étude des méthodes ou systèmes qu’utilise pour la gestion des programmes opératoires. 2.4 Méthodologie de développement : Contenu de la nature de mon projet, j’ai juge que la méthode PU (processus unifie) serait la plus adapte pour sa réalisation. 2.4.1 Définition de processus unifié : Le processus unifie est un processus de développement logiciel itératif, centre sur l’architecture, pilote par des cas d’utilisation et oriente vers la diminution des risques. 2.4.2 Phase du processus unifié : La méthode UP se base sur quatre phases : ➢ Analyse de besoins : Établir une vision globale du projet ou on spécifie les besoins et on étude la faisabilité du projet. ➢ Élaboration : On reprend les éléments de l’analyse des besoins et on développe une architecture de référence, les risques et la plupart des besoins sont identifiés. ➢ Construction : Finaliser l’analyse, la conception, l’implémentation et les tests puis transformer l’architecture de référence en produit exécutable tous en veillant à respecter son intégrité. ➢ Transition : Livraison du produit au client afin d’effectuer des essais pour détecter d’éventuelles anomalies. 2.4.3 Activités du processus unifie : Chaque phase est constituée d’une succession d’activités. Les activités de la méthode UP sont : 10 ➢ Expression des besoins : Compréhension et expression des besoins et des exigences du client qu’elles soient fonctionnelles ou non fonctionnelles. ➢ Analyse et Conception : Permet d’acquérir une compréhension approfondie des contraintes liées aux outils de réalisation en prenant en compte le choix d’architecture technique retenu pour le développement et l’exploitation système. ➢ Implémentation : On implémente le système sous forme de composants, bibliothèque et de fichiers. Elle a pour objectif de planifier l’intégration. ➢ Tests : Permettent de vérifier les résultats de l’implémentation de toutes les exigences et de s’assurer de la bonne intégration de tous les composant dans le logiciel. ➢ Déploiement : Livraison et exploitation du produit. 2.5 Conclusion L’analyse et la spécification des besoins fonctionnels et non fonctionnels sont essentielles pour le développement d'une application mobile efficace pour les offres d'emploi, les appels d'offres et les informations et avis en Mauritanie. Les besoins fonctionnels décrivent les fonctionnalités spécifiques que l'application doit offrir, telles que la recherche d'offres d'emploi et d'appels d'offres, les alertes et les notifications pour informer les utilisateurs des nouvelles opportunités, ainsi que les fonctionnalités de partage social pour faciliter le partage des informations avec d'autres utilisateurs. D'autre part, les besoins non fonctionnels identifient les contraintes et les exigences de performance, de fiabilité et de rapidité de l'application. Il est crucial que l'application réponde de manière optimale aux exigences des utilisateurs, fonctionne sans défaillance et offre une expérience fluide en termes de navigation entre les pages. 3 DEVELOPPEMENT ET REALISATION 3.1 INTRODUCTION : Après l’étape de conception de l’application, nous allons dans ce chapitre, d’écrire la phase de réalisation et de développement. Nous allons présenter, en premiers lieu, L’architecture de l’application et du système ensuite parlerons de l’environnement du travail utilise pour le développement de l’application. 11 React Native est un Framework open source pour application mobile, soutenu par facebook, et qui s’appuie sur le très riche écosystème de React js. Utilise par des acteurs majeurs de la marche de l’application comme Airbnb, SounCloud ou encore Instagram, ce Framework est largement plébiscité et reconnu pour sa robustesse. 3.2 Définition React Native : Figure 1: logo React Native React Native est un Framework logiciel d’interface utilisateur open source crée par Meta Platforms. Il est utilisé pour développer des applications pour Android, IOS, permettant aux développeurs d’utiliser le Framework React avec les capacités de la plate-forme native. Il est utilisé pour développer les applications Android et IOS chez Facebook, Microsoft et Shopify. Il est également utilisé pour développer des applications de réalité virtuelle chez Oculus. 3.3 L’histoire de React Native Tous a commencé avec React.js et la volonté d’apporter au mobile les techniques du web moderne de l’époque. Remontons donc en arrière dans le temps, jusqu’en 2013, dans les locaux Facebook, société créatrice de la bibliothèque, qui vient de publier sa première version publique sous licence Apache 2.0 Des lors, React.js devient une référence au sein de la firme pour leurs développements frontend, ainsi que le socle de référence pour leur département R&D. Ceci donne alors naissance a plusieurs composants dans le site du réseau social, mais aussi à des Framework bâtis audessus de React, comme Relay par exemple. Bien sûr, le web n’est qu’une partie de l’histoire. Facebook propose également des applications Android et IOS qui, en 2013 sont construites sur des piles technologiques propriétaires et disjointes. Mais cela divise les équipes au sein de Facebook car l’entreprise livre à cette période une nouvelle version du site web deux fois par jour, de sorte qu’ils peuvent obtenir les résultats d’une expérience presque immédiatement. En revanche sur le 12 mobile, il faut souvent attendre des semaines ou des mois pour obtenir les résultats d’une expérience ou d’un test A/B, car les nouvelles versions de l’application sont publiées beaucoup moins souvent. Néanmoins, le natif reste nécessaire à cette époque pour avoir accès aux composants UI spécifique à l’OS (comme la cartographie, les sélecteurs de date, les commutateurs ou encore les piles de navigation). De plus, la gesture est beaucoup plus sophistiquée en natif que sur le web, et le JavaScript ne permet pas de faire du multi-threading que Facebook utilise pour le décodage des images par exemple. Un hackaton s’organise donc en interne dans la compagnie afin de combiner le meilleur du natif et du web ; c’est-à-dire l’UX des plateformes mobiles natives et l’expérience de développement du web avec React. Plusieurs solutions en découlent : — Utiliser des WebViews dans les applications natives : cela permettrait de trier pleinement profit de l’expérience de développement en React et du cycle d’itération rapide du web. Cependant, si le rendu est effectué à l’aide des technologies web, l’UX native est difficilement reproductible et maintenable et les performances sont dégradées. — Faire un portage de React en code natif : cette seconde option voit le jour sous le nom de “ComponentKit”, mais pour IOS uniquement. Avec CompoentKit, l’application bénéficie de tous les avantages de React, notamment des interfaces utilisateur déclaratives et prévisibles. Elle profite également de la puissance de l’environnement natif, avec es composants spécifiques à la plateforme et une gestion sophistiquée des gestes, ainsi qu’un décodage asynchrone des images, une mesure du texte et un rendu. En outre, ComponetKit utilise la méthode “Flexbox” pour la mise en page, ce qui évite de devoir positionner et dimensionner manuellement les vues de l’application, de sorte que votre code est plus concis et plus facile a maintenir. — Créer une librairie de Scripting natif : cette solution utiliserait JavaScript pour faire appel aux API natives et donc avoir accès à toute la puissance de l’environnement natif, mais aussi à la capacite d’itération rapide et de fonctionnement sur des OS autre que IOS. Différents Framework font déjà cela a cette époque, mais avec certains désagréments comme par exemple des blocages du thread des UI par l’exécution de 13 javascript dans le cadre d’allers-retours synchrones entre l’environnement natif et l’environnement interprète. Bien que le défi soit élevé et que les obstacles soient importants, les ingénieurs chez Facebook optent finalement pour cette dernière solution et produisent une nouvelle libraire, basée sur React.js, appelée React Native, afin de fournir des applications hybrides. En résulte quelques premières applications, notamment Facebook Groups, composée de vues construites à la fois avec du code natif et du JavaScript sous React Native, et Facebook Ads Manager entièrement bâtie avec React Native. C’est ainsi que, en janvier 2015, une première présentation de la bibliothèque React Native est présentée en avant-première au public lors de la React.js Con. Deux mois plus tard, lors de la conférence F8, Facebook annonce la mise à disposition de la librairie React Native pour IOS en Open Source, avec la promesse d’une prise en charge rapide d’Android. Quelques mois plus tard, en septembre 2015, la promesse de compatibilité Android est tenue et une nouvelle version est publiée, ouvrant la librairie React Native aux deux systèmes d’exploitation. Figure 2: logo hackathon En 2016, soit un an après la présentation de React Native lors de la conférence F8, Facebook et Microsoft présentent conjointement le support de React Native pour Universal Windows Platform. En à peine un an, l’adoption de React Native et sa communauté de développeurs se sont toutes deux développées beaucoup plus rapidement que prévu. Plus de 650 personnes ont ajoute du code a la base de code React Native. Sur les 5800 commit de la base de code, 30% ont été effectués par des contributeurs qui ne travaillaient pas chez Facebook. En février 2016, pour la première fois, plus de 50% des commit provenaient de 14 contributeurs externes. Avec autant de personnes de la communauté contribuant à React Native, le repository GitHub a vu jusqu’a 266 nouvelles pull requests par mois (jusqu’à 10 pull requests par jour). Cette popularité a permis au fil du temps, de faire rapidement évoluer la librairie React Native avec des fonctionnalités telles que le Hot reloading, l’accessibilité, les performances, le support d’écriture Right-to-left, le SDK Expo, le starter-kit “Create React Native App”, le support AWS Amplify, le support de Typescript. En 2019, Facebook annonce Hermes, un moteur JavaScript léger et optimise pour l’exécution de React Native sur Android. Hermes améliore les performances de React Native en diminuant l’utilisation de la mémoire, en réduisant la taille des téléchargements et en réduisant le temps nécessaire à l’application pour devenir utilisable ou temps d’interaction. En octobre 2021, Facebook annonce que le moteur Hermes va devenir le moteur par défaut pour React Native, annonce ensuite confirme depuis juillet 2022 et les versions de prerealese 0.70.0 de React Native. Ce changement s’opère afin d’améliorer les performances des applications mobiles Android et IOS en déplaçant les opérations de parsing et de compilation, du runtime vers le buildtime. Figure 3:logo Android 15 Figure 4: logo IOS En plus d’Hermes, 2022 est aussi l’année du changement pour l’architecture React Native. La mise à jour signe la fin des Native Modules et Native Components, au profit de leurs équivalents : “TurboModule” et “Fabric Components”. Cette nouvelle architecture React Native, liée à Hermes, a pour but de rendre encore plus natives les applications mobiles React Native et d’optimiser les performances de calcul et de rendu, donnant ainsi de nouvelles perspectives, notamment au niveau des animations de composants ou de la gestion des gestes. Toutes ces nouveautés relancent ainsi les éternels débats entre les technologies “natif vs crossplatform”, “react native vs flutter vs .Net MAUI”,”application hybride vs PWA” …Nous avons d’alleurs nous aussi pris la parole sur ce sujet pour contribuer au débat a travers un webinar : Application native ou cross-platform : comment faire son choix ? 3.4 Le cross-platform Aujourd’hui, quel que soit le domaine d’expertise promu ou le marché vise, une solution mobile est devenue indispensable. Il existe différentes technologies permettant de répondre aux attentes des utilisateurs et d’atteindre les objectifs marketing. Les technologies crossplatform gagnent de plus en plus de terrain pour le développement des applications mobiles, et prennent ainsi une place de plus en plus importante face aux technologies de développement d’application natives. Ces technologies cross-platform offrent l’avantage d’une meilleure productivité : la durée et les couts de développement et de maintenance sont considérablement réduits, puisqu’au lieu d’avoir différentes copies du même logiciel pour différents systèmes d’exploitation, le 16 développement d’application cross-platform crée un programme unique qui fonctionne sur plusieurs plateform. En utilisant une base de code unique, transparente et compatible avec tous les systèmes d’exploitation, les développeurs peuvent commencer à créer des applications mobiles. Le développement multiplateforme présente de nombreux avantages, mais nécessite néanmoins de prendre quelques précautions et d’anticiper certains facteurs. Je vous propose de découvrir tous cela dans un autre article que j’ai pu rédiger, dédié au cross-patform, et de nous concentrer ici sur React Native, technologie cross-platform par excellence. 3.5 Comment fonctionne React Native ? Les fondamentaux de React Native La librairie React, bien connue pour créer des interfaces utilisateurs via JavaScript, sert de base a React Native. Ce dernier utilise donc les mêmes concepts que son aine : des composants, le langage JSX, des propos, un state, la possibilité d’utiliser des hooks, ... Une application React Native va donc être rendue en utilisant des vues natives, mais le code JavaScript n’est pas compilé dans le langage natif de la plateforme. Les interfaces utilisateur en React Native, utilisent des composants et suivent le principe unidirectionnel propre à React. L’application dispose donc d’un arbre de composants. La communication entre ces composants se fait par le biais de propriétés (appelées props) et de callbacks (fonction a appelé suite à un déclencheur). Ce callback est transmis à un composant enfant si un composant plusieurs) propriété est transmise au composant enfant s’il a besoin de quelque chose de son parent. React Native exploite une base de code JavaScript et celle-ci doit finir par être comprise par du code propriétaire comme Objective-C ou Swift pour IOS, et Java ou Kotlin pour Android. Nous parlons donc d’un langage du Web, interprétable, qui va devoir discuter avec un langage natif complié. Lorsque vous utilisez React Native, vous allez pouvoir exécuter votre code dans deux environnements : ✓ Dans la plupart des cas, React Native utilisera JavaScriptCore, le moteur JavaScript qui alimente Safari. JavaScriptCore est un framework qui permet d’exécuter du code JavaScript sur des appareils mobiles, par exemple. Sur les appareils IOS, ce 17 framework est directement fourni par le système d’exploitation. Les appareils Android ne disposent pas de ce dernier, React Native l’intègre donc à l’application elle-même. ✓ Lorsque vous utilisez le débogage Chrome, tout le code JavaScript s’exécute dans Chrome lui-même, communiquant avec le code natif via des WebSockets. Chrome utilise le moteur JavaScript V8. Pour rester compatible, React Native s’appuie par défaut sur le compilateur JavaScript Babel. Ce dernier va permettre la prise en charge de transformation du langage, notamment pour profiter au mieux des dernières avancées liées aux versions ECMAScript, en apportant des polyfills. 3.6 L’architecture React Native 3.6.1 Avant la nouvelle architecture React 18 Une application React Native est divisée en trois parties différentes : le code natif, le code JavaScript et le bridge. Ce dernier interprète le code JS pour l’exécuter sur des plateformes natives et permet une communication asynchrone entre les éléments natifs et le code JavaScript. Plusieurs couches vont donc être impliquées : ✓ Le thread natif : le thread principal, également appelé thread natif, est utilisé pour le rendu de l’interface utilisateur dans les applications IOS et Android. Il gère la tâche d’affichage des éléments de l’interface utilisateur et traite les gestes des utilisateurs. ✓ Le thread d’exécution JavaScript : le thread JS s’occupe essentiellement de la logique métier de l’application et définit la structure ainsi que les fonctions de l’interface utilisateur. Les fonctions du thread JavaScript comprennent l’exécution du code JS dans un moteur distinct, les appels API, le traitement des évènements tactiles ... ✓ Le thread Shadow Tree : ce thread génère des nœuds fantômes et agit comme un moteur mathématique qui utilise des algorithmes pour transformer les mises à jour de layout en données précises et les évènements de l’interface utilisateur en charge utile correctement sérialisée. ✓ Le thread de modules natifs : lorsqu’une application doit accéder à l’API de la plateforme, le processus se déroule dans le thread du module natif. 18 ✓ Les threads des modules natifs personnalisent : ces threads sont utilisés pour accélérer les performances d’une application lorsque des modules personnalises sont utilisés. Par exemple, React Native gère les animations à l’aide d’un thread natif d’un thread natif distinct afin que cette tache soit déchargée du thread JS. Figure 5: logo thread Au lancement d’une application, le thread natif charge l’application et spawn le thread JavaScript, qui exécuté le code JS. Les évènements lies au toucher, a l’appui et a l’interface utilisateur sont détectés par le thread natif, qui les transmet ensuite au thread JS via le bridge React Native. Une fois le JavaScript charge, le thread correspondant informe le shadow thread des informations qui doivent être rendues à l’écran. Le shadow thread détermine ensuite comment calculer les positions de la vue et utilise des méthodes pour calculer les mises en page. Après le rendu de la vue, le thread principal recoit les paramètres de mise en page du shadow thread. Ensuite, les évènements de l’interface utilisateur sont collectes par le thread principal et envoyés au shadow thread. Les évènements sont sérialisés en charges utiles et transmis au thread JS. Enfin, le thread JavaScript examine les charges utiles et invoque les fonctions natives ou modifie l’interface utilisateur. Ces étapes se répètent continuellement à chaque itération de la boucle d’évènements de JavaScript. 19 Une fois que chaque boucle d’évènement du thread JS est terminée, le cote natif recoit les mises à jour par lots des vues natives ; celles-ci sont ensuite exécutées dans le thread natif. Il est à noter que les mises à jour par lots doivent être envoyées par le thread JS au thread natif avant la date limite de rendu de l’image suivante, afin de maintenir les performances de l’application. Un thread JS lent en raison d’un traitement complique dans la boucle d’évènements JS nuit à l’interface utilisateur. La seule exception ou un thread JS lent n’affecte pas les performances est dans les scenarios ou les natives se déroulent entièrement dans le thread natif. Pour éviter qu’un thread ne bloque l’autre, le bridge React Native permet une communication asynchrone entre les threads. Des plus, les messages sont mis en lots, ou passes entre les threads de manière efficace. En outre, le bridge sérialise les communications pour empêcher le partage des données ou l’exploitation des mêmes données par deux threads. Depuis la nouvelle architecture React 18 et Hermes Hermes Comme explique précédemment, React Native peut s’exécuter dans deux environnements : ❖ JavaScriptCore dans votre appareil mobile ❖ Le moteur Chrome V8 Bien que les deux environnements soient très similaires, cela peut provoquer certaines incohérences. De plus, les applications de plus grande taille utilisant des Framework JavaScript connaissent souvent des problèmes de performance à mesure que les développeurs ajoutent des fonctionnalités et de la complexité. Cela fait donc un certain temps que facebook travaille sur le fait de moins faire appel au “runtime” JavaScript pour améliorer les performances des apps, même sur les appareils grand public dont la mémoire est limitée, le stockage lent et la puissance de calcul réduite. Une des clés principales qu’amené Hermes est donc la pré-compilation du bvtecode. En général, après avoir été chargé, un moteur JavaScript analyse la source et produit du pytecode. Le début de l’exécution de JavaScript est retardé par cette étape. Hermes utilise un compilateur avance, qui s’exécuté dans le cadre du développement d’applications mobiles, pour omettre cette phase. Par conséquent plus de temps peut être consacre a l’optimisation du bytecode, le rendant plus compact et plus efficace. Il est possible d’effectuer des optimisations 20 sur l’ensemble du programme, comme la déduplication des fonctions et l’empaquetage des tables de chaines. Le bytecode est conçu pour être mappe en mémoire au moment de l’exécution et interprète sans qu’il soit nécessaire de lire avidement le fichier entier. Sur de nombreux appareils mobiles moyen et bas de gamme, les E/S de la mémoire flash introduisent une latence importante. Le chargement du bytecode à partir de la mémoire flash uniquement lorsque cela est nécessaire et l’optimisation de la taille du bytecode se traduisent par des améliorations notables du TTI (Time To Interact). De plus, les systèmes d’exploitation mobiles qui n’effectuent pas de swap, comme Android, peuvent toujours évincer ces pages en cas de contrainte mémoire, car la mémoire est mappée en lecture seule et soutenue par un fichier. Sur les appareils dotes d’une mémoire limitée, cela réduit le nombre de processus tues par l’épuisement de la mémoire. Figure 6: logo Bytecode Une autre clé majeure des performances du moteur Hermes réside dans la mise en place de son “garbage collector”. L’utilisation efficace de la mémoire est particulièrement cruciale pour les appareils mobiles. Les systèmes d’exploitation ne prennent généralement pas en charge le swapping. Les applications gourmandes en mémoire sont interrompues de force par les systèmes d’exploitation sur les appareils bas de gamme, et la mémoire est une ressource rare. Les fonctionnalités d’arrière-plan en pâtissent et de longs redémarrages sont nécessaires lorsque les applications sont interrompues. Hermes inclut donc un garbage collector pour réduire la quantité de mémoire et d’espace en adressage virtuel que le moteur utilise. Nouvelle architecture 21 Figure 7: logo CODEGEN Jusqu’à présent, React Native utilisait le Bridge dans la conception pour assurer la communication entre les threads JavaScript et natif. Les données devaient être sérialisées en JSON avant d’être envoyées à travers le bridge à tout moment. Les données devaient également être décryptées lorsqu’elles étaient reçues du cote oppose. Cela implique qu’il n’y a pas de communication entre les mondes JavaScript et Natifs. Toutefois, dans la nouvelle architecture, le bridge est remplacé par un module appelé JavaScript Interface (JSI), qui est une couche légère et polyvalente, écrite en C++, pouvant être utilisée par le moteur JavaScript pour invoquer directement des méthodes dans le domaine natif. JSI est donc découplée du moteur, ce qui signifie que la nouvelle architecture permet l’utilisation d’autres moteurs JavaScript comme Chakra, v8, Hermes... Une autre évolution principale de l’architecture est le système de rendue “Fabric”, qui remplace le Manager UI. Auparavant, React exécutait le code et créait un “ReactElementTree” en JavaScript. Sur la base de cet arbre, le rendre créait un “ReactShadowTree” en C++. Cet arbre était utilisé par le moteur de mise en page pour calculer les positions des éléments de l’interface utilisateur pour l’écran hôte. Une fois que les résultats du calcul de la mise en page étaient disponibles, le shadow tree était transformé en “HostViewTree” qui comprenait des éléments natifs. 22 Selon la documentation Facebook : <<Fabric est le nouveau système de rendu de React Native, une évolution conceptuelle du système de rendu hérité >> Comme JSI expose directement les méthodes natives à JavaScript, u compris les méthodes de l’interface utilisateur, les threads JS et UI peuvent ainsi être synchronises. Les performances pour les listes, la navigation, la gestion des gestes, etc. S’en trouvent améliorées. Parmi les changements effectifs, React Native propose maintenant aussi les “Turbo Modules”. Dans l’architecture précédente, tous les modules natifs utilisent par JavaScript (ex : Bluetooth, Géolocalisation, Stockage de fichiers.) doivent être initialises avant l’ouverture de l’application. Cela signifie que même si l’utilisateur n’a pas besoin d’un module particulier, celui-ci doit été initialise au démarrage. Les “Turbo Modules” sont donc une amélioration permettant à JavaScript de charger chaque module uniquement quand il est nécessaire, en mode “lazy loading”. Enfin, toutes ces nouveautés dans l’architecture React Native sont appuyées par CodeGen, un vérificateur et générateur de typage permettant à JavaScript, qui a un typage dynamique, d’échanger avec JSI, écrit en C++ et qui par conséquent repose sur un typage statique. Figure 8: logo shadow thread 3.6.2 Argumentation du choix de React Native 1. Développement multiplateforme : React Native permet de créer des applications pour IOS et Android à partir d’un seul code source. Cela permet de réduire les couts et les 23 efforts de développement, car une grande partie de la logique métier peut être partagée entre les deux plateformes 2. Productivité accrue : Grace a la réutilisation de composants et a l’utilisation du langage JavaScript, React Native offre une productivité élevée. Les développeurs peuvent développer rapidement des fonctionnalités, effectuer des tests plus facilement et itérer plus rapidement. 3. Performance native : Contrairement aux Framework hybrides, React Native utilise des composants natifs, ce qui offre des performances similaires à celles des applications développées en langages natifs tels que Java (pour Android) et Objective-C ou Swift (pour IOS). Les applications React Native peuvent donc offrir une expérience utilisateur fluide et réactive. 4. Grande communauté et écosystème : React Native bénéficie d’une communauté de développeurs très active et d’un écosystème riche en bibliothèques, en outils en ressources. Cela facilite la résolution des problèmes, l’apprentissage et la mise en œuvre de fonctionnalités avancées. 5. Mises à jour en temps réel : Avec le Hot Reloading et le Live Reloading de React Native, les développeurs peuvent voir les changements apportés au code en temps réel, sans avoir à recompiler ou redémarrer l’application. Cela permet un processus de développement plus rapide et plus efficace. 6. Facilite d’apprentissage : Si vous avez déjà des compétences en JavaScript et en React, la courbe d’apprentissage de React Native est relativement douce. Il est plus facile pour les développeurs web de se familiariser avec le développement d’applications mobiles grâce à React Native. 7. Maintenance simplifiée : En utilisant un codebase commun pour les deux plateformes, la maintenance de l’application est plus simple et moins sujette aux erreurs. Les correctifs de bugs, les mises à jour et les nouvelles fonctionnalités peuvent être implémentes plus rapidement et avec moins d’efforts. 24 3.7 Expo Go Découvrez Expo Go, le client open source gratuit pour Développer et tester des applications React Native sur Android et IOS. Expo Go est un client gratuit open source pour tester les Figure 9: logo Expo applications React Native sur Android et IOS sans avoir besoin de créer quoi que ce soit localement. C’est le moyen le plus rapide d’être opérationnel et d’utiliser l’application client Expo Go sur votre appareil Android ou IOS. Il vous permet d’ouvrir des applications servies via Expo CLI et d’exécuter vos projets plus rapidement lors de leur développement. Installez Expo Go sur votre appareil Il est disponible sur Android Play Store et IOS App Store. ❖ Android Play Store – Android Lollipop (5) et supérieur ❖ IOS App Store – IOS 13 et supérieur Comment ça fonctionne Expo Go est une application native installée sur votre appareil. Lorsque vous exécutez npx expo start votre projet, Expo CLI démarré un serveur de développement et généré un code QR, Vous pouvez ensuite ouvrir l’application Expo Go sur votre appareil et scanner le code QR pour vous connecter au serveur de développement. Figure 10: logo Développement 25 Le serveur de développement renvoie un fichier manifeste JSON qui décrit le projet. Expo Go utilise ce manifeste pour télécharger le bundle JavaScript et tous l’actif nécessaire à l’exécution du projet. Ensuite, le moteur JavaScript exécute ce bundle JavaScript pour rendre l’application React Native. Manifeste Le manifeste est similaire à un index.html sur le web. Il est servi à partir de L’URL racine / et permet de télécharger le code du script du projet à partir de bundleUrl. Le manifeste peut être personnalise à l’aide de la configuration de l’application (app.json, app.config.js). Des champs supplémentaires comme Icon et splash peuvent être utilises pour personnaliser la façon dont Expo Go ou expo-dev-client présente l’application. Figure 11: logo Nom de projet Version du SDK Expo Go utilise des versions SDK correspondant à une version majeure de expo et de l’application Expo Go. Vous pouvez voir les versions SDK prises en charge dans l’application Expo Go en accédant à la page des paramètres. Nous publions une nouvelle version du SDK environ tous les trimestres. Découvrez quelle version de React Native correspondent à quelles versions du SDK Expo. Connectez-vous a Expo Go Ouvrez l’application Expo Go une fois l’installation terminée. Si vous avez créé un compte avec Expo CLI, vous pouvez vous connecter en cliquant sur le buton Connexion dans l’entête supérieur de l’onglet Accueil. La connexion vous permettra d’ouvrir plus facilement des projets dans l’application Expo Go tout en les développant-ils apparaitront automatiquement dans la section Projets de l’onglet Accueil de l’application. 26 Production Expo Go n’est pas destiné à une distribution publique. C’est un client de développement qui n’est pas optimise pour les performances. Nous proposons une suite d’outils pour créer et soumettre vos applications directement aux magasins d’application. Pour plus d’informations, voir Répartition. Vous pouvez créer votre propre application de type Expo Go en utilisant le expo-dev-client package. Ce package vous permet de créer un client natif avec n’importe quel code ou configuration natif personnalise ou une bibliothèque tierce qui nécessite la configuration du code natif. Pour plus d’informations, consultez Builds de développement. L’étape suivante Le processus de gestion d’un nouveau projet Expo se compose de trois étapes. Vous commencez par initialiser un nouveau projet, puis démarrez le serveur de développement avec Expo CLI et enfin ouvrez l’application sur votre appareil avec Expo Go pour voir vos modifications en direct. 1. Initialiser un nouveau projet Pour initialiser un nouveau projet, utilisez create-expo-app pour exécuter la commande suivante : 27 Figure 12: logo terminale pour créer un projet 2. Démarrer le serveur de développement Pour démarrer le serveur de développement, exécutez la commande suivante : Figure 13: logo terminal pour run l’application Lorsque vous exécutez la commande ci-dessous, l’Expo CLI démarré Metro Bundler. Ce bundler est un serveur HTTP qui compile le code JavaScript de votre application a l’aide de Babel et le sert à l’application Expo. Voyez comment Expo Développement Server fonctionne pour plus d’information sur ce processus. 3. Ouvrez l’application sur votre appareil Pour ouvrir l’application sur votre appareil sur lequel Expo Go est déjà installé : ➢ Sur votre appareil Android, appuyez sur Scanner le code QR dans l’onglet Accueil de l’application Expo Go et scannez le code QR que vous voyez dans le terminal 28 ➢ Sur votre iPhone ou iPad, ouvrez l’application Apple Camera par défaut et scannez le code QR que vous voyez dans le terminal. Vous pouvez ouvrir le projet sur plusieurs appareils simultanément. Allez-y et essayez-le sur les deux téléphones en même temps si vous les avez a portée de main. L’application ne se charge pas sur votre appareil ? Tout d’abord, assurez-vous que vous êtes sur le même réseau Wi-Fi sur votre ordinateur et votre appareil. Si cela ne fonctionne toujours pas, cela peut être du a la configuration du routeur – c’est courant pour les réseaux publics. Vous pouvez contourner ce problème en choisissant le type de connexion Tunnel lors du démarrage du serveur de développement, puis en scannant à nouveau le code QR. Figure 14: logo terminal pour commande turnel Utiliser un émulateur ou un simulateur ? Si vous utilisez un émulateur/simulateur, les raccourcis clavier Expo CLI suivants peuvent être utiles pour ouvrir l’application sur l’une des plates-formes suivantes : 29 APPELS API REST Les applications sur le Web et les appareils mobiles ne peuvent souvent pas stocker toutes les informations dont elles ont besoin. Par conséquent, ils doivent accéder au Web pour mettre à jour des données, récupérer des données ou demander un service a un tiers. La transaction qui a lieu entre deux appareils (client et serveur) s’appelle un appel API. Une API (interface de programmation d’application) utilisera généralement le paradigme de conception REST pour gérer toutes les façons d’y accéder (appelées). Étant donné que cela est devenu une tache très courante pour les applications, quelques moyens utiles ont émerge pour y parvenir. Dans cet article, nous allons parler de la fetch fonction et de la axios bibliothèque. Ces deux méthodes réalisent la même tâche, en effectuant un appel HTTP, mais elles s’y prennent de manière légèrement différente. 3.7.1 Fetch Le fetch API est une fonction JavaScript intégrée. Vous pouvez utiliser fetch en fournissant l’URL de l’emplacement de votre contenu. Cela enverra une requête GET a cette URL. fetch('https://example.com/data' En fonction de ce qui se trouve à cette adresse, un objet de réponse sera renvoyé avec les données. Les données ne sont pas renvoyées instantanément. Par conséquent, le fetch API renvoie un Promise. L’objet Promise renverra un objet de réponse lorsque la requête réseau sera effectué. Nous pouvons enchainer des fonctions qui s’exécuteront lorsque la Promise retournera un objet de réponse. 30 Nous pouvons lire le code ci-dessus comme ; 1. Récupérer les données à l’URL 'https://example.com/data' 2. Ensuite, transformez la réponse en JSON 3. Ensuite, renvoyez la name propriété sur l’objet JSON 4. S’il y a une erreur, consignez l’erreur dans la console. 3.7.2 Axios La bibliothèque Axios a gagné en popularité parallèlement à l’augmentation des applications qui échangent des informations à l’aide de JSON. Trois choses qui rendent la bibliothèque Axios si utile sont la possibilité de ; ➢ Intercepter les demandes et les réponses ➢ Transformer les données de requête et de réponse ➢ Transformer automatiquement les données pour JSON Ensuite, examinons une requête GET plus petite. Figure 15:logo fetch Nous appelons la même URL que nous l’avons fait avec le fetch API, mais nous n’avons pas à transformer manuellement l’objet de réponse en JSON. Axios a plus de fonctionnalités qui 31 peuvent être utiles avec des applications plus grandes, mais nous allons nous concentrer sur les bases dans notre application React Native. 3.8 Comment faire des appels d’API REST dans React Native App Figure 16: logo code en react native 3.9 En conclusion Comme évoque précédemment, bien que le moteur Hemmes et la nouvelle architecture cohabitent déjà au sein des dernières versions de React, Facebook rappelle que ces évolutions ne sont pas encore entièrement stables. Elles sont toujours en cours de travail et d’améliorations dans une version de “release candidate”. De plus, pour que cette nouvelle version soit totalement utilisable, les packages doivent aussi évoluer et basculer sur cette solution. 32 React Native vit donc actuellement un moment charnière qui annonce un nouveau souffle à la librairie pour lui promettre encore de beaux jours. Les développeurs ses peuvent déjà s’amuser à tester le moteur et l’architecture pour y participer. Néanmoins, cette version n’est pas encore conseillée pour une mise en production. 4 Node JS Node.js est un environnement d’exécution JavaScript open source et multiplateforme. C’est un outil populaire pour presque tous les types de projets ! Node.js exécute le moteur JavaScript V8, le cœur de Google Chrome, en dehors du navigateur. Cela permet à Node.js d’être très performant. Figure 17: logo Node js Une application Node.js s’exécutée en un seul processus, sans créer de nouveau thread pour chaque requête. Node.js fournit un ensemble de primitives d’E/S asynchrones dans sa bibliothèque standard qui empêchent le blocage du code JavaScript et, en général, les bibliothèques de Node.js sont écrites à l’aide de paradigmes non bloquants, faisant du comportement de blocage l’exception plutôt que la norme. Lorsque Node.js effectue une opération d’E/S, comme la lecture à partir du réseau, l’accès à une base de données ou au système de fichiers, au lieu de bloquer le thread et de perdre des cycles CPU en attente, Node.js reprendra les opérations lorsque la réponse reviendra. Cela permet à Node.js de gérer des milliers de connexions simultanées avec un seul serveur sans introduire le fardeau de la gestion de la simultanéité des threads, qui pourrait être une source importante de bogues. Node.js a un avantage unique car des millions de développeurs frontaux qui écrivent du JavaScript pour le navigateur sont désormais capables d’écrire le code cote serveur en plus du code cote client sans avoir besoin d’apprendre un langage complètement diffèrent. 4.1 Package.json Le fichier package.json est un fichier essentiel utilise dans les projets Node.js et JavaScript. Il contient des informations sur le projet, ses dépendances, ses scripts et d’autres métadonnées. 33 Point clés : 1. Dépendances et versions : Le fichier package.json permet de spécifier les dépendances nécessaires au projet, y compris les bibliothèques, les Framework et les modules. Il indique également les versions spécifiques des dépendances à utiliser, garantissant ainsi la cohérence entre les environnements de développement. 2. Scripts personnalises : Vous pouvez définir des scripts personnalises dans le fichier package.json, tels que des scripts de construction, de test ou de démarrage. Ces scripts automatisent des taches courantes et facilitent le flux de travail de développement. 3. Informations du projet : Le fichier package.json contient des informations sur le projet telles que le nom, la description, la version, les auteurs, les licences, etc. Ces informations aident à identifier et à documenter le projet de manière claire et concise. 4. Gestion des dépendances : Grace au fichier package.json, il est facile d’installer toutes les dépendances requises en exécutant une seule commande. Il permet également de mettre à jour les dépendances en spécifiant les versions souhaitées et en exécutant une autre commande. 5. Intégration d’outils et de services tiers : De nombreux outils et services du monde du développement s’intègrent au fichier package.json . Par exemple, des outils de construction comme webpack ou Babel utilisent les informations du fichier package.json pour configurer le projet. Les services d’intégration continue peuvent également exploiter les scripts définis dans le fichier package.json pour exécuter des tests automatiquement. Le fichier package.json est donc un élément central dans les projets Node.js et JavaScript, fournissant des informations essentielles sur le projet, ses dépendances et sa configuration. Il facilite la gestion des dépendances l’automatisation des taches et l’intégration avec d’autres outils et services. 4.2 @expo/vector-icons Cette bibliothèque est installée par défaut sur le modelé de projet a l’aide de npx create-expoapp et fait partie du expo package. Il est construit sur react-native-vector-icons et utilise une API similaire. Il comprend des ensembles d’icônes populaires que vous pouvez parcourir sur icons.expo.fyi. 34 4.3 React-navigation/native React Navigation est un choix solide pour gérer la navigation dans les applications React Native. Il offre une solution complète et facile à utiliser, avec des fonctionnalités de personnalisation étendues et une intégration transparente avec React Native. Que vous construisiez une application simple ou complexe, React Navigation peut vous aider à créer une expérience de navigation fluide et intuitive pour vos utilisateurs. Expo-notification expo-notifications fournit une API pour récupérer les jetons de notification push et pour présenter, planifier, recevoir et répondre aux notifications. 4.4 React-native-render-html React Native Render HTML est un outil pratique pour afficher du contenu HTML dans des applications mobiles React Native. Il offre des fonctionnalités puissantes, une personnalisation avancée et une bonne performance. Que vous ayez besoin d'afficher des articles de blog, des descriptions de produits ou tout autre contenu HTML dynamique, React Native Render HTML peut être une solution efficace pour répondre à vos besoins. 4.5 React-native-tailwindcss React Native TailwindCSS est une bibliothèque qui combine le Framework de styles CSS populaire, Tailwind CSS, avec React Native. Elle offre une approche basée sur les classes CSS pour styliser les composants React Native, facilitant ainsi la création d'interfaces utilisateur cohérentes et réactives. 35 5 PRESENTATION DU SYSTEME Au cours de ce chapitre j’essaierai de faire une présentation générale de l’application. Cette Présentation s’articulera sur les principaux types d’interfaces utilisateurs proposés par mon système. Rappelons qu’une interface utilisateur est une partie spécifique de l’application destinée à un utilisateur. Cette partie lui permettra d’interagir avec le système et de profiter aux différentes fonctionnalités qui lui sont offertes. 5.1 Les principales interfaces graphiques 5.2 Interface pour l’offre d’emploi Dans cette page on utilise une api pour afficher l’offre d’emploi. Cette API semble donc fournir un ensemble complet d’information sur les offres d’emploi, y compris les détails de chaque offre ainsi que les informations sur la société proposant l’emploi. Ces données peuvent être utilisées pour afficher des offres d’emploi dans un application, permettant aux utilisateurs de consulter les détails de chaque offre, de rechercher des offres spécifiques en fonction de critères tels que la ville, le domaine ou le niveau d’études, et de postuler aux offres qui les intéressent. Figure 18: page d’offre d’emploi 36 5.3 Interface pour l’appels d’offre Dans cette page on utilise une api pour afficher l’appels d’offre. Cette api fournie par “rimtic.com” permet d’accéder aux données des appels d’offres. Chaque appel d’offre est représenté par un objet contenant des informations telles que l’identifiant, la date de début et de fin, le libelle, la ville, le nombre des consultations, et s’il est mis en avant. Chaque appel d’offre est également associé à des informations sur la société émettrice, telles que l’identifiant, le nom, le numéro d’identification fiscale, le logo et l’adresse. Figure 19: page d’appels d’offre 37 5.4 Interface pour l’infos avis Dans cette page on utilise une api pour afficher l’infos avis. Cette api fournie par “rimtic.com” permet d’accès au données ou infos avis. Vous pouvez obtenir des informations précises sur les avis disponibles. Ces informations peuvent inclure des détails sur les opportunités, les évènements ou les annonces importantes lies à différentes sociétés. Figure 20: page d’infos et avis 5.5 Conclusion En conclusion, notre application propose trois pages distinctes, chacune offrant des informations spécifiques. La première page est dédiée aux offres d'emploi. Chaque offre d'emploi est présentée avec une introduction, une date de début et de fin, un libellé, un slug, un contenu, un logo, une ville, un domaine, une expérience requise, un niveau d'études et des détails sur la société. Les offres d'emploi sont essentielles pour les chercheurs d'emploi qui souhaitent postuler à des opportunités professionnelles. La deuxième page concerne les appels d'offres. Chaque appel d'offres est accompagné d'une date de début et de fin, d'un libellé, d'un slug, d'une ville, de détails sur la société et de son logo. Cette page est particulièrement utile pour les entreprises ou les prestataires de services intéressés par des contrats ou des projets. 38 Enfin, la troisième page présente des informations et des avis supplémentaires. Les avis sont fournis avec un libellé, un slug, des dates de début et de fin, des détails sur la société et son logo. Cette section peut être utile pour obtenir des informations sur les sociétés ou pour consulter les opinions des autres utilisateurs. Dans l'ensemble, notre application offre une plateforme complète pour les chercheurs d'emploi, les entreprises et les utilisateurs en quête d'informations sur les opportunités professionnelles, les appels d'offres et les avis dans différents domaines. 39 Conclusion générale En conclusion, notre application développée en React Native offre une plateforme complète pour les utilisateurs à la recherche d'opportunités professionnelles, d'appels d'offres et d'informations supplémentaires. La page des offres d'emploi permet aux chercheurs d'emploi d'accéder à une liste d'offres avec des détails pertinents tels que la date de début et de fin, le libellé, la ville, l'expérience requise et le niveau d'études. Lorsqu'un utilisateur clique sur une offre spécifique, il est redirigé vers la page de détails de l'offre, où il peut obtenir des informations plus approfondies sur la société, l'adresse et d'autres détails pertinents. De même, la page des appels d'offres offre aux entreprises ou prestataires de services la possibilité de consulter les appels d'offres en cours. Chaque appel d'offres est accompagné d'informations telles que la date de début et de fin, le libellé, la ville et des détails sur la société émettrice de l'appel d'offres. Lorsqu'un utilisateur sélectionne un appel d'offres spécifique, il est dirigé vers la page de détails de l'appel d'offres pour obtenir des informations plus spécifiques. Enfin, la page des informations et avis fournit des informations supplémentaires sur des sujets spécifiques. Les utilisateurs peuvent consulter les avis et les informations sur différentes entités ou projets. Chaque élément est accompagné d'un libellé et d'autres détails sur la société concernée. Lorsqu'un utilisateur clique sur un élément spécifique, il est redirigé vers la page de détails correspondante. En résumé, notre application offre une interface conviviale et intuitive permettant aux utilisateurs d'accéder facilement aux offres d'emploi, aux appels d'offres et aux informations supplémentaires. Grâce à son développement en React Native, l'application peut être utilisée sur différentes plateformes, offrant ainsi une expérience utilisateur cohérente. 40 WEBOGRAPHIE https://docs.expo.dev/get-started/expo-go/ https://reactnative.dev/architecture/overview https://en.wikipedia.org/wiki/React_Native https://nodejs.org/en/docs https://www.appstud.com/fr/blog-react-native-realiser-apps-mobiles-plusrapidement/ 41