- Ajout système complet de gestion des secteurs avec contours géographiques - Import des contours départementaux depuis GeoJSON - API REST pour la gestion des secteurs (/api/sectors) - Service de géolocalisation pour déterminer les secteurs - Migration base de données avec tables x_departements_contours et sectors_adresses - Interface Flutter pour visualisation et gestion des secteurs - Ajout thème sombre dans l'application - Corrections diverses et optimisations 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
215 lines
5.0 KiB
Markdown
Executable File
215 lines
5.0 KiB
Markdown
Executable File
# Notifications MQTT pour le Chat GEOSECTOR
|
|
|
|
## Vue d'ensemble
|
|
|
|
Ce système de notifications utilise MQTT pour fournir des notifications push en temps réel pour le module chat. Il offre une alternative légère à Firebase Cloud Messaging (FCM) et peut être auto-hébergé dans votre infrastructure.
|
|
|
|
## Architecture
|
|
|
|
### Composants principaux
|
|
|
|
1. **MqttNotificationService** (Flutter)
|
|
- Service de notification côté client
|
|
- Gère la connexion au broker MQTT
|
|
- Traite les messages entrants
|
|
- Affiche les notifications locales
|
|
|
|
2. **MqttConfig** (Flutter)
|
|
- Configuration centralisée pour MQTT
|
|
- Gestion des topics
|
|
- Paramètres de connexion
|
|
|
|
3. **MqttNotificationSender** (PHP)
|
|
- Service backend pour envoyer les notifications
|
|
- Interface avec la base de données
|
|
- Gestion des cibles d'audience
|
|
|
|
## Configuration du broker MQTT
|
|
|
|
### Container Incus
|
|
|
|
Le broker MQTT (Eclipse Mosquitto recommandé) doit être installé dans votre container Incus :
|
|
|
|
```bash
|
|
# Installer Mosquitto
|
|
apt-get update
|
|
apt-get install mosquitto mosquitto-clients
|
|
|
|
# Configurer Mosquitto
|
|
vi /etc/mosquitto/mosquitto.conf
|
|
```
|
|
|
|
Configuration recommandée :
|
|
```
|
|
listener 1883
|
|
allow_anonymous false
|
|
password_file /etc/mosquitto/passwd
|
|
|
|
# Pour SSL/TLS
|
|
listener 8883
|
|
cafile /etc/mosquitto/ca.crt
|
|
certfile /etc/mosquitto/server.crt
|
|
keyfile /etc/mosquitto/server.key
|
|
```
|
|
|
|
### Sécurité
|
|
|
|
Pour un environnement de production, il est fortement recommandé :
|
|
|
|
1. D'utiliser SSL/TLS (port 8883)
|
|
2. De configurer l'authentification par mot de passe
|
|
3. De limiter les IPs pouvant se connecter
|
|
4. De configurer des ACLs pour restreindre l'accès aux topics
|
|
|
|
## Structure des topics MQTT
|
|
|
|
### Topics utilisateur
|
|
- `chat/user/{userId}/messages` - Messages personnels pour l'utilisateur
|
|
- `chat/user/{userId}/groups/{groupId}` - Messages des groupes de l'utilisateur
|
|
|
|
### Topics globaux
|
|
- `chat/announcement` - Annonces générales
|
|
- `chat/broadcast` - Diffusions à grande échelle
|
|
|
|
### Topics conversation
|
|
- `chat/conversation/{conversationId}` - Messages spécifiques à une conversation
|
|
|
|
## Intégration Flutter
|
|
|
|
### Dépendances requises
|
|
|
|
Ajoutez ces dépendances à votre `pubspec.yaml` :
|
|
|
|
```yaml
|
|
dependencies:
|
|
mqtt5_client: ^4.0.0 # ou mqtt_client selon votre préférence
|
|
flutter_local_notifications: ^17.0.0
|
|
```
|
|
|
|
### Initialisation
|
|
|
|
```dart
|
|
// Dans main.dart
|
|
void main() async {
|
|
WidgetsFlutterBinding.ensureInitialized();
|
|
|
|
final notificationService = MqttNotificationService();
|
|
await notificationService.initialize(userId: currentUserId);
|
|
|
|
runApp(const GeoSectorApp());
|
|
}
|
|
```
|
|
|
|
### Utilisation
|
|
|
|
```dart
|
|
// Écouter les messages
|
|
notificationService.onMessageTap = (messageId) {
|
|
// Naviguer vers le message
|
|
Navigator.pushNamed(context, '/chat/$messageId');
|
|
};
|
|
|
|
// Publier un message
|
|
await notificationService.publishMessage(
|
|
'chat/user/$userId/messages',
|
|
{'content': 'Test message'},
|
|
);
|
|
```
|
|
|
|
## Gestion des notifications
|
|
|
|
### Paramètres utilisateur
|
|
|
|
Les utilisateurs peuvent configurer :
|
|
- Activation/désactivation des notifications
|
|
- Conversations en silencieux
|
|
- Mode "Ne pas déranger"
|
|
- Aperçu du contenu
|
|
|
|
### Persistance des notifications
|
|
|
|
Les notifications sont enregistrées dans la table `chat_notifications` pour :
|
|
- Traçabilité
|
|
- Statistiques
|
|
- Synchronisation
|
|
|
|
## Tests
|
|
|
|
### Test de connexion
|
|
|
|
```dart
|
|
final service = MqttNotificationService();
|
|
await service.initialize(userId: 'test_user');
|
|
// Vérifie les logs pour confirmer la connexion
|
|
```
|
|
|
|
### Test d'envoi
|
|
|
|
```php
|
|
$sender = new MqttNotificationSender($db, $mqttConfig);
|
|
$result = $sender->sendMessageNotification(
|
|
'receiver_id',
|
|
'sender_id',
|
|
'message_id',
|
|
'Test message',
|
|
'conversation_id'
|
|
);
|
|
```
|
|
|
|
## Surveillance et maintenance
|
|
|
|
### Logs
|
|
|
|
Les logs sont disponibles dans :
|
|
- Logs Flutter (console debug)
|
|
- Logs Mosquitto (`/var/log/mosquitto/mosquitto.log`)
|
|
- Logs PHP (selon configuration)
|
|
|
|
### Métriques à surveiller
|
|
|
|
- Nombre de connexions actives
|
|
- Latence des messages
|
|
- Taux d'échec des notifications
|
|
- Consommation mémoire/CPU du broker
|
|
|
|
## Comparaison avec Firebase
|
|
|
|
### Avantages MQTT
|
|
|
|
1. **Auto-hébergé** : Contrôle total de l'infrastructure
|
|
2. **Léger** : Moins de ressources que Firebase
|
|
3. **Coût** : Gratuit (uniquement coûts d'infrastructure)
|
|
4. **Personnalisable** : Configuration fine du broker
|
|
|
|
### Inconvénients
|
|
|
|
1. **Maintenance** : Nécessite une gestion du broker
|
|
2. **Évolutivité** : Requiert dimensionnement et clustering
|
|
3. **Fonctionnalités** : Moins de services intégrés que Firebase
|
|
|
|
## Évolutions futures
|
|
|
|
1. **WebSocket** : Ajout optionnel pour temps réel strict
|
|
2. **Clustering** : Pour haute disponibilité
|
|
3. **Analytics** : Dashboard de monitoring
|
|
4. **Webhooks** : Intégration avec d'autres services
|
|
|
|
## Dépannage
|
|
|
|
### Problèmes courants
|
|
|
|
1. **Connexion échouée**
|
|
- Vérifier username/password
|
|
- Vérifier port/hostname
|
|
- Vérifier firewall
|
|
|
|
2. **Messages non reçus**
|
|
- Vérifier abonnement aux topics
|
|
- Vérifier QoS
|
|
- Vérifier paramètres notifications
|
|
|
|
3. **Performance dégradée**
|
|
- Augmenter keepAlive
|
|
- Ajuster reconnectInterval
|
|
- Vérifier charge serveur
|