MicrocosmWorksInnover et Architecturer le Cosmos Numérique
Ă€ proposContact
MicrocosmWorksInnover et architecturer des cosmos numériques

Fournir des solutions informatiques qui comptent. Nous sommes passionnés par la technologie, la sécurité et aidons les entreprises à croître grâce à une infrastructure informatique fiable et innovante.

[email protected]
+91 7011868196
New Delhi, India

Hub de Croissance IA

Hub IAInnovation pour les startupsAccélérateur d'entreprise

Solutions

Toutes les solutionsApplications de bien-être et de fitnessPlateforme vidéo IADéveloppement d'agents IA

Ressources

PerspectivesGuides de l'industriePlans d'utilisationModèles d'architectureÉtudes de cas

Entreprise

Ă€ propos de nousContactNotre travail

Services

Consultation numériqueInfrastructure cloudDéveloppement SaaSDéveloppement IATechnologie vidéo
Développement ERPPersonnalisation ZohoDéveloppement OdooIntégration SalesforceDéveloppement CRM personnalisé
Intégration QuickBooksSolutions IoTDéveloppement Blockchain
Consultation en cybersécuritéSupport IT - L3

© 2026 MicrocosmWorks. Tous droits réservés.

Politique de confidentialitéConditions d'utilisation
Retour aux Perspectives
AI Development

Concevoir des systèmes de notification push fiables et sensibles aux fuseaux horaires

Concevoir un système de notification push qui se déclenche à la bonne heure locale pour chaque utilisateur, de manière fiable.

Mayank Joshi.webpMayank Chandra Joshi
•
July 31, 2026
•
Mis Ă  jour August 19, 2026
•
5 min read
Untitled design (16).webp
5 min read

Construire un système de notification push fiable et sensible aux fuseaux horaires

Une application de santé et bien-être devait envoyer des rappels quotidiens personnalisés — rappels de repas, suivis d'humeur, invites à s'hydrater, indices de sommeil et rappels personnalisés — à des milliers d'utilisateurs à travers le monde. Le défi : chaque notification devait arriver à la bonne heure locale, exactement une fois, et jamais sur un appareil inactif. Nous avons conçu et construit le pipeline distribué qui permet cela.

 

Le Défi

  • Exactitude du fuseau horaire Ă  l'Ă©chelle. Un "rappel de petit-dĂ©jeuner Ă  9h" signifie quelque chose de diffĂ©rent pour chaque utilisateur. L'envoi Ă  l'heure du serveur aurait notifiĂ© quelqu'un Ă  Sydney Ă  3h du matin. Chaque notification devait ĂŞtre rĂ©solue au moment local de l'utilisateur.
  • Pas de spam, pas de doublons. Les planifications de crons se chevauchent et se rĂ©exĂ©cutent inĂ©vitablement. Sans garanties strictes, un seul utilisateur pourrait recevoir le mĂŞme rappel "l'heure du dĂ©jeuner 🥗" deux ou trois fois — un chemin rapide vers une dĂ©sinstallation.
  • Les appareils ne sont pas fiables. Les utilisateurs dĂ©sinstallent des applications, rĂ©voquent des permissions et changent leurs push tokens constamment. Envoyer des notifications aveuglĂ©ment Ă  des tokens obsolètes gaspille des ressources et corrompt les mĂ©triques de livraison.
  • Synchronisation prĂ©cise sans ordonnanceur par force brute. DĂ©livrer des centaines de notifications Ă  des minutes exactes — sans qu'un cron ne martèle la base de donnĂ©es toutes les 60 secondes — a nĂ©cessitĂ© un mĂ©canisme plus intelligent que le polling naĂŻf.

 

Notre Solution

Nous avons construit un pipeline en trois étapes qui sépare clairement ce qu'il faut envoyer, quand l'envoyer et l'envoyer réellement — afin que chaque étape puisse échouer et se rétablir indépendamment. La base de données est la source de vérité, une file de messages gère la synchronisation précise, et une couche de workers unique communique avec le push provider.

image.webp

 

Architecture

  • Expo-notifications est un client React Native avec des canaux natifs, des sons uniques et des liens profonds qui utilise un format de token unique et une API de livraison pour iOS et Android.
  • Backend NestJS avec expo-server-sdk comme abstraction de push unifiĂ©e sur FCM et APNs.
  • MongoDB comme source de vĂ©ritĂ© — les collections NotificationMessage, NotificationToken, et NotificationCounter.
  • Files d'attente Ă  dĂ©lai ActiveMQ (STOMP), une par catĂ©gorie (repas, humeur, activitĂ©, sĂ©curitĂ©, rappels), pour une livraison planifiĂ©e prĂ©cise.
  • Crons crĂ©ateurs qui gĂ©nèrent des enregistrements de notification rĂ©solus par fuseau horaire par utilisateur.
  • Workers consommateurs qui s'abonnent Ă  chaque file d'attente et effectuent la validation finale avant l'envoi.
  • AWS ECS Fargate exĂ©cutant les crons et les consommateurs ; ActiveMQ sur une instance EC2 dĂ©diĂ©e.

 

