Application mobile
Une app iOS + Android Ă partir de ton backend Next.js existant, avec React Native + Expo. Ce n'est pas un projet Ă part â c'est une couche en plus sur ce que tu as dĂ©jĂ .
PrĂ©requis important : ce guide part du principe que tu as dĂ©jĂ un projet Next.js avec Prisma/Supabase et Better Auth en place (voir les autres guides). L'app mobile ne recrĂ©e pas de backend â elle appelle celui qui existe dĂ©jĂ .
Réutilisable vs spécifique : les étapes réutilisable sont valables pour n'importe quelle app mobile de ta stack. Les étapes spécifique dépendent du produit que tu construis.
Initialiser le projet Expo
Une app qui démarre sur ton téléphone via Expo Go, dans un dossier séparé du projet web.
Prérequis : Node.js et pnpm installés. L'app Expo Go installée sur ton téléphone (App Store / Play Store).
-
Crée le projet Expo, à cÎté de ton projet web
npx create-expo-app@latest mon-app-mobile --template default cd mon-app-mobile
C'est un dĂ©pĂŽt sĂ©parĂ© du projet Next.js â le mobile et le web restent deux applications distinctes qui parlent Ă la mĂȘme base de donnĂ©es via l'API.đ Comment voir le rĂ©sultat : tapelsdansmon-app-mobileâapp/,package.jsondoivent exister. -
Initialise Git
git init git add -A git commit -m "chore: init projet Expo"
đ Comment voir le rĂ©sultat : tapegit log --onelineâ une ligne avec ton message de commit doit s'afficher. -
Lance le serveur de développement
npx expo start
Un QR code s'affiche dans le terminal. Scanne-le avec l'appareil photo (iOS) ou l'app Expo Go (Android) pour ouvrir l'app sur ton tĂ©lĂ©phone, en direct.đ Comment voir le rĂ©sultat : l'app s'ouvre sur ton tĂ©lĂ©phone avec l'Ă©cran par dĂ©faut d'Expo. Modifie un texte dansapp/index.tsx, enregistre â le changement doit apparaĂźtre sur le tĂ©lĂ©phone en 1-2 secondes, sans rĂ©installer l'app (hot reload).
Exposer le backend en API
Ton app mobile peut appeler ton backend Next.js par HTTP, comme n'importe quel client.
Prérequis : le projet Next.js existe déjà (Prisma + Supabase branché).
-
Comprends la diffĂ©rence clĂ©Les Server Actions (utilisĂ©es dans le web) ne sont appelables que depuis une page Next.js du mĂȘme projet â pas depuis une app mobile. Il faut donc des Route Handlers classiques : des vraies routes API avec une URL, comme une API REST.
-
Crée une route API
// app/api/produits/route.ts export async function GET() { const produits = await prisma.produit.findMany(); return Response.json(produits); }Chaque donnĂ©e dont l'app mobile a besoin doit avoir sa route sousapp/api/.... C'est le mĂȘme Prisma, la mĂȘme base â juste exposĂ©e diffĂ©remment. -
Autorise les requĂȘtes venant de l'app mobile (CORS)Par dĂ©faut, Next.js n'accepte que les requĂȘtes venant de son propre domaine. Ajoute les en-tĂȘtes CORS nĂ©cessaires dans la route, ou un middleware, pour autoriser ton app mobile Ă appeler l'API en dĂ©veloppement comme en production.
-
Teste la route depuis un navigateur ou
curlcurl http://localhost:3000/api/produits
đ Comment voir le rĂ©sultat : le terminal doit afficher du JSON (ex.[{"id":"...","nom":"..."}]), pas une page d'erreur HTML. Teste ensuite depuis l'app mobile (sur le mĂȘme Wi-Fi que ton ordinateur, avec l'IP locale au lieu delocalhost) pour confirmer que la requĂȘte aboutit aussi depuis le tĂ©lĂ©phone.
Authentification mobile â Better Auth
Se connecter depuis le téléphone, avec la session gérée en toute sécurité.
Prérequis : Better Auth déjà configuré cÎté serveur Next.js.
-
Installe le client Better Auth pour Expo
npx expo install @better-auth/expo expo-secure-store
Better Auth fournit un client pensĂ© pour React Native â il gĂšre les appels rĂ©seau vers ton serveur d'auth existant.đ Comment voir le rĂ©sultat :@better-auth/expoapparaĂźt danspackage.json. -
Stocke le token de session de façon sécuriséeContrairement au web (cookies), le mobile stocke le token dans
expo-secure-storeâ un espace chiffrĂ© du tĂ©lĂ©phone, pas dans une simple variable ou un fichier en clair. -
CrĂ©e les Ă©crans connexion / inscriptionMĂȘmes champs que cĂŽtĂ© web (email, mot de passe), mais avec des composants React Native au lieu de shadcn/ui.đ Comment voir le rĂ©sultat : sur ton tĂ©lĂ©phone, crĂ©e un compte test depuis l'Ă©cran d'inscription â puis vĂ©rifie dans Prisma Studio (cĂŽtĂ© projet web) qu'une ligne apparaĂźt dans la table
User. -
ProtĂšge les Ă©crans qui demandent d'ĂȘtre connectĂ©VĂ©rifie la session au lancement de l'app et redirige vers l'Ă©cran de connexion si elle est absente ou expirĂ©e.đ Comment voir le rĂ©sultat : ferme complĂštement l'app puis rouvre-la â tu dois rester connectĂ© (pas de retour Ă l'Ă©cran de connexion). DĂ©connecte-toi : tu dois ĂȘtre redirigĂ© vers l'Ă©cran de connexion, et rouvrir l'app ne doit plus te reconnecter automatiquement.
Style â NativeWind
Les mĂȘmes classes Tailwind que sur le web, appliquĂ©es Ă des composants React Native.
Prérequis : étape 1 validée.
-
Installe NativeWind
npx expo install nativewind tailwindcss
Tailwind CSS n'existe pas nativement en React Native (pas de navigateur, pas de vrai CSS) â NativeWind traduit les classes Tailwind en styles React Native au moment de la compilation. -
Configure Tailwind pour le projet mobile
npx tailwindcss init
Untailwind.config.jspropre au projet mobile â les fichiers scannĂ©s ne sont pas les mĂȘmes que cĂŽtĂ© web (App.tsx,app/**/*.tsxau lieu deapp/Next.js).đ Comment voir le rĂ©sultat :ls tailwind.config.jsâ le fichier doit exister. -
Utilise les classes directement dans les composants
// exemple <View className="flex-1 items-center justify-center bg-white"> <Text className="text-lg font-bold">Bonjour</Text> </View>đ Comment voir le rĂ©sultat : colle cet exemple dans un Ă©cran, enregistre â sur ton tĂ©lĂ©phone, le texte « Bonjour » doit s'afficher centrĂ©, en gras, sur fond blanc. Changebg-whiteenbg-red-500pour confirmer que les classes prennent bien effet.
Ăcrans & fonctionnalitĂ©s
Le cĆur mĂ©tier de l'app â ce qui change Ă chaque projet.
Prérequis : étapes 2 et 3 validées.
-
Mets en place la navigation entre écrans
npx expo install expo-router
Expo Router fonctionne par dossiers, comme l'App Router de Next.js â un fichier = un Ă©cran. Le repĂšre est le mĂȘme que celui que tu connais dĂ©jĂ cĂŽtĂ© web.đ Comment voir le rĂ©sultat : crĂ©e un deuxiĂšme Ă©cran (ex.app/profil.tsx) et un lien vers lui â tape dessus sur ton tĂ©lĂ©phone, tu dois naviguer vers le nouvel Ă©cran avec l'animation de transition native. -
Construis les Ă©crans qui appellent tes routes APIMĂȘme logique que cĂŽtĂ© web (rĂ©cupĂ©rer des donnĂ©es, les afficher, les valider avec Zod avant envoi) â seuls les composants d'affichage changent.đ Comment voir le rĂ©sultat : ouvre l'Ă©cran concernĂ© sur ton tĂ©lĂ©phone â les vraies donnĂ©es de ta base (créées via Prisma Studio ou l'app web) doivent s'afficher, pas des donnĂ©es factices codĂ©es en dur.
-
GĂšre les notifications push si le projet en a besoin
npx expo install expo-notifications
Uniquement si le produit en a l'usage (ex. prĂ©venir un utilisateur) â ne l'ajoute pas par dĂ©faut.
Build & publication â EAS
Une app installable, publiée sur l'App Store et le Play Store.
Prérequis : compte Expo (expo.dev), compte développeur Apple et Google si publication réelle visée.
-
Installe l'outil de build EAS
npm install -g eas-cli eas login
đ Comment voir le rĂ©sultat : tapeeas whoamiâ ton nom de compte Expo doit s'afficher. -
Configure le projet pour le build
eas build:configure
đ Comment voir le rĂ©sultat : un fichiereas.jsonapparaĂźt Ă la racine du projet. -
Renseigne les variables d'environnement de prod
eas secret:create --name API_URL --value https://tondomaine.vercel.app
L'app mobile en production doit appeler ton backend Next.js dĂ©ployĂ©, paslocalhost.đ Comment voir le rĂ©sultat :eas secret:listdoit afficherAPI_URLdans la liste. -
Lance un build de test
eas build --platform android --profile preview
Un build « preview » s'installe directement sur un tĂ©lĂ©phone pour tester, sans passer par les stores â plus rapide qu'un cycle de validation complet.đ Comment voir le rĂ©sultat : une fois le build terminĂ© (~10-20 min, suivi sur expo.dev), un lien de tĂ©lĂ©chargement.apks'affiche dans le terminal â installe-le sur un tĂ©lĂ©phone Android, l'app doit se lancer et appeler ton API de production. -
Soumets aux stores quand tu es prĂȘt
eas build --platform all --profile production eas submit --platform all
La validation Apple prend en gĂ©nĂ©ral quelques jours ; celle de Google est plus rapide. PrĂ©vois cette marge avant une date de lancement.đ Comment voir le rĂ©sultat : le statut de la soumission est visible sur App Store Connect et Google Play Console â il passe de « En cours d'examen » à « ApprouvĂ© » (ou un refus avec le motif, Ă corriger).