اعلان‌های پوش در توسعه موبایل: ماهیت، انواع و نحوه کار

نویسنده: IT Sectr منتشر شده: 2026-03-15 زمان مطالعه: 9 دقیقه

اعلان‌های پوش یکی از مؤثرترین روش‌های تعامل با کاربر پس از نصب برنامه هستند. آن‌ها امکان اطلاع‌رسانی درباره پیام جدید، تخفیف، به‌روزرسانی محتوا یا یادآوری سبد خرید رها شده را فراهم می‌کنند. اعلان‌های پوش (push notifications) از طریق سرویس‌های ابری کار می‌کنند: Firebase Cloud Messaging (FCM) در Android و Apple Push Notification Service (APNS) در iOS. در این مقاله معماری اعلان‌ها، انواع آن‌ها و فرآیند تنظیم برای هر دو پلتفرم را بررسی خواهیم کرد. اطلاعات بیشتر در مستندات رسمی FCM.

نکات کلیدی

  • FCM — سرویس جهانی برای Android و iOS (از طریق پروکسی APNS)
  • APNS — سرویس بومی Apple برای iOS، macOS، watchOS
  • اعلان‌های غنی حاوی محتوای چندرسانه‌ای (تصاویر، دکمه‌ها، صدا) از طریق App Extensions هستند
  • Silent Push داده‌ها را در پس‌زمینه بدون نمایش به کاربر به‌روزرسانی می‌کند
  • Device Token — شناسه یکتای دستگاه؛ باید در سرور ذخیره و به‌روزرسانی شود
  • Notification Channels (Android) و Notification Categories (iOS) — گروه‌بندی و سفارشی‌سازی اعلان‌ها توسط کاربر

اعلان‌های پوش چیست؟

اعلان پوش پیامی است که سرور بدون درخواست برنامه به دستگاه موبایل ارسال می‌کند. پیام از یک سرویس ابری (FCM یا APNS) عبور می‌کند که آن را حتی اگر برنامه بسته باشد به دستگاه تحویل می‌دهد. اعلان‌ها به دو نوع تقسیم می‌شوند: اعلان‌های نمایشی (به کاربر نشان داده می‌شوند) و اعلان‌های داده (داده‌ها را برای پردازش پس‌زمینه منتقل می‌کنند).

معماری اعلان‌های پوش شامل سه مؤلفه است: (1) سرور برنامه — درخواست را به FCM/APNS ارسال می‌کند؛ (2) سرویس ابری — اعلان را مسیریابی می‌کند؛ (3) برنامه مشتری — اعلان را دریافت و پردازش می‌کند. سرور باید Device Token دستگاه را بداند تا اعلان را specifically به آن ارسال کند. برای ارسال انبوه از Topic Subscription استفاده می‌شود — اشتراک دستگاه‌ها در کانال‌های موضوعی (اخبار، تبلیغات، آب و هوا).

در هر دستگاه، اعلان‌ها توسط سیستم عامل پردازش می‌شوند: Android — از طریق NotificationManager و NotificationChannel، iOS — از طریق UNUserNotificationCenter. کاربر می‌تواند رفتار اعلان‌ها را برای هر کانال پیکربندی کند: اجازه صدا، بنر، نمایش در صفحه قفل یا غیرفعال کردن کامل. پیکربندی صحیح کانال‌ها تعامل را افزایش و نرخ لغو اشتراک را کاهش می‌دهد.

در IT Sectr، ما سیستم اعلان‌های پوش را از ابتدا با در نظر گرفتن ویژگی‌های خاص پلتفرم طراحی می‌کنیم. تصمیمات کلیدی: انتخاب بین FCM و APNS مستقیم، فرمت بار، دفعات ارسال و مکانیک اشتراک. این به جلوگیری از موقعیت‌هایی کمک می‌کند که اعلان‌ها نمی‌رسند یا توسط سیستم مسدود می‌شوند.

FCM در مقابل APNS

Firebase Cloud Messaging (FCM) سرویس چندپلتفرمی Google برای تحویل اعلان‌ها است. FCM از Android، iOS، Web و Flutter پشتیبانی می‌کند. در iOS، FCM از طریق APNS کار می‌کند: FCM درخواستی به APNS ارسال می‌کند که اعلان را به دستگاه تحویل می‌دهد. مزایای FCM: API واحد برای هر دو پلتفرم، تحلیل داخلی، تست A/B، موضوعات و بخش‌های مخاطب.

Apple Push Notification Service (APNS) سرویس بومی Apple است. فقط روی دستگاه‌های Apple (iOS، macOS، watchOS، tvOS) کار می‌کند. نیاز به مجوز مستقیم از طریق گواهی TLS یا توکن (JWT) دارد. APNS ارائه می‌دهد تأخیر تحویل حداقل و یکپارچگی مستقیم با ویژگی‌های iOS: PushKit، Notification Service Extension و هشدارهای بحرانی.