Fonctionnalités Clés

  1. Planification sensible aux fuseaux horaires. En utilisant date-fns-tz, l'heure d'envoi locale de chaque utilisateur est calculée, reconvertie en UTC pour le stockage, et délimitée par des fenêtres de dates UTC pour garantir un rappel par jour.
  2. Idempotence appliquée par la base de données. Un index unique partiel sur les messages en attente rend la création de doublons impossible — même si un cron s'exécute deux fois:
// Unique uniquement tant que le message est PENDING et non supprimé

schema.index(

  { userId: 1, notificationTokenId: 1, category: 1, label: 1, scheduledAt: 1 },

  { unique: true, partialFilterExpression: { status: 'pending', isDeleted: false } }

);

 

3. Livraison précise via les files d'attente à délai. Au lieu d'un cron à la minute, l'ordonnanceur met les messages en file d'attente maintenant mais diffère la livraison à la minute exacte due en utilisant l'en-tête scheduled-delay d'ActiveMQ :
 

client.send(`/queue/${queueName}`, {

  persistent: 'true',

  'AMQ_SCHEDULED_DELAY': String(delayMs), // livrĂ© exactement Ă  l'heure prĂ©vue

}, JSON.stringify(message));

 

4. Un seul token actif par appareil. Un index unique partiel garantit exactement un token actif par appareil ; les nouvelles connexions retirent proprement l'ancien token, avec des tentatives de réessai à recul exponentiel pour survivre aux connexions concurrentes.

5. Vérification des reçus + nettoyage automatique. Après l'envoi, nous interrogeons les reçus Expo. Une réponse DeviceNotRegistered désactive immédiatement le token inactif afin que nous ne gaspillions plus jamais un envoi dessus.

f (receipt.status === 'error' &&

    receipt.details?.error === 'DeviceNotRegistered') {

  await this.deactivateToken(token); // arrĂŞter l'envoi aux appareils inactifs

}

 

6. Plafond d'échecs. Chaque appareil dispose d'un compteur de tentatives ; après 3 échecs consécutifs, le token est automatiquement retiré — pas de boucles infinies, pas de tokens zombies.

7. Respect de l'intention de l'utilisateur au moment de l'envoi. La préférence de notification est revérifiée par le consommateur à la livraison, et pas seulement à la planification — ainsi, un utilisateur qui se désabonne une heure avant un rappel ne le reçoit jamais. Les messages se résolvent en des états terminaux honnêtes : success, failed, ou is_missed.

 

Résultats

  • Chaque utilisateur reçoit des rappels Ă  l'heure locale correcte, partout dans le monde — zĂ©ro notification en dehors des heures.
  • Notifications en doublon entièrement Ă©liminĂ©es grâce Ă  l'idempotence au niveau de la base de donnĂ©es.
  • Les tokens d'appareil inactifs et obsolètes sont dĂ©tectĂ©s et retirĂ©s automatiquement, maintenant une livraison propre.
  • La fiabilitĂ© est augmentĂ©e et la charge de la base de donnĂ©es est rĂ©duite avec une livraison prĂ©cise, Ă  la minute près, sans ordonnanceur par force brute.

 

Pile Technologique

React Native · Expo Notifications · NestJS · TypeScript · MongoDB · ActiveMQ (STOMP) · expo-server-sdk · date-fns-tz · AWS ECS Fargate

Notifications PushFuseaux HorairesPlanificationFiabilité
Mayank Joshi.webp

Ă€ propos de l'auteur

Mayank Chandra Joshi

AI & Cloud Solutions Expert at MicrocosmWorks

Building innovative AI-powered solutions and helping businesses transform through cutting-edge technology.

Vous souhaitez en savoir plus ?

Contactez-nous pour discuter de la façon dont nous pouvons vous aider à mettre en œuvre ces solutions pour votre entreprise.

Contactez-nous

Questions Fréquemment Posées

A timezone-aware notification system converts each user's local schedule into UTC before delivery, ensuring reminders arrive at the correct local time regardless of the user's location or daylight saving changes.

Database-level idempotency using unique indexes ensures each scheduled notification is created only once, even if scheduling jobs are retried or executed multiple times.

Delayed message queues deliver notifications at the exact scheduled time without constantly polling the database, improving delivery accuracy while reducing infrastructure load.

A reliable push notification system validates delivery receipts and automatically deactivates expired or unregistered device tokens, preventing failed notifications and improving delivery success rates.

A scalable push notification system combines timezone-aware scheduling, delayed message queues, idempotent database design, token lifecycle management, and delivery validation to ensure accurate and reliable notification delivery.

Comments (0)

Share your thoughts and join the conversation

Leave a Comment

Your email will not be published

No comments yet

Be the first to share your thoughts!