MicrocosmWorksInovasi dan Seni Bina Kosmos Digital
TentangHubungi
MicrocosmWorksMemperbaharui dan Merangka Kosmos Digital

Menyampaikan penyelesaian IT yang penting. Kami bersemangat tentang teknologi, keselamatan, dan membantu perniagaan berkembang melalui infrastruktur IT yang boleh dipercayai dan inovatif.

[email protected]
+91 7011868196
New Delhi, India

Pusat Pertumbuhan AI

AI HubInovasi PermulaanPemecut Perusahaan

Penyelesaian

Semua PenyelesaianAplikasi Kesihatan & KecergasanPlatform Video AIPembangunan Ejen AI

Sumber

WawasanPanduan IndustriPelan Tindakan Kes PenggunaanCorak Seni BinaKajian Kes

Syarikat

Tentang KamiHubungiKerja Kami

Perkhidmatan

Perundingan DigitalInfrastruktur AwanPembangunan SaaSPembangunan AITeknologi Video
Pembangunan ERPPenyesuaian ZohoPembangunan OdooIntegrasi SalesforcePembangunan CRM Tersuai
Integrasi QuickBooksPenyelesaian IoTPembangunan Blockchain
Perundingan Keselamatan SiberSokongan IT - L3

© 2026 MicrocosmWorks. Hak cipta terpelihara.

Dasar PrivasiTerma Perkhidmatan
Kembali ke Wawasan
AI Development

Membangunkan Sistem Pemberitahuan Tolak yang Cakna Zon Waktu dan Andal

Mereka bentuk sistem pemberitahuan tolak yang menghantar pada waktu tempatan yang betul untuk setiap pengguna, secara andal.

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

Membina Sistem Pemberitahuan Tolak yang Cakna Zon Waktu dan Andal

Sebuah aplikasi kesihatan & kesejahteraan perlu menghantar peringatan harian yang diperibadikan — peringatan waktu makan, pemeriksaan suasana hati, peringatan hidrasi, isyarat tidur, dan peringatan tersuai — kepada ribuan pengguna di seluruh dunia. Kekangannya: setiap pemberitahuan perlu tiba pada waktu tempatan yang betul, tepat sekali, dan tidak pernah kepada peranti yang tidak aktif. Kami mereka bentuk dan membina saluran paip teragih yang merealisasikan perkara itu.

 

Cabaran

  • Ketepatan zon waktu pada skala besar. "Peringatan sarapan jam 9 pagi" bermaksud sesuatu yang berbeza bagi setiap pengguna. Menghantar mengikut waktu pelayan akan menghantar notifikasi kepada seseorang di Sydney pada jam 3 pagi. Setiap pemberitahuan perlu diselesaikan mengikut waktu tempatan pengguna.
  • Tiada spam, tiada penduaan. Penjadualan cron tidak dapat dielakkan akan bertindih dan berjalan semula. Tanpa jaminan yang ketat, seorang pengguna boleh menerima peringatan "masa makan tengah hari 🥗" yang sama dua atau tiga kali — jalan pantas ke nyahpasang.
  • Peranti tidak boleh dipercayai. Pengguna menyahpasang aplikasi, membatalkan kebenaran, dan menukar token push secara berterusan. Menghantar pemberitahuan secara buta kepada token yang usang membazirkan sumber dan merosakkan metrik penghantaran.
  • Masa yang tepat tanpa penjadual 'brute-force'. Menghantar ratusan pemberitahuan pada minit yang tepat — tanpa cron membebankan pangkalan data setiap 60 saat — memerlukan mekanisme yang lebih pintar daripada tinjauan naif.

 

Penyelesaian Kami

Kami membina saluran paip tiga peringkat yang mengasingkan dengan jelas apa yang perlu dihantar, bila perlu dihantar, dan benar-benar menghantarnya — supaya setiap peringkat boleh gagal dan pulih secara bebas. Pangkalan data adalah sumber kebenaran, baris gilir mesej mengendalikan masa yang tepat, dan lapisan pekerja tunggal berkomunikasi dengan penyedia push.

image.webp

 