انتخاب بین FCM و APNS به معماری پروژه بستگی دارد. اگر برنامه فقط برای iOS است — APNS کنترل بیشتری می‌دهد. اگر چندپلتفرمی است — FCM با API واحد راحت‌تر است. بسیاری از پروژه‌ها از FCM به عنوان سرویس اصلی استفاده می‌کنند و به طور اضافی PushKit را برای VoIP در iOS تنظیم می‌کنند. رویکرد ترکیبی امکان دریافت بهترین‌های هر دو سیستم را فراهم می‌کند.

ویژگی FCM APNS
پلتفرم‌هاAndroid، iOS، Web، FlutteriOS، macOS، watchOS، tvOS
مجوزکلید سرور (Firebase Console)گواهی TLS یا توکن JWT
حداکثر بار4 KB (data)، 2 KB (notification)4 KB
موضوعاتداخلی (Topic Messaging)خیر (در سمت سرور پیاده‌سازی می‌شود)
Silent Pushپشتیبانی می‌شودپشتیبانی می‌شود (content-available)
PushKitخیربله (VoIP، فعالیت‌های زنده)
تحلیلFirebase Analyticsداخلی ندارد
تحویل به دستگاه خاموشمحدود (بستگی به تولیدکننده دارد)بله، از طریق PushKit

انواع اعلان (غنی، بی‌صدا، تعاملی)

اعلان غنی (Rich Notification)

اعلان غنی اعلانی است که نه تنها متن بلکه محتوای چندرسانه‌ای نیز دارد: تصاویر، ویدئو، صدا و دکمه‌های اقدام. در Android از طریق استایل‌های NotificationCompat پیاده‌سازی می‌شود: BigPictureStyle (تصویر بزرگ)، BigTextStyle (متن جمع‌شده/بازشده)، InboxStyle (لیست پیام‌ها)، MediaStyle (کنترل پخش). در iOS از Notification Content Extension استفاده می‌شود — یک target جداگانه با UI سفارشی برای اعلان گسترش‌یافته.

Silent Push (اعلان بی‌صدا)

Silent Push (content-available در iOS) اعلانی است که بدون نمایش به کاربر تحویل داده می‌شود. برای به‌روزرسانی داده در پس‌زمینه طراحی شده است: همگام‌سازی محتوا، پیش‌بارگذاری، به‌روزرسانی ویجت‌ها. در iOS، Silent Push نیاز به فعال‌سازی Background Modes → Remote notifications دارد. در Android برای مدیریت اعلان‌های پس‌زمینه از FirebaseMessagingService با onMessageReceived استفاده می‌شود. مهم: در iOS، Silent Push محدودیت‌های فرکانس دارد و اگر برنامه در پیش‌زمینه نباشد تحویل را تضمین نمی‌کند.

Interactive Notification (اعلان تعاملی)

اعلان تعاملی به کاربر امکان می‌دهد بدون باز کردن برنامه عملی انجام دهد. در Android این دکمه‌ها (Action) در اعلان هستند: "پاسخ"، "تأیید"، "رد". اقدامات از طریق PendingIntent پردازش می‌شوند که BroadcastReceiver یا Service را راه‌اندازی می‌کند. در iOS، Notification Action از طریق UNNotificationAction و UNNotificationCategory ثبت می‌شود. دکمه‌ها می‌توانند foreground (برنامه را باز می‌کند)، background (در پس‌زمینه اجرا می‌شود) یا destructive (عمل غیرقابل بازگشت — حذف، مسدود کردن) باشند.

Notification Content Extension و Service Extension

Notification Content Extension (iOS) — یک کنترل‌کننده دید سفارشی برای نمایش محتوای گسترش‌یافته اعلان هنگام فشار طولانی یا 3D Touch. Notification Service Extension (iOS) — میان‌افزاری برای تغییر محتوای اعلان قبل از نمایش: رمزگشایی پیام‌های E2E، بارگذاری تصاویر، مبهم‌سازی داده‌های محرمانه. در Android مشابه مستقیمی وجود ندارد — همه تغییرات در FirebaseMessagingService انجام می‌شود.

تنظیم اعلان‌ها در Android و iOS

تنظیم در Android

برای Android لازم است: (1) Firebase SDK به پروژه اضافه شود (google-services.json)؛ (2) برای هر دسته اعلان NotificationChannel (Android 8+) ایجاد شود؛ (3) FirebaseMessagingService برای دریافت توکن و پیام‌های ورودی پیاده‌سازی شود. Notification Channel اجباری است — بدون آن اعلان‌ها در Android 8+ نمایش داده نخواهند شد. کانال‌ها اولویت دارند (IMPORTANCE_HIGH — صدا + پنجره بازشو، IMPORTANCE_LOW — بدون صدا) و کاربر می‌تواند آن‌ها را در تنظیمات سیستم پیکربندی کند.

تنظیم در iOS

