## 12. Gestion des erreurs ### 12.1 Aucun contenu disponible **Stratégie** : Élargissement automatique progressif **Flow** : ``` 1. Recherche rayon 50 km → aucun résultat 2. Élargissement auto 100 km 3. Si toujours rien → département 4. Si toujours rien → région 5. Dernier recours → contenu national (toujours disponible) ``` **Messages adaptatifs** : | Cas | Message | |-----|---------| | **Trouvé à 100 km** | "Aucun contenu dans votre zone immédiate. Voici du contenu à proximité (100 km)" | | **Trouvé département** | "Aucun contenu local disponible. Voici du contenu dans votre département" | | **Contenu national** | "Aucun contenu local disponible. Voici du contenu national qui pourrait vous intéresser" | **Justification** : - **UX fluide** : pas de message d'erreur bloquant "Aucun contenu" - **User ne reste jamais sans contenu** - **Contenu national = filet de sécurité** : actualités Le Monde, podcasts génériques --- ### 12.2 Contenu signalé/supprimé pendant l'écoute **Décision** : Pas d'interruption brutale **Flow** : ``` 1. Contenu supprimé côté backend (modération) 2. Si contenu en écoute → laisser terminer lecture en cours 3. Après fin lecture → désactiver bouton "Précédent" pour ce contenu 4. Passage automatique suivant après 2s 5. Toast notification discrète : "Contenu précédent retiré (violation règles)" ``` **Si tentative "Précédent" manuellement** : - Message : "Ce contenu n'est plus disponible" - Retour au contenu actuel **Justification** : - **Sécurité routière** : pas d'interruption brutale pendant conduite - **User informé mais pas alarmé** : message discret - **Empêche réécoute** : contenu modéré inaccessible --- ### 12.3 Perte de réseau **Buffer adaptatif** (cf. [TECHNICAL.md](../../../TECHNICAL.md)) : | Réseau | Buffer min | Buffer cible | Buffer max | |--------|------------|--------------|------------| | **WiFi** | 5s | 30s | 120s | | **4G/5G** | 10s | 45s | 120s | | **3G** | 30s | 90s | 300s | **Comportement détaillé** : **Phase 1 : Connexion instable** (latence élevée, paquets perdus) - Aucun message immédiat - Lecture continue sur buffer - Si > 10s latence : toast discret "Connexion instable" **Phase 2 : Perte totale réseau** - Lecture continue jusqu'à épuisement buffer - Toast : "Hors ligne, lecture sur buffer (30s restantes)" - Compte à rebours visible **Phase 3 : Buffer épuisé sans reconnexion** - Pause automatique - Overlay : "Connexion perdue. Reconnexion en cours..." - Retry automatique toutes les 5s (max 6 tentatives = 30s) **Phase 4 : Basculement mode offline** (après 30s échec) - Popup : "Voulez-vous continuer avec vos contenus téléchargés ?" - Boutons : "Réessayer" / "Mode offline" - Si "Mode offline" → lecture contenus téléchargés **Reconnexion réussie** : - Reprise automatique lecture au point d'arrêt exact - Toast : "Connexion rétablie" **Justification** : - **Expérience fluide zones blanches** (tunnels, campagne) - **Buffer généreux** : absorbe fluctuations réseau mobile - **Mode offline secours** : si coupure prolongée --- ### 12.4 Géolocalisation désactivée **Mode dégradé automatique** **Contenu disponible** : | Type contenu | Disponible | |--------------|-----------| | **Contenu national** (podcasts, actualités) | ✅ | | **Contenu téléchargé** (offline) | ✅ | | **Contenus "Neutre"** géographiquement | ✅ | | **Contenu géolocalisé** (Ancré/Contextuel) | ❌ | | **Audio-guides** | ❌ | | **Notifications push géo-déclenchées** | ❌ | **Popup au lancement** : - **Apparition** : Premier lancement après refus géolocalisation - **Message** : "RoadWave fonctionne mieux avec la géolocalisation activée. Sans elle, seul le contenu national sera disponible." - **Boutons** : - "Activer" → Redirection paramètres OS - "Continuer sans" → Mode dégradé - **Checkbox** : "Ne plus me demander" **Banner permanent si refus** : - Bandeau haut écran : "Mode limité : géolocalisation désactivée. [Activer]" - Pas intrusif mais rappel constant - Disparaît si géolocalisation réactivée **Justification** : - **App reste fonctionnelle** sans GPS (pas de blocage) - **Incitation forte** à activer (meilleure UX) - **Respecte choix user** (RGPD : consentement libre) --- ## Récapitulatif Section 12