Files
geo/app/lib/chat/services/notifications/README_MQTT.md
pierre 599b9fcda0 feat: Gestion des secteurs et migration v3.0.4+304
- 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>
2025-08-07 11:01:45 +02:00

5.0 KiB
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 :

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

dependencies:
  mqtt5_client: ^4.0.0  # ou mqtt_client selon votre préférence
  flutter_local_notifications: ^17.0.0

Initialisation

// Dans main.dart
void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  final notificationService = MqttNotificationService();
  await notificationService.initialize(userId: currentUserId);
  
  runApp(const GeoSectorApp());
}

Utilisation

// É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

final service = MqttNotificationService();
await service.initialize(userId: 'test_user');
// Vérifie les logs pour confirmer la connexion

Test d'envoi

$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