BlockLucky Documentation officielle GitHub

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 :

PowerShell
ipconfig

Relever l'« Adresse IPv4 » de la carte Wi-Fi, par exemple 192.168.1.42.

Sous Linux :

Terminal
ip -4 addr

Sous macOS, pour la carte Wi-Fi habituelle :

Terminal
ipconfig getifaddr en0

L'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 :

Configuration
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-client

Seules 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 :

Terminal
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

Terminal
cd mobile-app
npm start

Metro 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.