اعلانهای Push پیامهایی هستند که توسط سرور حتی زمانی که برنامه بسته است به دستگاه موبایل ارسال میشوند. طبق دادههای Google Firebase, 2024، اعلانهای Push از طریق سرویسهای تخصصی — FCM در Android و APNS در iOS پردازش میشوند که تحویل همزمان به میلیونها دستگاه را پشتیبانی میکنند. آنها به بخش جداییناپذیر تجربه کاربری در برنامههای مدرن موبایل تبدیل شدهاند.
نکات اصلی
اعلانهای Push پیامهای کوتاهی هستند که سرور برنامه بدون درخواست صریح کاربر به دستگاه او ارسال میکند. آنها به صورت بنر، نشان روی آیکون یا سیگنالهای صوتی نمایش داده میشوند و توجه کاربر را به برنامه جلب کرده و درباره رویدادهای مهم اطلاع میدهند.
اعلان Push از عنوان، بدنه پیام و دادههای اختیاری (payload) تشکیل شده است. برخلاف SMS، اعلانهای Push برای کاربر رایگان هستند و از طریق زیرساخت سرویسهای ابری — FCM برای Android و APNS برای iOS تحویل داده میشوند. اهداف اصلی اعلانهای Push: افزایش تعامل، اطلاعرسانی درباره رویدادها و بازگرداندن کاربر به برنامه.
آمار استفاده نشان میدهد که اعلانهای Push به درستی پیکربندی شده نرخ نگهداشت برنامه را 30-60% افزایش میدهند. با این حال، فراوانی بیش از حد اعلانها منجر به لغو اشتراک میشود — بیش از 60% کاربران اگر بیش از سه بار در روز اعلان دریافت کنند، آنها را غیرفعال میکنند.
سیستم Push از سه مؤلفه تشکیل شده است: سرور برنامه (app server)، سرویس پلتفرم (FCM/APNS) و برنامه کلاینت روی دستگاه. سرور درخواستی به سرویس پلتفرم ارسال میکند که اعلان را از طریق اتصال دائمی با سیستم عامل به دستگاه مقصد تحویل میدهد.
مکانیسم تحویل اعلانهای Push بر اساس اتصال دائمی بین دستگاه و سرویس پلتفرم است. سیستم عامل یک کانال ارتباطی رمزگذاری شده را حفظ میکند که تمام پیامهای Push از آن عبور میکنند.
در اولین راهاندازی، برنامه اجازه ارسال اعلانها را درخواست کرده و یک توکن منحصربهفرد دستگاه از FCM یا APNS دریافت میکند. این توکن رشتهای به طول تا 4 کیلوبایت است که نمونه برنامه را به طور یکتا شناسایی میکند. توکن هنگام نصب مجدد برنامه یا بازیابی دستگاه از پشتیبان تغییر میکند.
class FirebaseMessagingService :
FirebaseMessagingService() {
override fun onNewToken(token: String) {
sendTokenToServer(token)
}
override fun onMessageReceived(
message: RemoteMessage
) {
showNotification(message.notification)
}
}
سرور برنامه یک درخواست HTTP به FCM API یا APNS API ارسال میکند و توکن مقصد، عنوان، بدنه و دادههای اضافی را مشخص میکند. سرویس پلتفرم با وضعیت تحویل پاسخ میدهد: success، invalid token (دستگاه برنامه را حذف کرده) یا rate-limited (تکرار ارسال بیش از حد مجاز).
fetch("https://fcm.googleapis.com/fcm/send", {
method: "POST",
headers: {
"Authorization": "key=AIzaSy...",
"Content-Type": "application/json"
},
body: JSON.stringify({
to: "device_token_here",
notification: {
title: "ارسال توکن به سرور خود",
body: "شما یک اعلان جدید دارید!"
}
})
})
انتخاب بین FCM و APNS به پلتفرم هدف بستگی دارد. FCM از Android و iOS پشتیبانی میکند، APNS — فقط اکوسیستم Apple. بیایید تفاوتهای کلیدی مهم برای توسعه برنامههای موبایل چندپلتفرمی را بررسی کنیم.
FCM سرویس Google است که بر روی Google Play Services کار میکند. از دو طرح تحویل پشتیبانی میکند: اعلانهای با نمایش خودکار (display notifications) و اعلانهای داده که برنامه خودشان پردازش میکند. FCM رایگان است و محدودیتی در تعداد پیامهای ارسالی ندارد.
APNS سرویس Apple با پشتیبانی از پیوستهای چندرسانهای (تصاویر، ویدئو، صدا) با اندازه تا 10 مگابایت است. برای ارسال از طریق APNS به گواهی TLS یا کلید احراز هویت نیاز است. APNS فرکانس ارسال به یک دستگاه را محدود میکند — حداکثر 150 اعلان در دقیقه، پس از آن محدودیت نرخ اعمال میشود.
| ویژگی | FCM | APNS |
|---|---|---|
| پلتفرمها | Android, iOS, Web | iOS, macOS, watchOS |
| نیازمندیها | Google Play Services | Apple Developer Program |
| رسانه | تا 4 کیلوبایت (داده) | تا 10 مگابایت (پیوست) |
| اولویت | normal/high | immediate/power-saving |
| هزینه | رایگان | رایگان (حساب کاربری لازم است) |
اعلانهای Push بر اساس روش نمایش و هدف طبقهبندی میشوند. درک انواع به انتخاب استراتژی مناسب برای هر سناریوی تعامل با کاربر کمک میکند.
رایجترین نوع — اعلان نمایشی با عنوان و بدنه. سیستم عامل به طور خودکار آن را در پنل اعلانات، صفحه قفل و به صورت بنر نشان میدهد. توسعهدهنده میتواند صدا، لرزش، نشان روی آیکون و دکمههای اقدام برای عملیات مستقیم (پاسخ، باز کردن، رد کردن) را تنظیم کند.
اعلانهای داده فقط payload بدون نمایش بصری دارند. برنامه آنها را در پسزمینه پردازش میکند: دادهها را همگامسازی میکند، حافظه نهان را بهروز میکند یا دانلود را شروع میکند. در Android اعلانهای داده به طور تضمینی تحویل داده میشوند، در iOS — فقط زمانی که برنامه فعال است یا از طریق background fetch.
سیستمعاملهای مدرن موبایل از اعلانهای پیشرفته و رسانهای با تصاویر، GIF، ویدئو و صدا پشتیبانی میکنند. در iOS این از طریق UNNotificationAttachment پیادهسازی میشود، در Android — از طریق BigPictureStyle و InboxStyle برای شخصیسازی ظاهر اعلان در پنل سیستم.
اعلانهای بیصدا به کاربر نمایش داده نمیشوند و برای همگامسازی پسزمینه استفاده میشوند. در iOS اولویت بالایی برای کارهایی مانند بهروزرسانی داده قبل از باز کردن برنامه دارند. Android آنها را به عنوان اعلانهای داده با اولویت حداقل در نظر میگیرد.
پیکربندی اعلانهای Push نیازمند اقداماتی در سطح زیرساخت، بخش سرور و کد کلاینت است. بیایید فرآیند معمول برای یک پروژه موبایل چندپلتفرمی را بررسی کنیم.
برای Android باید یک پروژه در Firebase Console ایجاد کنید، فایل google-services.json را به پروژه اضافه کنید و FirebaseMessagingService را پیکربندی کنید. توکن دستگاه از طریق FirebaseInstanceId یا FirebaseMessaging.getInstance().token به دست میآید و سپس از طریق API در اولین راهاندازی یا هنگام تغییر آن به سرور ارسال میشود.
برای iOS اشتراک Apple Developer Program، ایجاد گواهی Push یا کلید APNS در Developer Portal و فعال کردن Capability Push Notifications در Xcode لازم است. ثبتنام برای اعلانها از طریق UIApplication.shared.registerForRemoteNotifications با دریافت deviceToken در AppDelegate انجام میشود.
import UIKit
import UserNotifications
@main
class AppDelegate: UIResponder,
UIApplicationDelegate {
func application(
_ application: UIApplication,
didRegisterForRemoteNotificationsWithDeviceToken
deviceToken: Data
) {
let token = deviceToken
.map { String.format("%02x", $0) }
.joined()
// ارسال token به سرور خود
}
}
در سمت سرور اعلانهای Push از طریق REST API یا Admin SDK ارسال میشوند. برای FCM از Firebase Admin SDK (موجود برای Node.js، Java، Python، Go)، برای APNS از کتابخانههای pusher (pushy برای Java، apn2 برای Node.js) استفاده میشود. توصیه میشود توکنها را در پایگاه داده با زمان آخرین بهروزرسانی ذخیره کنید.
امنیت اعلانهای Push بسیار مهم است زیرا ممکن است دادههای محرمانه از طریق آنها منتقل شود. هر دو پلتفرم مکانیسمهای حفاظتی پایه را فراهم میکنند، اما توسعهدهنده باید از آنها به درستی استفاده کند.
Payload اعلان Push ممکن است حاوی دادههای شخصی کاربران باشد: نامها، مبالغ تراکنشها، پیوندهای پیامها. حتی اگر کانال ارتباطی بین FCM/APNS و دستگاه رمزگذاری شده باشد، دادهها ممکن است در سطح برنامه هنگام رهگیری اعلان توسط نرمافزار شخص ثالث رهگیری شوند. توصیه میشود payload حساس را روی سرور با الگوریتم AES-256 رمزگذاری کرده و روی دستگاه با کلید ذخیره شده در Keychain (iOS) یا EncryptedSharedPreferences (Android) رمزگشایی کنید.
توکن دستگاه یک شناسه جلسه است که ممکن است در صورت هک دستگاه یا رهگیری ترافیک به خطر بیفتد. سرور برنامه باید قبل از ارسال توکنها را بررسی کند: آنها را با پایگاه داده مطابقت دهد، توکنهای غیرفعال را ردیابی کرده و در صورت خطاهای مکرر InvalidToken آنها را حذف کند. FCM و APNS برای توکنهای نامعتبر وضعیت InvalidRegistration را برمیگردانند — آن را نادیده نگیرید.
بدون کنترل فرکانس، اعلانهای Push میتوانند به ابزاری برای اسپم تبدیل شوند که کاربران را آزار داده و نرخ نگهداشت را کاهش میدهد. روی سرور محدودیتهایی تعیین کنید: حداکثر ۵ اعلان در ساعت برای یک کاربر و حداکثر ۳ پیام مشابه. برای اعلانهای تراکنشی (تأیید سفارش، تغییر رمز عبور) محدودیتها میتوانند بالاتر باشند — تا ۱۰ در ساعت، زیرا اطلاعات حیاتی دارند. از محدودیت نرخ در سطح API ارسال استفاده کنید تا مهاجم نتواند از طریق سرور شما ارسال انبوه انجام دهد.
سوالات متداول
بله، اتصال مستقیم به APNS در Android پشتیبانی نمیشود — برای دستگاههای بدون Google Play Services از جایگزینهایی مانند Huawei Mobile Services (HMS) و اتصالات WebSocket اختصاصی استفاده میشود. با این حال FCM به دلیل رایگان بودن و قابلیت اطمینان برای اکثر برنامهها استاندارد باقی میماند.
FCM و APNS آخرین اعلان را روی سرورهای خود ذخیره میکنند و پس از برقراری مجدد اتصال آن را تحویل میدهند. روی هر دستگاه فقط آخرین اعلان از هر برنامه ذخیره میشود، بنابراین در غیاب طولانی شبکه پیامهای میانی از دست میروند.
شایعترین دلایل — گواهی Push منقضی شده APNS (۱ سال اعتبار)، توکن دستگاه نامعتبر، اعلانهای غیرفعال در تنظیمات یا حالت ذخیره انرژی فعال. گواهی را در Apple Developer Console بررسی کنید و مطمئن شوید برنامه از طریق UNUserNotificationCenter اجازه درخواست میکند.
در Android از PendingIntent در NotificationCompat.Builder با ردیابی باز شدن از طریق Intent استفاده کنید. در iOS — متد UNUserNotificationCenterDelegate.userNotificationCenter(_:didReceive:withCompletionHandler:). FCM برای هر اعلان ارسالی گزارشهای تحویل و باز شدن ارائه میدهد.
به میزان کمی — اعلانهای Push اتصال دائمی ندارند؛ سیستم عامل از یک کانال سیستمی واحد برای همه برنامهها استفاده میکند که مصرف کلی انرژی را به حداقل میرساند. ارسال مکرر (هر ۵ دقیقه) انرژی بیشتری برای بیدار کردن دستگاه و خروج از حالت خواب مصرف میکند. اعلانهای بیصدا در iOS به دلیل فعال شدن برنامه در پسزمینه برای پردازش دادههای دریافتی انرژی بیشتری مصرف میکنند.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید