**Changements majeurs** : 1. **Suppression ADR-010 (Commandes volant et likes)** : - Contenu consolidé dans Règle 05 (section 5.3) - Raison : ADR-010 était du métier déguisé en architecture - Section "Implémentation Technique" ajoutée à Règle 05 - Pattern correct (addition) vs incorrect (multiplication) 2. **Déplacement ADR-011 → Compliance** : - `docs/adr/011-conformite-stores.md` → `docs/compliance/stores-submission.md` - Raison : Nature opérationnelle/légale, pas architecture technique - Nouveau dossier `/docs/compliance/` créé 3. **Renumérotation ADR (010-022)** : - Combler les trous de numérotation (010 et 011) - ADR-012→010, ADR-013→011, ..., ADR-024→022 - 22 ADR numérotés en continu (001-022) - Historique Git préservé (git mv) 4. **Mise à jour références** : - Règle 03 : ADR-010 → Règle 05 (section 5.3) - Règle 09 : ADR-010 → Règle 05 (section 5.3) - INCONSISTENCIES-ANALYSIS.md : toutes références mises à jour - Incohérence #15 annulée (faux problème : modes séparés) **Résultat** : - ✅ Séparation claire ADR (technique) vs Règles métier (fonctionnel) - ✅ Documentation compliance séparée - ✅ Numérotation ADR continue sans trous - ✅ Single Source of Truth (pas de redondance) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
619 lines
19 KiB
Markdown
619 lines
19 KiB
Markdown
# Plan de Validation TestFlight & Play Store
|
|
|
|
**Date** : 2026-01-31
|
|
**Auteur** : QA & Mobile Team RoadWave
|
|
**Objectif** : Valider stratégie de permissions géolocalisation pour acceptation stores
|
|
**Statut** : Prêt à exécuter
|
|
|
|
---
|
|
|
|
## Vue d'Ensemble
|
|
|
|
### Objectifs
|
|
|
|
1. **Valider acceptation Apple App Store** pour permission "Always Location"
|
|
2. **Valider acceptation Google Play Store** pour `ACCESS_BACKGROUND_LOCATION`
|
|
3. **Mesurer taux d'acceptation** utilisateurs réels (permissions progressives)
|
|
4. **Identifier bugs** flow de permissions sur différents OS/devices
|
|
5. **Optimiser textes** pour maximiser acceptation
|
|
|
|
### Timeline
|
|
|
|
```
|
|
Semaine 1 : Préparation builds + documentation stores
|
|
Semaine 2-3: Beta testing iOS (TestFlight)
|
|
Semaine 3-4: Beta testing Android (Internal Testing)
|
|
Semaine 5 : Corrections + re-soumission si nécessaire
|
|
Semaine 6 : Validation finale + go/no-go production
|
|
```
|
|
|
|
---
|
|
|
|
## Phase 1 : Préparation (Semaine 1)
|
|
|
|
### Checklist Build iOS
|
|
|
|
- [ ] **Code freeze** branche `release/testflight-permissions-v1`
|
|
- [ ] Vérifier `Info.plist` textes permissions :
|
|
- [ ] `NSLocationWhenInUseUsageDescription` ≤ 200 caractères
|
|
- [ ] `NSLocationAlwaysAndWhenInUseUsageDescription` ≤ 200 caractères
|
|
- [ ] Pas de mention tracking/publicité
|
|
- [ ] Mention explicite "optionnel"
|
|
- [ ] Vérifier `UIBackgroundModes` contient `location`
|
|
- [ ] Build & Archive (Xcode)
|
|
- [ ] Version : `1.0.0 (1)` (beta)
|
|
- [ ] Bundle ID : `com.roadwave.app`
|
|
- [ ] Signing : Distribution certificate
|
|
- [ ] Upload vers App Store Connect
|
|
- [ ] Attendre processing (15-30 min)
|
|
|
|
### Checklist Build Android
|
|
|
|
- [ ] **Code freeze** même branche que iOS
|
|
- [ ] Vérifier `AndroidManifest.xml` permissions :
|
|
- [ ] `ACCESS_FINE_LOCATION`
|
|
- [ ] `ACCESS_BACKGROUND_LOCATION`
|
|
- [ ] `FOREGROUND_SERVICE`
|
|
- [ ] `FOREGROUND_SERVICE_LOCATION`
|
|
- [ ] Vérifier foreground service déclaration
|
|
- [ ] Build AAB (Android App Bundle)
|
|
- [ ] Version : `1.0.0 (1)`
|
|
- [ ] Package : `com.roadwave.app`
|
|
- [ ] Signing : Release keystore
|
|
- [ ] Upload vers Play Console (Internal Testing)
|
|
|
|
### Documentation App Store Connect
|
|
|
|
**Questionnaire "Background Location"** :
|
|
|
|
**Q1** : "Why does your app use background location?"
|
|
|
|
**A1** (réponse exacte) :
|
|
```
|
|
RoadWave sends push notifications to users when they walk near tourist
|
|
audio-guides and monuments, even when the app is closed. This allows
|
|
tourists to discover local content while exploring a city on foot.
|
|
|
|
This feature is entirely optional and can be disabled in the app settings.
|
|
Users can use RoadWave fully without enabling background location - they
|
|
will simply use the "car mode" which only requires location "while using".
|
|
|
|
Background location is ONLY used for:
|
|
- Detecting proximity to audio-guide points of interest (200m radius)
|
|
- Sending a single push notification to alert the user
|
|
|
|
Background location is NEVER used for:
|
|
- Advertising or tracking
|
|
- Selling data to third parties
|
|
- Analytics beyond core functionality
|
|
```
|
|
|
|
**Q2** : "How do users benefit from background location?"
|
|
|
|
**A2** :
|
|
```
|
|
Users walking in a city receive timely notifications about nearby cultural
|
|
content (museums, monuments, historical sites) without having to keep the
|
|
app open. This improves the tourist experience while preserving battery life
|
|
through native iOS geofencing.
|
|
```
|
|
|
|
**Screenshots à fournir** (5 minimum) :
|
|
1. Onboarding demandant permission "When In Use" uniquement
|
|
2. App fonctionnelle en mode voiture (avec permission "When In Use")
|
|
3. Settings montrant toggle "Mode piéton" désactivé
|
|
4. Écran d'éducation avant demande "Always"
|
|
5. App fonctionnelle en mode voiture après refus "Always"
|
|
|
|
### Documentation Play Console
|
|
|
|
**Déclaration Permission Background Location** :
|
|
|
|
**Justification** (max 1000 caractères) :
|
|
```
|
|
RoadWave utilise ACCESS_BACKGROUND_LOCATION uniquement pour envoyer des
|
|
notifications push géolocalisées aux utilisateurs en mode piéton (touristes
|
|
à pied).
|
|
|
|
Usage précis :
|
|
- Geofencing radius 200m autour des points d'intérêt (monuments, musées)
|
|
- Notification push unique lorsque l'utilisateur entre dans la zone
|
|
- Permet découverte de contenus audio-guides sans ouvrir l'app
|
|
|
|
Cette fonctionnalité est OPTIONNELLE :
|
|
- Demandée uniquement si utilisateur active "Mode piéton" dans Settings
|
|
- Écran explicatif affiché AVANT demande permission système
|
|
- L'app fonctionne pleinement sans cette permission (mode voiture disponible)
|
|
|
|
Foreground service notification visible (Android 12+) lorsque geofencing actif.
|
|
|
|
Données de localisation :
|
|
- JAMAIS vendues ou partagées avec tiers
|
|
- JAMAIS utilisées pour publicité ciblée
|
|
- Anonymisées après 24h (conformité RGPD)
|
|
```
|
|
|
|
**Vidéo démo** (requis) :
|
|
- [ ] Enregistrer screen recording (25-30s)
|
|
- [ ] Montrer activation mode piéton depuis Settings
|
|
- [ ] Montrer écran d'éducation
|
|
- [ ] Montrer demande permission système Android
|
|
- [ ] Montrer app fonctionnelle si refusé
|
|
- [ ] Format : MP4, 1080p portrait, < 50MB
|
|
- [ ] Upload vers Play Console (section "Permissions")
|
|
|
|
---
|
|
|
|
## Phase 2 : Beta Testing iOS (Semaine 2-3)
|
|
|
|
### Configuration TestFlight
|
|
|
|
**Groupes de testeurs** :
|
|
|
|
| Groupe | Nombre | Profil | Objectif |
|
|
|--------|--------|--------|----------|
|
|
| **Internal** | 3-5 | Équipe dev/QA | Tests rapides pre-external |
|
|
| **External 1** | 10-15 | Early adopters tech-savvy | Tests fonctionnels détaillés |
|
|
| **External 2** | 20-30 | Grand public varié | Tests UX/acceptation réelle |
|
|
|
|
**Configuration** :
|
|
- [ ] Créer groupe "Internal Testers" (accès immédiat)
|
|
- [ ] Créer groupe "External Beta 1" (review Apple requise, 24-48h)
|
|
- [ ] Créer groupe "External Beta 2" (après succès Beta 1)
|
|
- [ ] Activer feedback automatique TestFlight
|
|
- [ ] Préparer questionnaire post-test (Google Forms)
|
|
|
|
### Scénarios de Test (Internal)
|
|
|
|
**Durée** : 2-3 jours
|
|
|
|
**Devices** :
|
|
- iPhone 12 (iOS 15)
|
|
- iPhone 13 Pro (iOS 16)
|
|
- iPhone 14 (iOS 17)
|
|
- iPhone 15 Pro (iOS 18)
|
|
|
|
**Test Case 1 : Onboarding Fresh Install**
|
|
```
|
|
Given: App jamais installée
|
|
When: Installation depuis TestFlight
|
|
Then:
|
|
- Écran onboarding demande permission "When In Use"
|
|
- Texte clair et rassurant
|
|
- Acceptation → navigation home
|
|
- Refus → mode dégradé disponible
|
|
```
|
|
|
|
**Test Case 2 : Mode Voiture (Permission When In Use)**
|
|
```
|
|
Given: Permission "When In Use" accordée
|
|
When: Utilisation normale app pendant 1h de conduite
|
|
Then:
|
|
- GPS actif quand app ouverte
|
|
- Notifications géolocalisées sonores fonctionnent
|
|
- ETA calcul correct (7s avant POI)
|
|
- Pas de demande permission supplémentaire
|
|
```
|
|
|
|
**Test Case 3 : Activation Mode Piéton**
|
|
```
|
|
Given: App utilisée en mode voiture depuis quelques jours
|
|
When: User active toggle "Mode piéton" dans Settings
|
|
Then:
|
|
- Écran d'éducation s'affiche AVANT demande OS
|
|
- Texte mentionne "optionnel"
|
|
- Tap "Continuer" → demande iOS "Allow Always"
|
|
- Tap "Non merci" → toggle reste OFF, app fonctionnelle
|
|
```
|
|
|
|
**Test Case 4 : Mode Piéton Actif**
|
|
```
|
|
Given: Permission "Always" accordée
|
|
When: App en arrière-plan, user marche près d'un POI
|
|
Then:
|
|
- Notification push reçue (200m du POI)
|
|
- Tap notification → app ouvre contenu
|
|
- Geofencing ne vide pas batterie (< 5%/h)
|
|
```
|
|
|
|
**Test Case 5 : Refus Permission Always**
|
|
```
|
|
Given: User refuse permission "Always" dans dialog iOS
|
|
When: Retour dans app
|
|
Then:
|
|
- Message "Mode piéton non disponible"
|
|
- Bouton "Ouvrir réglages" disponible
|
|
- Mode voiture toujours pleinement fonctionnel
|
|
- Pas de popup récurrent de demande permission
|
|
```
|
|
|
|
**Test Case 6 : Changement Permission dans Settings iOS**
|
|
```
|
|
Given: Permission "Always" active
|
|
When: User change dans Settings iOS → "While Using"
|
|
Then:
|
|
- App détecte changement (AppLifecycleState)
|
|
- Mode piéton désactivé automatiquement
|
|
- Notification in-app : "Mode piéton désactivé (permission changée)"
|
|
- Mode voiture reste fonctionnel
|
|
```
|
|
|
|
### Scénarios de Test (External Beta 1)
|
|
|
|
**Durée** : 1 semaine
|
|
|
|
**Instructions aux testeurs** :
|
|
|
|
```
|
|
Bienvenue sur la beta RoadWave !
|
|
|
|
Nous testons notre système de permissions géolocalisation.
|
|
|
|
Jour 1-2 : Installation & Mode Voiture
|
|
1. Installez l'app depuis TestFlight
|
|
2. Suivez l'onboarding (acceptez permission "When In Use")
|
|
3. Utilisez l'app normalement en voiture pendant 2 jours
|
|
4. Notez : bugs, crashs, notifications fonctionnent ?
|
|
|
|
Jour 3-5 : Mode Piéton (optionnel)
|
|
5. Allez dans Settings > Notifications
|
|
6. Activez "Audio-guides piéton"
|
|
7. Lisez l'écran explicatif
|
|
8. Acceptez OU refusez permission "Always" (votre choix !)
|
|
9. Testez mode piéton en marchant en ville
|
|
|
|
Jour 6-7 : Feedback
|
|
10. Répondez au questionnaire (lien ci-dessous)
|
|
11. Signalez tout bug via TestFlight feedback
|
|
|
|
Questionnaire : [lien Google Forms]
|
|
```
|
|
|
|
**Questionnaire Post-Test** (Google Forms) :
|
|
|
|
1. Avez-vous accepté permission "When In Use" au démarrage ? (Oui/Non)
|
|
2. Pourquoi ? (Texte libre)
|
|
3. Le texte de permission était-il clair ? (1-5)
|
|
4. Avez-vous essayé d'activer le mode piéton ? (Oui/Non)
|
|
5. Si oui, avez-vous accepté permission "Always" ? (Oui/Non/N'ai pas essayé)
|
|
6. Pourquoi ? (Texte libre)
|
|
7. L'écran explicatif avant permission "Always" était-il rassurant ? (1-5)
|
|
8. Si vous avez refusé "Always", l'app reste-t-elle utilisable ? (Oui/Non/N/A)
|
|
9. Bugs rencontrés ? (Texte libre)
|
|
10. Suggestions d'amélioration textes permissions ? (Texte libre)
|
|
|
|
### Métriques Collectées (Firebase Analytics)
|
|
|
|
**Events trackés** :
|
|
|
|
```dart
|
|
// Onboarding
|
|
analytics.logEvent(
|
|
name: 'permission_when_in_use_requested',
|
|
);
|
|
analytics.logEvent(
|
|
name: 'permission_when_in_use_granted',
|
|
parameters: {'granted': true},
|
|
);
|
|
|
|
// Mode piéton
|
|
analytics.logEvent(
|
|
name: 'pedestrian_mode_toggle_attempted',
|
|
);
|
|
analytics.logEvent(
|
|
name: 'permission_education_shown',
|
|
);
|
|
analytics.logEvent(
|
|
name: 'permission_education_continued', // User tap "Continuer"
|
|
);
|
|
analytics.logEvent(
|
|
name: 'permission_education_dismissed', // User tap "Non merci"
|
|
);
|
|
analytics.logEvent(
|
|
name: 'permission_always_granted',
|
|
parameters: {'granted': true},
|
|
);
|
|
|
|
// Fallback
|
|
analytics.logEvent(
|
|
name: 'degraded_mode_activated',
|
|
parameters: {'reason': 'permission_denied'},
|
|
);
|
|
```
|
|
|
|
**Dashboards Firebase** :
|
|
|
|
- Taux acceptation "When In Use" : `granted / requested`
|
|
- Cible : >85%
|
|
- Taux activation mode piéton : `toggle_attempted / total_users`
|
|
- Cible : >30%
|
|
- Taux acceptation "Always" : `always_granted / education_continued`
|
|
- Cible : >40%
|
|
- Taux abandon education : `education_dismissed / education_shown`
|
|
- Cible : <60%
|
|
|
|
### Critères de Succès Beta 1
|
|
|
|
- [ ] Taux acceptation "When In Use" ≥ 80%
|
|
- [ ] Taux acceptation "Always" ≥ 35%
|
|
- [ ] 0 crash lié aux permissions
|
|
- [ ] 0 feedback "app inutilisable sans Always"
|
|
- [ ] Score satisfaction écran éducation ≥ 4/5
|
|
- [ ] **Apple approuve External Beta** (critique !)
|
|
|
|
Si Apple **rejette** External Beta :
|
|
1. Analyser raison rejet (email App Store Connect)
|
|
2. Ajuster textes `Info.plist` si problème wording
|
|
3. Ajuster flow si problème UX (ex: trop insistant)
|
|
4. Re-soumettre sous 48h
|
|
5. Itérer jusqu'à acceptation
|
|
|
|
---
|
|
|
|
## Phase 3 : Beta Testing Android (Semaine 3-4)
|
|
|
|
### Configuration Play Console Internal Testing
|
|
|
|
**Testeurs** :
|
|
- [ ] Ajouter emails testeurs (max 100 pour Internal Testing)
|
|
- [ ] Créer "testers list" dans Play Console
|
|
- [ ] Share lien installation (pas de review Google pour Internal)
|
|
|
|
**Devices** :
|
|
- Google Pixel 5 (Android 12)
|
|
- Samsung Galaxy S21 (Android 13)
|
|
- OnePlus 9 (Android 14)
|
|
- Google Pixel 8 (Android 15)
|
|
|
|
### Scénarios de Test (Focus Android)
|
|
|
|
**Test Case 1 : Foreground Service Notification (Android 12+)**
|
|
```
|
|
Given: Permission background accordée, mode piéton actif
|
|
When: App en arrière-plan avec geofencing actif
|
|
Then:
|
|
- Notification foreground service visible dans panneau
|
|
- Texte : "RoadWave détecte audio-guides à proximité"
|
|
- Icône RoadWave visible
|
|
- Tap notification → ouvre app
|
|
- Notification ne peut pas être swipée (persistent)
|
|
```
|
|
|
|
**Test Case 2 : Permission Background Android 10+**
|
|
```
|
|
Given: Android 10, 11, 12, 13, 14, ou 15
|
|
When: Activation mode piéton
|
|
Then:
|
|
- Écran éducation s'affiche
|
|
- Dialog Android demande "Toujours autoriser"
|
|
- Options : "Toujours" / "Seulement pendant utilisation" / "Refuser"
|
|
- Selection "Toujours" → mode piéton activé
|
|
- Selection autre → mode piéton désactivé
|
|
```
|
|
|
|
**Test Case 3 : Battery Drain**
|
|
```
|
|
Given: Mode piéton actif, app en arrière-plan
|
|
When: 4 heures d'utilisation continue (marche en ville)
|
|
Then:
|
|
- Consommation batterie < 20% (< 5%/h)
|
|
- Pas de "Battery draining" warning Android
|
|
- Geofencing utilise location updates optimisés (pas de polling continu)
|
|
```
|
|
|
|
**Test Case 4 : Permission Revocation**
|
|
```
|
|
Given: Permission background accordée
|
|
When: User révoque dans Settings Android
|
|
Then:
|
|
- App détecte changement (broadcast receiver)
|
|
- Mode piéton désactivé automatiquement
|
|
- Foreground service arrêté
|
|
- Notification in-app : "Mode piéton désactivé"
|
|
```
|
|
|
|
### Vidéo Démo Play Store
|
|
|
|
**Enregistrement** :
|
|
- [ ] Device : Pixel 8 (Android 15, UI stock)
|
|
- [ ] Screen recorder : Android natif (Game Toolbar)
|
|
- [ ] Durée : 25-30s
|
|
- [ ] Orientation : Portrait
|
|
- [ ] Résolution : 1080p
|
|
|
|
**Script** (voir [permissions-strategy.md](permissions-strategy.md#vidéo-démo-play-store-script)) :
|
|
1. (0-5s) Settings > Notifications > scroll vers "Audio-guides piéton"
|
|
2. (5-8s) Toggle OFF → ON
|
|
3. (8-15s) Écran d'éducation affiché, scroll pour lire
|
|
4. (15-18s) Tap "Continuer" → demande permission Android
|
|
5. (18-22s) Tap "Toujours autoriser"
|
|
6. (22-25s) Retour Settings, toggle ON confirmé
|
|
|
|
**Post-production** :
|
|
- [ ] Ajouter text overlays : "Utilisateur active mode piéton", "Écran explicatif affiché", etc.
|
|
- [ ] Exporter MP4 < 50MB
|
|
- [ ] Upload Play Console > Permissions > Background Location > Video demo
|
|
|
|
### Critères de Succès Android
|
|
|
|
- [ ] Foreground service notification visible et claire
|
|
- [ ] Consommation batterie acceptable (< 5%/h)
|
|
- [ ] 0 crash sur Android 10-15
|
|
- [ ] Vidéo démo uploadée et acceptée Play Console
|
|
- [ ] Déclaration permission background validée
|
|
|
|
---
|
|
|
|
## Phase 4 : Validation & Go/No-Go (Semaine 5-6)
|
|
|
|
### Analyse Résultats
|
|
|
|
**Tableau consolidé** :
|
|
|
|
| Métrique | iOS (Cible) | iOS (Réel) | Android (Cible) | Android (Réel) | Status |
|
|
|----------|-------------|-----------|-----------------|----------------|--------|
|
|
| Taux acceptation permission base | >85% | ? | >85% | ? | ? |
|
|
| Taux activation mode piéton | >30% | ? | >30% | ? | ? |
|
|
| Taux acceptation permission background | >40% | ? | >40% | ? | ? |
|
|
| Crash rate permissions | 0% | ? | 0% | ? | ? |
|
|
| Battery drain mode piéton | <5%/h | ? | <5%/h | ? | ? |
|
|
| Feedback "app inutilisable" | 0 | ? | 0 | ? | ? |
|
|
|
|
### Décision Go/No-Go Production
|
|
|
|
**Critères GO** (tous doivent être ✅) :
|
|
- [ ] Apple a approuvé External Beta TestFlight
|
|
- [ ] Taux acceptation permission base iOS ≥ 80%
|
|
- [ ] Taux acceptation permission base Android ≥ 80%
|
|
- [ ] 0 crash critique lié aux permissions
|
|
- [ ] 0 feedback utilisateur "app inutilisable sans background permission"
|
|
- [ ] Vidéo démo Android uploadée et validée
|
|
- [ ] Battery drain mode piéton < 5%/h (iOS & Android)
|
|
|
|
**Si NO-GO** :
|
|
1. Identifier problème bloquant (cf métriques)
|
|
2. Planifier corrections (ex: rewording textes, ajustement flow)
|
|
3. Nouvelle itération beta (1-2 semaines)
|
|
4. Re-validation
|
|
|
|
**Si GO** :
|
|
1. Merge branche `release/testflight-permissions-v1` → `main`
|
|
2. Tag version `v1.0.0`
|
|
3. Préparer soumission production (Semaine 7)
|
|
|
|
---
|
|
|
|
## Phase 5 : Soumission Production (Semaine 7+)
|
|
|
|
### iOS App Store
|
|
|
|
**Checklist soumission** :
|
|
- [ ] Build production uploadé (même code que TestFlight validé)
|
|
- [ ] Version : `1.0.0 (1)`
|
|
- [ ] Screenshots stores (5 minimum, incluant permissions flow)
|
|
- [ ] Description mentionnant "mode piéton optionnel"
|
|
- [ ] Keywords : roadwave, audio, gps, tourisme, voyage
|
|
- [ ] Pricing : Gratuit
|
|
- [ ] App Privacy : Déclarer usage location (voir section)
|
|
- [ ] Submit for Review
|
|
|
|
**App Privacy (obligatoire iOS 14+)** :
|
|
|
|
Location Data Collection :
|
|
- [ ] "Precise Location" : Yes
|
|
- [ ] Purpose : "App Functionality" + "Product Personalization"
|
|
- [ ] Linked to user : Yes
|
|
- [ ] Used for tracking : No
|
|
- [ ] "Coarse Location" : No
|
|
|
|
**Timing** :
|
|
- Review Apple : 24-48h (généralement)
|
|
- Si rejet : corrections + re-soumission (24h)
|
|
- **Total prévu** : 3-7 jours
|
|
|
|
### Android Play Store
|
|
|
|
**Checklist soumission** :
|
|
- [ ] Build production (Release AAB)
|
|
- [ ] Version : `1.0.0 (1)`
|
|
- [ ] Screenshots (8 minimum)
|
|
- [ ] Description courte (80 caractères)
|
|
- [ ] Description longue (4000 caractères max)
|
|
- [ ] Catégorie : Travel & Local
|
|
- [ ] Pricing : Gratuit
|
|
- [ ] Data Safety : Déclarer usage location
|
|
- [ ] Submit for Review (Production track)
|
|
|
|
**Data Safety Form** :
|
|
|
|
Location Data :
|
|
- [ ] "Approximate location" : No
|
|
- [ ] "Precise location" : Yes
|
|
- [ ] Purpose : "App functionality" + "Personalization"
|
|
- [ ] Shared with third parties : No
|
|
- [ ] Optional : Yes (mode dégradé disponible)
|
|
- [ ] User can request deletion : Yes
|
|
|
|
**Timing** :
|
|
- Review Google : 3-7 jours
|
|
- Si rejet : corrections + re-soumission (1-2 jours)
|
|
- **Total prévu** : 5-10 jours
|
|
|
|
---
|
|
|
|
## Contingences & Risques
|
|
|
|
### Risque 1 : Apple rejette permission "Always"
|
|
|
|
**Probabilité** : Moyenne (30%)
|
|
**Impact** : Critique (bloque production)
|
|
|
|
**Mitigation** :
|
|
1. Rewording `Info.plist` pour insister sur "optionnel"
|
|
2. Ajouter screenshots montrant app sans permission "Always"
|
|
3. Écrire email explicatif à App Review Team
|
|
4. Si blocage persistant : envisager retrait mode piéton du MVP
|
|
|
|
### Risque 2 : Taux acceptation permission trop faible
|
|
|
|
**Probabilité** : Faible (20%)
|
|
**Impact** : Modéré (feature peu utilisée)
|
|
|
|
**Mitigation** :
|
|
1. A/B testing textes écran éducation
|
|
2. Améliorer wording pour rassurer utilisateurs
|
|
3. Ajouter testimonials/reviews dans écran éducation
|
|
4. Retarder demande "Always" (demander après 1 semaine d'usage)
|
|
|
|
### Risque 3 : Battery drain trop élevé
|
|
|
|
**Probabilité** : Faible (15%)
|
|
**Impact** : Critique (rejets stores + mauvaises reviews)
|
|
|
|
**Mitigation** :
|
|
1. Optimiser geofencing radius (200m → 500m)
|
|
2. Augmenter interval updates (30s → 60s)
|
|
3. Utiliser "significant location changes" iOS au lieu de "continuous"
|
|
4. Désactiver geofencing si batterie < 20%
|
|
|
|
### Risque 4 : Crash sur anciens OS
|
|
|
|
**Probabilité** : Faible (10%)
|
|
**Impact** : Modéré (fragmentation utilisateurs)
|
|
|
|
**Mitigation** :
|
|
1. Tester sur iOS 14, Android 10 (versions minimales)
|
|
2. Fallback gracieux si API geofencing non disponible
|
|
3. Considérer min SDK Android 11 (au lieu de 10) si trop de bugs
|
|
|
|
---
|
|
|
|
## Contacts & Ressources
|
|
|
|
### Équipe
|
|
|
|
- **Mobile Lead** : Responsable builds & soumissions stores
|
|
- **QA Lead** : Coordination testeurs beta, analyse métriques
|
|
- **Product Owner** : Décision go/no-go, priorisation corrections
|
|
- **Legal/RGPD** : Validation textes permissions conformité
|
|
|
|
### Outils
|
|
|
|
- **TestFlight** : https://appstoreconnect.apple.com
|
|
- **Play Console** : https://play.google.com/console
|
|
- **Firebase Analytics** : https://console.firebase.google.com
|
|
- **Questionnaire Beta** : Google Forms (lien à créer)
|
|
- **Tracking Issues** : GitHub Issues avec label `[testflight]`
|
|
|
|
### Documentation
|
|
|
|
- [Stratégie Permissions](permissions-strategy.md)
|
|
- [ADR-010 Frontend Mobile](../adr/010-frontend-mobile.md)
|
|
- [Règle 05 Mode Piéton](../regles-metier/05-interactions-navigation.md)
|
|
|
|
---
|
|
|
|
**Plan approuvé par** : [Nom Product Owner]
|
|
**Date d'approbation** : [Date]
|
|
**Prochaine revue** : Fin Semaine 2 (après External Beta 1)
|