ObsiGate/PWA_GUIDE.md

344 lines
9.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Guide PWA - ObsiGate
ObsiGate est maintenant une **Progressive Web App (PWA)** complète, offrant une expérience d'application native sur tous les appareils.
## 🎯 Qu'est-ce qu'une PWA ?
Une Progressive Web App combine le meilleur du web et des applications natives :
- **Installation** : Installez ObsiGate sur votre appareil comme une application native
- **Mode hors ligne** : Accédez à vos notes même sans connexion internet
- **Notifications** : Recevez des alertes de mise à jour
- **Performance** : Chargement rapide grâce au cache intelligent
- **Multi-plateforme** : Fonctionne sur desktop, mobile et tablette
## 📱 Installation
### Sur Desktop (Chrome, Edge, Brave)
1. Ouvrez ObsiGate dans votre navigateur
2. Cliquez sur l'icône d'installation dans la barre d'adresse ( ou ⬇️)
3. Cliquez sur "Installer" dans la popup
4. ObsiGate apparaît maintenant dans vos applications
**Alternative** : Menu ⋮ → "Installer ObsiGate..."
### Sur Android
1. Ouvrez ObsiGate dans Chrome
2. Appuyez sur le menu ⋮ (trois points)
3. Sélectionnez "Ajouter à l'écran d'accueil"
4. Confirmez l'installation
5. L'icône ObsiGate apparaît sur votre écran d'accueil
### Sur iOS/iPadOS (Safari)
1. Ouvrez ObsiGate dans Safari
2. Appuyez sur le bouton Partager 📤
3. Faites défiler et sélectionnez "Sur l'écran d'accueil"
4. Nommez l'application et appuyez sur "Ajouter"
5. ObsiGate apparaît sur votre écran d'accueil
## ⚡ Fonctionnalités PWA
### Mode Hors Ligne
Le service worker met en cache :
- **Interface utilisateur** : HTML, CSS, JavaScript
- **Ressources statiques** : Icônes, polices
- **Contenu API** : Dernières données consultées
**Stratégies de cache** :
- **Cache First** : Assets statiques (interface)
- **Network First** : API et données dynamiques
- **Fallback** : Affichage gracieux en cas d'erreur
### Mises à Jour Automatiques
- Vérification des mises à jour toutes les minutes
- Notification élégante quand une nouvelle version est disponible
- Mise à jour en un clic sans perte de données
### Raccourcis d'Application
Accès rapide aux fonctionnalités depuis l'icône :
- **Recherche** : Ouvre directement la recherche
## 🛠️ Configuration Technique
### Fichiers PWA
```
ObsiGate/
├── frontend/
│ ├── manifest.json # Manifeste PWA
│ ├── sw.js # Service Worker
│ ├── icons/ # Icônes PWA
│ │ ├── icon-72x72.svg
│ │ ├── icon-192x192.svg
│ │ ├── icon-512x512.svg
│ │ └── ...
│ ├── index.html # Meta tags PWA
│ ├── app.js # Enregistrement SW
│ └── style.css # Styles PWA
└── generate_pwa_icons.py # Générateur d'icônes
```
### Manifeste (manifest.json)
Définit les métadonnées de l'application :
- Nom et description
- Icônes (multiples tailles)
- Couleurs de thème
- Mode d'affichage (standalone)
- Raccourcis d'application
### Service Worker (sw.js)
Gère le cache et le mode hors ligne :
- **Cache statique** : Interface et assets
- **Cache dynamique** : Données API (max 50 entrées)
- **Stratégies** : Cache-first et Network-first
- **Nettoyage** : Suppression automatique des anciens caches
### Icônes PWA
Tailles supportées :
- **72x72** : Favicon, petites icônes
- **96x96** : Raccourcis
- **128x128, 144x144, 152x152** : Appareils mobiles
- **192x192** : Android home screen (standard)
- **384x384** : Haute résolution
- **512x512** : Splash screens, maskable icons
**Maskable icons** : Icônes adaptatives avec safe zone pour Android
## 🔧 Génération des Icônes
### Utilisation du Script
```bash
# Générer les icônes SVG
python generate_pwa_icons.py
```
Le script crée :
- Icônes régulières (toutes tailles)
- Icônes maskables (192x192, 512x512)
- Icône de recherche (96x96)
- README avec instructions de conversion
### Conversion SVG → PNG (Production)
**Option 1 : ImageMagick**
```bash
cd frontend/icons
for file in *.svg; do
size=$(echo $file | grep -oP '\d+x\d+' | head -1 | cut -d'x' -f1)
convert -background none -resize ${size}x${size} "$file" "${file%.svg}.png"
done
```
**Option 2 : Inkscape**
```bash
cd frontend/icons
for file in *.svg; do
size=$(echo $file | grep -oP '\d+x\d+' | head -1 | cut -d'x' -f1)
inkscape "$file" --export-filename="${file%.svg}.png" --export-width=$size
done
```
**Option 3 : Outils en ligne**
- https://cloudconvert.com/svg-to-png
- https://convertio.co/svg-png/
**Note** : Les navigateurs modernes supportent les SVG directement, la conversion PNG est optionnelle.
## 🎨 Personnalisation
### Modifier les Couleurs
Éditez `frontend/manifest.json` :
```json
{
"theme_color": "#2563eb", // Couleur de la barre d'état
"background_color": "#1a1a1a" // Couleur de fond au lancement
}
```
### Modifier les Icônes
1. Éditez `generate_pwa_icons.py`
2. Modifiez les fonctions `create_svg_icon()` et `create_maskable_svg_icon()`
3. Régénérez : `python generate_pwa_icons.py`
### Ajouter des Raccourcis
Éditez `frontend/manifest.json` :
```json
{
"shortcuts": [
{
"name": "Nouvelle Note",
"url": "/?action=new",
"icons": [{"src": "/static/icons/new-96x96.png", "sizes": "96x96"}]
}
]
}
```
## 🔍 Débogage
### Vérifier l'Installation PWA
**Chrome DevTools** :
1. Ouvrez DevTools (F12)
2. Onglet "Application"
3. Section "Manifest" : Vérifiez les métadonnées
4. Section "Service Workers" : Vérifiez l'enregistrement
5. Section "Cache Storage" : Inspectez le cache
### Tester le Mode Hors Ligne
1. DevTools → Onglet "Network"
2. Cochez "Offline"
3. Rechargez la page
4. L'application doit fonctionner avec les données en cache
### Logs du Service Worker
```javascript
// Dans la console du navigateur
navigator.serviceWorker.getRegistration().then(reg => {
console.log('Service Worker:', reg);
console.log('Active:', reg.active);
console.log('Waiting:', reg.waiting);
});
```
### Forcer la Mise à Jour
```javascript
// Dans la console
navigator.serviceWorker.getRegistration().then(reg => {
reg.update();
});
```
### Désinstaller le Service Worker
```javascript
// Dans la console
navigator.serviceWorker.getRegistrations().then(registrations => {
registrations.forEach(reg => reg.unregister());
});
```
## 📊 Métriques PWA
### Lighthouse Audit
1. Chrome DevTools → Onglet "Lighthouse"
2. Sélectionnez "Progressive Web App"
3. Cliquez sur "Generate report"
**Critères évalués** :
- ✅ Manifeste valide
- ✅ Service Worker enregistré
- ✅ HTTPS (ou localhost)
- ✅ Icônes appropriées
- ✅ Responsive design
- ✅ Mode hors ligne
### Score Attendu
ObsiGate devrait obtenir **90-100/100** sur l'audit PWA.
## 🚀 Déploiement
### Prérequis
- **HTTPS obligatoire** en production (sauf localhost)
- Service Worker nécessite une connexion sécurisée
### Configuration Reverse Proxy
**Nginx** :
```nginx
location /sw.js {
add_header Cache-Control "no-cache, no-store, must-revalidate";
add_header Service-Worker-Allowed "/";
proxy_pass http://obsigate:8080;
}
location /manifest.json {
add_header Cache-Control "public, max-age=3600";
proxy_pass http://obsigate:8080;
}
```
**Traefik** :
```yaml
http:
middlewares:
sw-headers:
headers:
customResponseHeaders:
Cache-Control: "no-cache, no-store, must-revalidate"
Service-Worker-Allowed: "/"
```
## 🔒 Sécurité
### Content Security Policy
Le service worker respecte la CSP définie dans le backend :
- Scripts : `'self'` + CDN autorisés
- Styles : `'self'` + CDN autorisés
- Images : `'self'` + data URIs
### Permissions
PWA installée demande les mêmes permissions que le site web :
- Aucune permission supplémentaire requise
- Notifications : optionnelles (désactivées par défaut)
## 📱 Compatibilité
| Plateforme | Support | Notes |
|------------|---------|-------|
| Chrome Desktop | ✅ Complet | Installation native |
| Edge Desktop | ✅ Complet | Installation native |
| Firefox Desktop | ⚠️ Partiel | Pas d'installation, SW fonctionne |
| Safari Desktop | ⚠️ Partiel | Support limité |
| Chrome Android | ✅ Complet | Installation + notifications |
| Safari iOS | ✅ Complet | "Add to Home Screen" |
| Samsung Internet | ✅ Complet | Installation native |
## 🎓 Ressources
- [MDN - Progressive Web Apps](https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps)
- [web.dev - PWA](https://web.dev/progressive-web-apps/)
- [PWA Builder](https://www.pwabuilder.com/)
- [Workbox (Google)](https://developers.google.com/web/tools/workbox)
## ❓ FAQ
**Q : Puis-je utiliser ObsiGate sans l'installer ?**
R : Oui, l'installation est optionnelle. Le site web fonctionne normalement.
**Q : Les données sont-elles synchronisées hors ligne ?**
R : Non, le mode hors ligne utilise le cache local. Les modifications nécessitent une connexion.
**Q : Comment désinstaller l'application ?**
R : Desktop : Clic droit sur l'icône → "Désinstaller". Mobile : Maintenez l'icône → "Supprimer".
**Q : Le cache prend-il beaucoup d'espace ?**
R : Non, le cache est limité à ~50 entrées dynamiques + assets statiques (~5-10 MB).
**Q : Puis-je désactiver le service worker ?**
R : Oui, supprimez l'enregistrement dans DevTools ou commentez `registerServiceWorker()` dans `app.js`.
---
**ObsiGate PWA** - Vos notes Obsidian, partout, tout le temps. 📖✨