Pokemon TCG
Description
Ce projet s'inscrit dans le cadre des enseignements en développement mobile suivis lors de ma troisième année de BUT Informatique. L'objectif était de concevoir une application Android en Kotlin et en Flutter intégrant plusieurs éléments clés : authentification, base de données locale, utilisation d'une API REST et mise en place d'une intégration continue, le tout en appliquant une méthodologie agile en binôme. Nous avons choisi de développer une application inspirée de Pokémon TCG, centrée sur la collection de cartes. Après une phase d'analyse, nous avons recentré nos efforts sur cette fonctionnalité principale pour tenir les délais.
Nous avons commencé par définir le modèle de données des cartes afin de pouvoir les récupérer via une API. Ensuite, nous avons utilisé Room pour mettre en place une base de données locale destinée à stocker les cartes de la collection de l'utilisateur. Par la suite, nous avons ajouté un système d'authentification Firebase, permettant aux utilisateurs de créer un compte et de sauvegarder leur collection. Enfin, nous avons mis en place une chaîne d'intégration continue avec Bitrise pour automatiser les tests et le déploiement. Une fois la version Kotlin finalisée, nous avons porté les fonctionnalités essentielles vers Flutter/Dart, aboutissant à deux versions de l'application permettant toutes deux de collectionner des cartes.
Ce projet m'a permis de développer une application complète sur deux stacks différentes (native Kotlin et cross-platform Flutter), de créer ma propre API REST avec Ktor pour contourner les limites d'une API existante, et de mettre en place une chaîne CI/CD complète avec Bitrise. J'ai également renforcé ma capacité à prioriser les fonctionnalités et à m'adapter aux contraintes de temps.
Défis & Solutions
Défi
La principale difficulté rencontrée au cours du projet concernait l’API initialement choisie. Celle-ci présentait des temps de réponse trop élevés et de fréquents timeouts. Nous avons confirmé ce problème via Postman, où seule une requête sur vingt aboutissait correctement. Cette instabilité rendait impossible la récupération fiable des cartes, notamment lors d’actions clés comme l’ouverture de boosters.
Solution trouvée
Face à cette contrainte, nous avons décidé de développer notre propre API en nous appuyant sur les données de l’API d’origine. Dans un contexte académique, nous avons enregistré les données lors des rares appels fonctionnels afin de les réutiliser. Nous avons conçu cette API avec Ktor, un framework Kotlin dédié au développement d’API. Nous avons mis en place les routes nécessaires pour gérer l’enregistrement et la récupération des cartes, en utilisant la sérialisation JSON, et connecté l’ensemble à une base de données MySQL. Initialement, l’API et la base de données étaient hébergées sur Render via une offre gratuite, mais après un mois, la base est devenue inaccessible en raison des limitations du plan. Nous avons donc opté pour un hébergement en local. Finalement, nous avons obtenu une API fiable et performante, nous permettant de récupérer les cartes de manière fluide.
Compétences acquises
- Développement Android (Kotlin) et multi-plateforme (Flutter/Dart)
- Intégration et création d'API REST (Ktor, MySQL)
- Authentification Firebase
- Base de données locales (Room) et distantes (MySQL)
- Intégration continue (Bitrise)
- Méthodes agiles (travail en binôme, sprints)
- Travail en équipe et adaptation aux contraintes
- Respect d'un cahier des charges
Aperçu