[Mobile] Vérification de mise à jour à chaque ouverture de l'app #106
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Résumé
La vérification de nouvelle version (bannière issue #66 / PR #69) ne se déclenche pas de façon fiable à l'ouverture de l'app : un utilisateur non connecté ne la déclenche jamais, alors que le back suppose l'inverse.
Contexte (trouvé en auditant le code, pas supposé)
apps/web/src/features/app-update/useAppUpdateCheck.ts: l'useEffect(…, [])lancebackgroundCheck()au montage (gardeif (!Capacitor.isNativePlatform()) return;) et enregistre un listenerApp.addListener("appStateChange", …)(re-check au retour en premier plan). Sa JSDoc dit qu'il est « safe to call unconditionally fromAppLayout, which renders on both platforms ».<UpdateBanner />(seul appelant du hook) n'est monté que dansapps/web/src/layouts/AppLayout.tsx(<main>), etAppLayoutest derrièreRequireAuth. Un utilisateur non connecté sur l'app native voitLandingPage→AppLayoutn'est jamais monté → aucune vérification tant qu'on n'est pas connecté.apps/api/src/modules/mobile/mobile.routes.ts— commentaire « the native update check (issue #66) runs on every app start, session or not ».CHECK_INTERVAL_MS,LAST_CHECKED_KEYdans@capacitor/preferences, survit au redémarrage) → une réouverture < 6 h ne fait aucun appel réseau. Et un APK ad-hoc (hors CI) aversionName = "1.0", queversion-compare.tsparseVersion(/^v?(\d+)\.(\d+)\.(\d+)$/) rejette → toujours « à jour ».Contenu attendu
La vérification automatique doit tourner à chaque ouverture de l'app, connecté ou non — déclencher
useAppUpdateCheck()/ monter<UpdateBanner />à un endroit rendu pour toutes les routes (p. ex. dansApp.tsxautour de<Routes>, ou un petit shell toujours monté), pas seulement dansAppLayout. Conserver la garde!isNativePlatform()et le throttle 6 h.Vérifier au passage que la fenêtre de throttle et le parsing de
versionNamesont acceptables (throttle éventuellement réduit ;parseVersiontolérant à"1.0").Dépendances
Aucune ; réutilise le hook existant tel quel.