برای iOS لازم است: (1) قابلیت Push Notifications در Xcode فعال شود؛ (2) کلید APNS در Apple Developer Portal پیکربندی شود؛ (3) مجوز از طریق UNUserNotificationCenter.requestAuthorization درخواست شود — این یک دیالوگ سیستمی است که یک بار نمایش داده می‌شود. پاسخ کاربر بحرانی است: اگر مجوز داده نشود، اعلان‌ها تحویل داده نخواهند شد. توصیه می‌شود قبل از نمایش دیالوگ سیستم به کاربر توضیح داده شود که چرا اعلان‌ها لازم هستند (pre-permission prompt).

ابزارها و توکن

Device Token (iOS) و Registration Token (Android) شناسه‌های یکتای دستگاه برای اعلان‌های پوش هستند. توکن در اولین راه‌اندازی برنامه تولید می‌شود و ممکن است تغییر کند: هنگام نصب مجدد، پاک کردن داده‌ها، بازنشانی تنظیمات حریم خصوصی. سرور باید مرتباً توکن‌ها را به‌روزرسانی کند. Firebase ارائه می‌دهد API مناسب برای مدیریت توکن از طریق onNewToken، همچنین پنلی برای ارسال اعلان آزمایشی (Firebase Console → Cloud Messaging).

Topic Subscription یکی از مؤثرترین مکانیسم‌های FCM است. دستگاه در یک موضوع (مثلاً "news"، "promo_users_ios") مشترک می‌شود و سرور بدون نیاز به ذخیره لیست توکن‌ها، اعلان‌ها را بر اساس موضوع ارسال می‌کند. Firebase Topics تا یک میلیون مشترک در هر موضوع و ارسال شرطی (Condition) از طریق زبان عبارت را پشتیبانی می‌کند: "'news' in topics && ('US' in topics || 'UK' in topics)".

Notification Payload ساختار JSON است که از طریق FCM/APNS ارسال می‌شود. برای FCM: جداگانه notification (بخش قابل مشاهده — عنوان، بدنه، تصویر) و data (فیلدهای سفارشی برای برنامه). برای APNS: دیکشنری aps با alert، badge، sound، category و content-available. ساختار صحیح بار بحرانی است: اگر notification + data همزمان برسند، برنامه در پس‌زمینه ممکن است data را دریافت نکند. توصیه می‌شود فقط از پیام‌های data برای Android استفاده کنید و فیلدهای بصری را جداگانه از طریق FCM Console ارسال کنید.

سوالات متداول

تفاوت بین FCM و APNS چیست؟

FCM (Firebase Cloud Messaging) سرویس Google برای Android و اعلان‌های چندپلتفرمی است. APNS (Apple Push Notification Service) سرویس Apple فقط برای iOS/macOS است. FCM می‌تواند اعلان‌ها را تحویل دهد از طریق APNS در iOS، به عنوان سرور پروکسی عمل می‌کند.

Rich Notification چیست؟

Rich Notification اعلانی پیشرفته با محتوای چندرسانه‌ای است: تصاویر، ویدئو، صدا، دکمه‌های اقدام. در iOS از طریق Notification Content Extension پیاده‌سازی می‌شود؛ در Android از طریق BigPictureStyle و InboxStyle.

Device Token چگونه کار می‌کند؟

Device Token شناسه یکتای دستگاه برای ارسال اعلان‌های پوش است. در Android توکن ثبت‌نام از FCM است؛ در iOS Device Token از APNS است. توکن ممکن است تغییر کند هنگام نصب مجدد برنامه یا بازنشانی تنظیمات، بنابراین باید در سرور به‌روزرسانی شود.

Silent Push چیست و چرا به آن نیاز است؟

Silent Push (اعلان بی‌صدا) اعلانی بدون نمایش به کاربر است. برای به‌روزرسانی داده در پس‌زمینه استفاده می‌شود: همگام‌سازی محتوا، به‌روزرسانی ویجت‌ها، پیش‌واکشی. در iOS نیاز به فعال‌سازی Background Modes → Remote notifications دارد.

PushKit چه تفاوتی با اعلان‌های پوش معمولی دارد؟

PushKit چارچوب Apple برای تحویل اعلان‌های با اولویت بالا است که در برنامه‌های VoIP (تماس‌ها، پیام‌رسان‌ها) استفاده می‌شود. PushKit اعلان را تحویل می‌دهد حتی اگر برنامه بسته شده باشد و راه‌اندازی برنامه برای پردازش را تضمین می‌کند.

خلاصه

  • FCM — سرویس چندپلتفرمی Google؛ APNS — سرویس بومی Apple
  • Rich Notification شامل رسانه و دکمه‌ها؛ Silent Push داده را بدون نمایش به کاربر به‌روزرسانی می‌کند
  • Notification Channel (Android) و Notification Category (iOS) — برای گروه‌بندی اعلان‌ها اجباری
  • Device Token — شناسه یکتا؛ باید مرتباً در سرور به‌روزرسانی شود
  • Topic Subscription ارسال انبوه را بدون ذخیره لیست توکن‌ها ساده می‌کند
  • PushKit — برای اعلان‌های بحرانی (VoIP، هشدارهای حیاتی)
  • Notification Payload باید بر اساس پلتفرم ساختاریافته باشد: notification + data برای FCM، aps برای APNS

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه