Tester sur un téléphone
Cette page explique comment faire tourner l'application mobile sur un vrai téléphone ou un émulateur, contre un backend lancé sur la machine de développement. La difficulté principale est réseau : le téléphone doit joindre l'API et le serveur Socket.IO de l'ordinateur. Le lancement général des applications est décrit dans Lancer les applications.
Prérequis
| Élément | Détail |
|---|---|
| Backend démarré | Base, Redis et blockchain locale prêts, API sur le port 2053 (voir Infrastructure locale) |
| Dépendances mobiles | npm ci dans mobile-app/ |
| Téléphone | Application Expo Go dans une version compatible avec le SDK Expo 58 du projet, ou émulateur Android, ou simulateur iOS sur macOS |
| Réseau | Ordinateur et téléphone sur le même réseau Wi-Fi, sans isolation des clients |
Principe
flowchart LR T["Téléphone : Expo Go"] -->|"bundle JavaScript"| M["Metro sur l'ordinateur"] T -->|"HTTP EXPO_PUBLIC_API_URL"| B["Backend : port 2053"] T -->|"WebSocket EXPO_PUBLIC_WS_URL"| B B --> DB["PostgreSQL, Redis, blockchain locale"] B --> MP["Mailpit : codes de vérification"]
Le téléphone télécharge le code JavaScript depuis Metro, puis appelle directement le backend. Dans .env.example, l'API est http://localhost:2053/api : sur un téléphone, localhost désigne le téléphone lui-même, et toutes les requêtes échouent. Il faut remplacer localhost par l'adresse de l'ordinateur sur le réseau local.
Étape 1 : trouver l'adresse de l'ordinateur
Sous Windows :
ipconfigRelever l'« Adresse IPv4 » de la carte Wi-Fi, par exemple 192.168.1.42.
Sous Linux :
ip -4 addrSous macOS, pour la carte Wi-Fi habituelle :
ipconfig getifaddr en0L'adresse change d'un réseau à l'autre : à refaire après chaque changement de Wi-Fi.
Étape 2 : configurer l'application
Créer mobile-app/.env à partir de .env.example :
EXPO_PUBLIC_API_URL=http://192.168.1.42:2053/api
EXPO_PUBLIC_WS_URL=http://192.168.1.42:2053
EXPO_PUBLIC_SENTRY_DSN=
EXPO_PUBLIC_WEB3AUTH_CLIENT_ID=blocklucky-etherbay-clientSeules les deux premières lignes comptent (voir Stack et structure). Pour tester la connexion Google, renseigner EXPO_PUBLIC_GOOGLE_IOS_CLIENT_ID ou EXPO_PUBLIC_GOOGLE_ANDROID_CLIENT_ID, vides dans .env.example. Le fichier .env est ignoré par Git.
| Cible | Adresse à utiliser |
|---|---|
| Téléphone physique | Adresse IPv4 de l'ordinateur |
| Émulateur Android | 10.0.2.2, alias de la machine hôte dans l'émulateur, ou l'adresse IPv4 |
| Simulateur iOS | localhost fonctionne, le simulateur partageant le réseau du Mac |
Les variables EXPO_PUBLIC_* sont lues au démarrage de Metro. Après une modification de .env, relancer Metro en vidant son cache :
npx expo start -cÉtape 3 : rendre le backend joignable
Le serveur Express écoute sur toutes les interfaces (httpServer.listen(env.PORT) sans adresse, dans backend/src/server.ts). Dans docker-compose.yml, le service backend publie aussi 2053:2053 sur toutes les interfaces. Il reste deux obstacles possibles :
- Pare-feu. Le pare-feu de l'ordinateur doit accepter les connexions entrantes sur le port 2053 depuis le réseau local. Sous Windows, la première exécution de Node.js propose généralement d'autoriser l'accès aux réseaux privés.
- Isolation du Wi-Fi. Les réseaux publics ou d'entreprise empêchent souvent deux appareils de se voir. Utiliser un réseau domestique ou le partage de connexion du téléphone.
Vérification depuis le navigateur du téléphone : ouvrir http://192.168.1.42:2053/health/live. Une réponse JSON confirme que le réseau est bon.
La configuration CORS du backend (CORS_ORIGINS) ne concerne pas l'application : les requêtes d'une application native n'envoient pas d'en-tête Origin de navigateur.
Étape 4 : lancer l'application
cd mobile-app
npm startMetro affiche un QR code. Le scanner avec l'appareil photo (iOS) ou depuis Expo Go (Android). Pour un émulateur ou un simulateur déjà ouvert, utiliser npm run android ou npm run ios.
Étape 5 : se connecter
Les trois comptes du seed (citoyen@etherbay.fr, boulangerie@etherbay.fr, maire@etherbay.fr) ont le mot de passe de démonstration EtherBay2026demo et un âge déjà vérifié : l'écran « Connexion » ouvre directement les onglets, sans passer par la vérification d'âge. Les comptes sont décrits dans Comptes de démonstration et connexion.
Pour un nouveau compte créé depuis « Inscription », le code de vérification arrive dans Mailpit, publié sur http://127.0.0.1:8025 de l'ordinateur uniquement. En développement, l'écran de saisie propose aussi le code renvoyé par le backend (devOtpPreview). Le nouveau compte doit ensuite envoyer sa pièce d'identité et être validé dans l'espace Mairie du web avant de pouvoir acheter un ticket.
À savoir
Si l'application affiche « Connexion impossible. Vérifiez votre connexion et réessayez. », vérifier l'adresse de l'API dans mobile-app/.env et le pare-feu du poste.
La connexion Google n'est disponible que si EXPO_PUBLIC_GOOGLE_IOS_CLIENT_ID ou EXPO_PUBLIC_GOOGLE_ANDROID_CLIENT_ID est défini dans mobile-app/.env et que GOOGLE_CLIENT_IDS est renseigné côté backend. Sans ces réglages, le bouton reste affiché mais désactivé. La connexion Apple n'existe plus.
Les sons de la roue et du compte à rebours passent par le haut-parleur du téléphone ; ils se coupent dans Paramètres, puis Affichage, interrupteur « Sons ».
La photo de la pièce d'identité fonctionne sur un téléphone physique avec l'appareil photo ou la galerie ; sur un émulateur ou un simulateur, choisir une image de la galerie.
La session n'est pas conservée : après avoir fermé complètement l'application, il faut se reconnecter.
Ce qui diffère d'un environnement réel
| Élément | En local |
|---|---|
| Liens vers l'explorateur | Absents : EXPLORER_URL est vide dans backend/.env.example, donc le backend ne renvoie aucune URL |
| Mode de la blockchain | BLOCKCHAIN_MODE=onchain sur la blockchain locale par défaut, ou simulated ; dans le second cas, aucun solde en ETH n'est affiché et le retrait des gains est masqué |
| HTTP non chiffré | Accepté par Expo Go en développement ; un build de production devra utiliser HTTPS (voir Builds et publication) |
Dépannage
| Symptôme | Cause probable | Solution |
|---|---|---|
| « Connexion impossible. Vérifiez votre connexion et réessayez. » | API injoignable depuis le téléphone | Vérifier l'adresse de l'API dans mobile-app/.env, puis ouvrir /health/live depuis le navigateur du téléphone |
| Écrans vides, chargement infini | EXPO_PUBLIC_API_URL contient localhost ou une ancienne adresse |
Corriger .env, puis npx expo start -c |
| Le QR code ne s'ouvre pas | Téléphone et ordinateur sur des réseaux différents | Même Wi-Fi, ou partage de connexion |
| Expo Go refuse le projet | Version d'Expo Go incompatible avec le SDK 58 | Mettre à jour Expo Go, ou utiliser un émulateur |
| Discussion et salle d'attente inactives | EXPO_PUBLIC_WS_URL incorrecte |
Même adresse que l'API, sans /api |
| Bouton Google désactivé | Identifiant client absent dans mobile-app/.env, ou GOOGLE_CLIENT_IDS vide côté backend (503) |
Renseigner les deux, puis npx expo start -c |
| « Vérifiez votre âge pour jouer. » à l'achat | Compte dont l'âge n'est pas validé | Envoyer la pièce d'identité, puis la valider dans l'espace Mairie du web, ou utiliser un compte du seed |
| Erreur 429 ou file d'attente | Limite de débit du backend atteinte après de nombreux essais | Attendre la fin de la fenêtre de limitation |
Les autres problèmes d'environnement sont traités dans Dépannage.