Seni Bina

  • Expo-notifications ialah klien React Native dengan saluran asli, bunyi unik, dan deep links yang menggunakan format token tunggal dan API penghantaran untuk kedua-dua iOS dan Android.
  • Backend NestJS dengan expo-server-sdk sebagai abstraksi push terpadu mengatasi FCM dan APNs.
  • MongoDB sebagai sumber kebenaran — koleksi NotificationMessage, NotificationToken, dan NotificationCounter.
  • Baris gilir tunda ActiveMQ (STOMP), satu untuk setiap kategori (makanan, suasana hati, aktiviti, keselamatan, peringatan), untuk penghantaran terjadual yang tepat.
  • cron Pencipta yang menjana rekod pemberitahuan yang diselesaikan mengikut zon waktu bagi setiap pengguna.
  • Pekerja Pengguna yang melanggan setiap baris gilir dan melakukan pengesahan akhir sebelum menghantar.
  • AWS ECS Fargate menjalankan cron dan pengguna; ActiveMQ pada instans EC2 khusus.

 

Ciri-ciri Utama

  1. Penjadualan cakna zon waktu. Menggunakan date-fns-tz, waktu penghantaran tempatan setiap pengguna dikira, ditukar kembali ke UTC untuk penyimpanan, dan dibatasi oleh tetingkap tarikh UTC untuk menjamin satu peringatan setiap hari.
  2. Idempotensi dikuatkuasakan pangkalan data. Indeks unik separa pada mesej yang menunggu menjadikan penciptaan pendua mustahil — walaupun cron berjalan dua kali:
// Unique only while the message is still PENDING and not deleted

schema.index(

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

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

);

 

3. Penghantaran tepat melalui baris gilir tunda. Daripada cron setiap minit, penjadual menempatkan mesej dalam baris gilir sekarang tetapi menangguhkan penghantaran ke minit tepat yang sepatutnya menggunakan pengepala `scheduled-delay` ActiveMQ:
 

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

  persistent: 'true',

  'AMQ_SCHEDULED_DELAY': String(delayMs), // delivered exactly when due

}, JSON.stringify(message));

 

4. Satu token aktif tunggal setiap peranti. Indeks unik separa menjamin tepat satu token aktif setiap peranti; log masuk baharu akan menamatkan token lama dengan bersih, dengan percubaan semula `exponential-backoff` untuk bertahan daripada log masuk serentak.

5. Semakan resit + pembersihan automatik. Selepas menghantar, kami meninjau resit Expo. Respons DeviceNotRegistered serta-merta menyahaktifkan token yang tidak aktif supaya kami tidak lagi membazir penghantaran padanya.

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

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

  await this.deactivateToken(token); // stop sending to dead devices

}

 

6. Had kegagalan. Setiap peranti mempunyai kaunter percubaan semula; selepas 3 kegagalan berturut-turut, token secara automatik ditamatkan — tiada gelung tak terhingga, tiada token zombie.

7. Menghormati niat pengguna pada waktu penghantaran. Keutamaan pemberitahuan disemak semula oleh pengguna pada waktu penghantaran, bukan hanya pada penjadualan — jadi pengguna yang memilih keluar sejam sebelum peringatan tidak akan pernah menerimanya. Mesej diselesaikan kepada status akhir yang jujur: success, failed, atau is_missed.

 

Hasil

  • Setiap pengguna menerima peringatan pada waktu tempatan yang betul, di seluruh dunia — sifar pemberitahuan luar waktu.
  • Pemberitahuan pendua dihapuskan sepenuhnya melalui idempotensi peringkat pangkalan data.
  • Token peranti yang tidak aktif dan usang dikesan dan ditamatkan secara automatik, menjaga penghantaran sentiasa bersih.
  • Kebolehpercayaan ditingkatkan dan beban pangkalan data dikurangkan dengan penghantaran yang tepat, minit-akurat tanpa penjadual 'brute-force'.

 

Timbunan Teknologi

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

Push NotificationsTimezonesSchedulingReliability
Mayank Joshi.webp

Tentang Penulis

Mayank Chandra Joshi

AI & Cloud Solutions Expert at MicrocosmWorks

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

Ingin mengetahui lebih lanjut?

Hubungi kami untuk membincangkan bagaimana kami boleh membantu melaksanakan penyelesaian ini untuk perniagaan anda.

Hubungi Kami

Soalan Lazim

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!