یکی از رایجترین شکایتهای کاربران اپلیکیشنهای ایرانی این است که در ساعات قطعی، کندی یا محدودیت اینترنت، پیامها و اعلانها (نوتیفیکیشنها) با تأخیر طولانی میرسند یا اصلاً دریافت نمیشوند. این مشکل صرفاً ناشی از کیفیت پایین اینترنت نیست؛ بلکه ریشه در معماری فنی سرویسهای پوش نوتیفیکیشن، وابستگی به زیرساختهای خارجی و سیاستهای مدیریت باتری سیستمعاملها دارد. در این مقاله بهصورت فنی و دقیق بررسی میکنیم چه عواملی باعث این اختلال میشوند و توسعهدهندگان چه راهکارهایی برای بهبود این وضعیت دارند.
۱. نوتیفیکیشن چگونه کار میکند؟
پیش از بررسی مشکل، باید بدانیم مسیر ارسال یک نوتیفیکیشن از سرور اپلیکیشن تا گوشی کاربر چگونه است. در حالت معمول، این فرآیند شامل سه بازیگر اصلی است:
- سرور اپلیکیشن: جایی که تصمیم میگیرد چه پیامی و به چه کسی ارسال شود.
- سرویس پوش نوتیفیکیشن سیستمعامل: در اندروید Firebase Cloud Messaging (FCM) و در iOS، سرویس Apple Push Notification (APNs).
- گوشی کاربر: که یک اتصال دائمی (Persistent Connection) با سرورهای گوگل یا اپل برقرار نگه میدارد تا پیامها را در لحظه دریافت کند.
نکته کلیدی اینجاست که تقریباً تمام اپهای اندرویدی، حتی اپهای کاملاً ایرانی، برای ارسال نوتیفیکیشن به FCM گوگل متکی هستند؛ زیرا این سرویس بخشی از Google Play Services است و جایگزین رسمی و پایداری در دسترس نیست.
۲. وابستگی به سرورهای FCM و APNs خارج از ایران
اینجا اولین و مهمترین ریشه مشکل نمایان میشود. سرورهای FCM در خارج از ایران (عمدتاً در زیرساخت ابری گوگل) قرار دارند. برای دریافت نوتیفیکیشن، گوشی کاربر باید یک اتصال پایدار TCP با این سرورها برقرار نگه دارد. وقتی:
- پهنای باند بینالملل محدود میشود،
- مسیریابی به دیتاسنترهای گوگل با تأخیر یا افت بسته (Packet Loss) مواجه میشود،
- یا در قطعیهای گسترده، دسترسی به IPهای خارجی بهطور کامل قطع میشود،
این اتصال دائمی قطع شده و تا زمان برقراری مجدد، هیچ نوتیفیکیشنی به دست کاربر نمیرسد. برخلاف تصور رایج، این موضوع تنها به فیلترینگ محدود نمیشود؛ حتی افت کیفیت مسیرهای بینالملل (که در ساعات پرترافیک شب رایج است) بهتنهایی کافی است تا این اتصال ناپایدار شود.
۳. تأثیر فیلترینگ و محدودیتهای شبکه ملی
در دورههایی که محدودیتهای گستردهتری روی اینترنت اعمال میشود، دسترسی به سرویسهای گوگل، اپل، آمازون AWS و سایر ارائهدهندگان ابری که FCM و APNs روی آنها میزبانی میشوند، میتواند بهطور خاص هدف قرار گیرد یا در اثر کاهش کلی پهنای باند بینالملل، عملاً غیرقابل استفاده شود. از آنجا که این سرویسها معمولاً از پروتکلهایی مانند XMPP و HTTP/2 روی پورتهای استاندارد استفاده میکنند، تشخیص و کندسازی آنها برای زیرساختهای فیلترینگ نسبتاً سادهتر از ترافیک رمزنگاریشده متفرقه است.
۴. مدیریت باتری اندروید و کشتن پردازشهای پسزمینه
مشکل دوم که ارتباط مستقیمی به قطعی اینترنت ندارد اما در کنار آن اثر تشدیدکننده دارد، سیاستهای مدیریت باتری گوشیهای اندرویدی است. برندهایی مانند شیائومی (MIUI)، هواوی (EMUI) و سامسونگ (One UI) بهطور پیشفرض اپهایی را که «پرمصرف» یا «غیرفعال» تشخیص میدهند از حافظه پسزمینه حذف میکنند. در نتیجه:
- حتی اگر اتصال اینترنت برقرار باشد، اپ ممکن است در پسزمینه بسته شده باشد و تا باز شدن مجدد، نوتیفیکیشن دریافت نکند.
- Doze Mode در اندروید، فعالیت شبکه اپها را در حالت استندبای طولانی محدود میکند.
- این دو عامل، وقتی با ناپایداری اینترنت ترکیب شوند، باعث میشوند تأخیر نوتیفیکیشن از چند ثانیه به چند دقیقه یا حتی ساعت برسد.
۵. ضعف معماری در سمت سرور اپهای ایرانی
بسیاری از استارتاپها و اپلیکیشنهای ایرانی، بهویژه در مراحل اولیه رشد، زیرساخت پوش نوتیفیکیشن خود را با حداقل امکانات پیادهسازی میکنند. مشکلات رایج در این حوزه عبارتاند از:
عدم پیادهسازی صف پیام (Message Queue) و تلاش مجدد
وقتی ارسال یک نوتیفیکیشن به FCM با خطا مواجه میشود (مثلاً به دلیل Timeout ناشی از قطعی)، بسیاری از سرورهای ایرانی بهسادگی آن پیام را نادیده میگیرند، بهجای اینکه آن را در صف قرار داده و بعداً دوباره ارسال کنند.
نبود مکانیزم Fallback
اپهای حرفهای بینالمللی معمولاً از چند لایه تحویل پیام (Push، سپس SMS یا ایمیل در صورت شکست Push) استفاده میکنند. اکثر اپهای ایرانی چنین Fallback ای ندارند، پس اگر لایه Push شکست بخورد، کاربر هیچ اطلاعیهای دریافت نمیکند.
عدم استفاده از Polling هوشمند در کنار Push
برخی اپهای پیشرفته، در کنار پوش نوتیفیکیشن، یک مکانیزم Polling سبک (بررسی دورهای سرور هنگام باز بودن اپ) دارند که در صورت شکست Push، پیامهای ازدسترفته را جبران میکند. غیاب این لایه در اپهای ایرانی باعث میشود کاربر پیامهای مهم را حتی پس از رفع قطعی هم دیرتر ببیند.
۶. استفاده کاربران از فیلترشکن و اثرات جانبی آن
استفاده گسترده کاربران ایرانی از VPN و فیلترشکن، هرچند برای دسترسی به بسیاری از خدمات ضروری است، اما میتواند تأثیر دوگانه روی نوتیفیکیشن داشته باشد:
| سناریو | اثر روی نوتیفیکیشن |
|---|---|
| VPN با کیفیت پایین یا قطع مکرر | اتصال دائمی FCM/APNs مدام Reset میشود و تحویل پیام مختل میشود |
| تغییر مکرر سرور VPN | Token دستگاه در FCM ممکن است نیاز به ثبت مجدد پیدا کند |
| مصرف بالای باتری توسط VPN | سیستمعامل زودتر اپ و VPN را در پسزمینه میبندد |
| محدودیت پهنای باند در تانل VPN | تأخیر در دریافت بستههای کوچک نوتیفیکیشن |
۷. راهکارهای فنی برای بهبود تحویل نوتیفیکیشن
توسعهدهندگان اپلیکیشنهای ایرانی برای کاهش این مشکلات میتوانند اقدامات زیر را در نظر بگیرند:
- پیادهسازی صف پیام با Retry هوشمند: استفاده از ابزارهایی مانند RabbitMQ یا Redis Queue برای تلاش مجدد ارسال پیامهای ناموفق طی بازههای زمانی مشخص.
- افزودن لایه Fallback: در صورت شکست Push پس از چند تلاش، ارسال از طریق SMS یا نمایش پیام هنگام باز شدن بعدی اپ.
- Sync هنگام باز شدن اپ: بارگذاری فوری پیامهای ازدسترفته از سرور به محض اتصال مجدد کاربر، بدون وابستگی صرف به Push.
- بهینهسازی برای مدیریت باتری: راهنمایی کاربر برای افزودن اپ به لیست استثناهای بهینهسازی باتری (Battery Optimization Whitelist).
- مانیتورینگ نرخ تحویل: اندازهگیری Delivery Rate واقعی نوتیفیکیشنها و هشدار خودکار هنگام افت شدید آن.
- استفاده از WebSocket بهعنوان لایه کمکی: برای اپهایی که کاربر معمولاً آنها را باز نگه میدارد (مانند اپهای چت)، نگهداشتن یک اتصال WebSocket موازی میتواند در برخی شرایط قطعی جزئی، پایدارتر از FCM عمل کند.
۸. جمعبندی
عملکرد ضعیف نوتیفیکیشن در اپهای ایرانی هنگام قطعی یا محدودیت اینترنت، حاصل ترکیبی از چند عامل است: وابستگی ساختاری به سرویسهای خارجی FCM و APNs که مسیر بینالملل را الزامی میکنند، سیاستهای سختگیرانه مدیریت باتری در گوشیهای اندرویدی رایج در بازار ایران، و ضعف معماری فنی در سمت سرور بسیاری از اپلیکیشنهای داخلی که فاقد مکانیزمهای Retry و Fallback هستند. بهبود واقعی این وضعیت نیازمند اقدام همزمان در دو جبهه است: از یک سو ارتقای پایداری زیرساخت شبکه، و از سوی دیگر طراحی مهندسیشدهتر سیستمهای پوش نوتیفیکیشن توسط تیمهای توسعه ایرانی.


