← Retour au blog
Architecture Tableau de bord affichant le nombre de notifications push délivrées sur un mois : 77,52 k, illustré par un histogramme quotidien.

Les notifications push : un système distribué à part entière

Du template au device : comment fonctionnent réellement les notifications push mobiles, leurs enjeux produit et techniques, vus comme un système distribué.

📅 ✍️ Antoine Coulon
push-notificationsdistributed-systemsmobilefirebasesystem-design

Près de 80 000 notifications push envoyées en un mois, à plus de 30 000 utilisateurs uniques, depuis une application développée par notre équipe chez mon client actuel. Le chiffre impressionne, mais il cache surtout une réalité que j’ai longtemps sous-estimée : derrière chaque notification qui s’affiche sur un écran de téléphone se cache une chaîne technique étonnamment longue, qui traverse plusieurs systèmes que vous ne contrôlez pas tous.

Pendant longtemps, j’ignorais complètement la manière dont fonctionnaient réellement les notifications push sur les applications mobiles. Cette fonctionnalité, introduite dès 2009 par Apple avec l’Apple Push Notification Service, est aujourd’hui au cœur des stratégies d’engagement produit. Sur le papier, l’idée paraît triviale : afficher un petit message sur le téléphone d’un utilisateur. En réalité, envoyer une notification push soulève de vraies problématiques, à la fois produit et techniques. Et quand on prend le temps de tracer le chemin complet, on découvre un système distribué à part entière.

Un levier produit à manier avec parcimonie

Avant même de parler de technique, la notification push est d’abord une décision produit. C’est un canal direct, intrusif par nature : il interrompt l’utilisateur dans ce qu’il est en train de faire. Cette puissance est précisément ce qui en fait une arme à double tranchant.

Bien dosées, les notifications sont un levier d’engagement redoutable : elles ramènent l’utilisateur au bon moment, sur la bonne action, avec un message contextuel. Mal utilisées, elles deviennent le meilleur moyen de pousser quelqu’un à désinstaller l’application, ou, à peine moins définitif, à couper toutes les notifications dans les réglages de son système. Chaque notification envoyée doit donc servir une action à forte valeur ajoutée. La règle implicite est simple : si vous hésitez à envoyer une notification, c’est probablement qu’il ne faut pas l’envoyer.

Une fois cette discipline produit posée, reste à comprendre comment la notification voyage réellement, du serveur jusqu’à l’écran.

La préparation du contenu

Une notification ne naît pas comme un message figé. Elle est issue de la définition d’un template dynamique, exactement comme un e-mail transactionnel ou une page web rendue côté serveur. Ce template porte plusieurs préoccupations qu’il faut traiter en amont de l’envoi.

D’abord, le titre et le message contiennent des placeholders, remplacés lors d’une phase de rendering par des informations propres à l’utilisateur : son prénom, le montant d’une commande, le nom d’un contact. Le template est donc un patron, pas un contenu final.

Ensuite vient la question de la traduction : le contenu doit pouvoir être rendu dans la langue de l’utilisateur. Cela suppose de gérer un jeu de traductions par template et de résoudre la bonne locale au moment du rendering, comme pour n’importe quelle interface internationalisée.

Enfin, la notification embarque un lien de redirection contextuel : ce qui se passe au clic. Une notification qui ne mène nulle part, ou qui renvoie systématiquement vers l’écran d’accueil, gâche son potentiel. Le deep link doit amener l’utilisateur directement sur l’écran concerné par le message.

L’envoi vers Android et iOS

Une fois la notification préparée et rendue, encore faut-il qu’elle parvienne au bon device. C’est ici qu’on quitte les terres que l’on maîtrise pour s’appuyer sur des infrastructures tierces.

On ne s’adresse pas directement au téléphone de l’utilisateur. On passe par une plateforme de messaging qui s’interface avec les serveurs de notifications push propres à chaque constructeur : l’Apple Push Notification Service (APNs) côté iOS, et Firebase Cloud Messaging (FCM) côté Google pour Android. Firebase est souvent utilisé comme point d’entrée unique, capable de router vers les deux mondes.

Mais cet envoi n’est possible que si une étape préalable a eu lieu, côté application mobile. Lors de son installation et de son premier lancement, l’application doit générer et enregistrer une association unique entre le device sur lequel elle tourne et le serveur de messaging. Concrètement, le device obtient un token auprès du service push, et ce token est remonté puis stocké côté backend. Sans ce token, le serveur ne sait tout simplement pas à qui envoyer le message.

Ce détail a des conséquences importantes : un token peut expirer, être invalidé après une réinstallation, ou changer. Gérer le cycle de vie de ces tokens (les rafraîchir, nettoyer ceux qui ne sont plus valides) fait partie intégrante d’un système de notifications robuste.

La réception sur le device

La notification a parcouru tout le chemin, traversé la plateforme de messaging et les serveurs du constructeur. Elle fait face à un dernier rempart : le système d’exploitation du device.

À ce niveau, c’est tout ou rien. Si l’utilisateur a refusé les notifications pour l’application, rien ne passe : l’OS bloque, sans appel. C’est une autorisation binaire, accordée ou refusée, et l’application n’a aucun moyen de la contourner.

Une fois l’autorisation donnée, la responsabilité revient à l’application : c’est à elle d’exposer un centre de notifications permettant à l’utilisateur de personnaliser son expérience : choisir les catégories qu’il souhaite recevoir, couper les rappels marketing tout en gardant les alertes critiques, etc. Cette granularité, l’OS ne la fournit pas : elle est du ressort du produit, et conditionne souvent le fait que l’utilisateur garde les notifications activées plutôt que de tout couper d’un bloc.

Au final : un système distribué

Quand on remet bout à bout toutes ces étapes, le constat s’impose : gérer des notifications push, c’est gérer un système distribué à part entière, composé de plusieurs services aux responsabilités distinctes, dont certains échappent à votre contrôle.

Chaque maillon peut faillir indépendamment : un template mal rendu, un token expiré, un quota dépassé côté broker, une autorisation refusée côté OS. Penser les notifications comme un système distribué, c’est accepter que la livraison n’est jamais garantie de bout en bout, et concevoir en conséquence : retries côté broker, suivi des taux de délivrabilité, nettoyage des tokens morts.

Conclusion

Ce qui semblait n’être qu’un petit message sur un écran s’avère être l’aboutissement d’une chaîne traversant un CMS, un backend, un broker de messaging, les serveurs d’Apple ou de Google, l’OS du téléphone, puis l’application native. Chaque étape porte ses propres enjeux, produit comme techniques, et chaque frontière entre systèmes est un point de défaillance potentiel.

La prochaine fois qu’une notification s’affichera sur votre téléphone, vous saurez le chemin qu’elle a parcouru pour y arriver.