Esup-Multi permet la réception de messages d'informations diffusés sur des canaux mais également l'avertissement push (bip, pastille sur l'icône de l'app, bannière). Ce sont deux concepts distincts mais liés que l'on regroupe sous le terme "notification".
Esup-Multi ne fournit pas d'application/de backend qui permet d'envoyer une notification en revanche elle intègre les appels nécessaires à des API qui permettent de s'intégrer à un outil externe pour la gestion des messages.
Enfin Esup-Multi utilise firebase (Firebase Cloud Messaging https://firebase.google.com/docs/cloud-messaging?hl=fr) qui est un service externe google pour faire la notification push sur android et iOS (donc 1 seul service à utiliser).
Principe de fonctionnement
Récupération / suppression d'un token FCM
1- Lorsqu'un un utilisateur se connecte, Multi demande un token pour l’utilisateur et pour le périphérique (parce qu’un utilisateur peut avoir un smartphone + une tablette par exemple) à Firebase
2- Firebase renvoie donc un token que Multi retourne au connecteur pour enregistrement en base (c’est le /register)
3- Le /unregister est appelé à la déconnexion volontaire de l’utilisateur. On supprime alors le token (pour ne plus lui envoyer de push)
Envoi d'un message
Quand une application de notifications envoie un message
1- Elle envoie une requête sur l’API firebase pour tous les tokens de tous les utilisateurs destinataires (c’est ça qui fait le push sur les smartphones, tablettes etc)
2- Et elle stocke le message en base et pour chaque destinataire le caractère lu/non lu etc.
Réception d'un message
Enfin quand l’utilisateur reçoit la notification push, il ouvre l’application et récupère les messages via l'API de l'application de notification. Firebase n’intervient plus.
Création d'un compte FCM
Il faut donc ouvrir un compte sur Firebase, c’est gratuit et utiliser le service FCM (https://firebase.google.com/docs/cloud-messaging?hl=fr).
Il faut également paramétrer la connexion à FCM dans l’application cliente c’est expliqué ici (et il faudra aussi le faire du coté de l'application de notifications forcément)
Exemple d'implémentation
A l'Université de Lorraine, l'application qui permet d'envoyer des notifications (ULTIM) est une application NodeJS branchée sur une base MongoDb.
Schéma de la collection ‘enregistrement’ stockée en base
{
_id: ObjectId
ip: String
platform: String
token: String
uid: String
date: Double
}
_id : identifiant de l’objet
ip : ip depuis laquelle le périphérique demande l’enregistrement du token
platform (nullable) : plateforme depuis laquelle le périphérique demande l’enregistrement du token (Android, iOS, web, amazon-fireos)
token : token FCM à enregistrer
uid : login de l’utilisateur
date : date à laquelle l’enregistrement a lieu (en ms : new Date().getTime())
Schéma de la collection ‘notification’ stockée en base
{
_id: ObjectId
author: String
channel: String
title: String
message: String
state: String
uid: String
cd: Double
}
_id : identifiant de l’objet
author : auteur de la notification (Nom Prénom). Peut être ‘@system’ si la notification est envoyée automatiquement par une application tierce
channel : canal sur lequel est émise la notification
title : titre de la notification
message : contenu de la notification
state : état de la notification (UNREAD | READ | FAVORITE | ARCHIVED)
uid : login de l’utilisateur
cd : date de création de la notification (en ms : new Date().getTime())