Rich Notification یک فرمت پیشرفته از اعلانهای push iOS است که شامل پیوستهای رسانهای، دکمههای تعاملی و رابطهای سفارشی برای بهبود تجربه کاربری میباشد. برخلاف اعلانهای متنی استاندارد، Rich Notification میتواند تصاویر، ویدئو و صدا را مستقیماً در بنر یا صفحه قفل نمایش دهد. طبق Apple Developer Documentation, 2026، UNNotificationAttachment تا 10 فایل را در یک اعلان پشتیبانی کرده و به طور خودکار آنها را برای نمایش بهینه در همه دستگاهها مقیاسبندی میکند.
نکات اصلی
Rich Notification یک اعلان push iOS است که نه تنها متن، بلکه پیوستهای رسانهای، عناصر تعاملی و رابط سفارشیسازی شده را شامل میشود. اصطلاح «غنی» (rich) نشاندهنده امکان گنجاندن تصاویر، ویدئو، صدا، دکمههای اقدام و ورود متن در اعلان است که یک هشدار ساده را به یک عنصر تعاملی کامل تبدیل میکند.
Apple پشتیبانی از Rich Notification را در iOS 10 همراه با فریمورک UserNotifications معرفی کرد. پیش از این، اعلانهای push فقط میتوانستند شامل متن، صدا و نشان badge باشند. iOS 10 UNNotificationServiceExtension و UNNotificationContentExtension را معرفی کرد که امکان تغییر محتوا و ایجاد رابطهای سفارشی را فراهم کردند. در نسخههای بعدی، پشتیبانی از SwiftUI در Content Extension، GIF متحرک و مقیاسبندی بهبودیافته رسانه اضافه شد.
Rich Notification تعامل کاربران را به طور قابل توجهی افزایش میدهد. تحقیقات Apple نشان میدهد که اعلانهای دارای تصویر 30–40% تعاملات بیشتری نسبت به اعلانهای متنی دریافت میکنند. تصویر محصول، پیشنمایش ویدئو یا دکمه پاسخ سریع به کاربر امکان میدهد مستقیماً از اعلان تصمیم بگیرد بدون اینکه برنامه را باز کند. این مسیر را تا اقدام هدف کوتاه کرده و تجربه کاربری را بهبود میبخشد.
UNNotificationAttachment از سه دسته رسانه پشتیبانی میکند: تصاویر، ویدئو و صدا. هر نوع محدودیتهای خاص خود را از نظر فرمت، اندازه و مدت زمان دارد. سیستم به طور خودکار تصاویر را به اندازه اعلان مقیاسبندی کرده و مدت ویدئو را برای بهینهسازی عملکرد به 30 ثانیه محدود میکند.
| نوع رسانه | فرمتهای پشتیبانی شده | حداکثر اندازه |
|---|---|---|
| تصاویر | JPEG, PNG, GIF, TIFF | 10 MB به ازای هر فایل |
| ویدئو | MPEG, MP4, MOV | 10 MB، تا 30 ثانیه |
| صدا | MP3, AAC, WAV, CAF | 10 MB |
تصاویر به طور خودکار توسط سیستم برای نمایش در نمای جمعوجور و گسترده اعلان برش و مقیاسبندی میشوند. GIF متحرک از iOS 12 پشتیبانی شده و هنگام مشاهده اعلان به طور خودکار پخش میشود. اندازه توصیه شده تصویر 1024x1024 پیکسل است که نمایش واضحی را در همه دستگاهها از جمله iPad با صفحه بزرگ تضمین میکند.
ویدئو در Rich Notification به طور پیشفرض بدون صدا پخش میشود — کاربر میتواند از طریق دکمه پخشکننده صدا را فعال کند. حداکثر مدت ویدئو 30 ثانیه است و پس از آن پخش متوقف میشود. پیوستهای صوتی میتوانند برای پیامهای صوتی یا پیشنمایشهای صوتی استفاده شوند و با ضربه زدن روی اعلان در نمای گسترده پخش میشوند.
اقدامات تعاملی به کاربر امکان میدهد بدون باز کردن برنامه، مستقیماً از اعلان عملیات انجام دهد. اقدامات از طریق UNNotificationCategory و UNNotificationAction هنگام راهاندازی برنامه ثبت میشوند. هر اقدام میتواند پسزمینه (بدون باز کردن برنامه) یا پیشزمینه (برنامه را برای تکمیل عملیات باز میکند) باشد.
UNNotificationAction دکمهای با عنوان و اصلاحکنندههای اختیاری مانند requiresAuthentication (نیاز به Face ID/Touch ID) یا destructive (با رنگ قرمز برجسته) است. UNTextInputNotificationAction این قابلیت را با افزودن فیلد ورود متن گسترش میدهد — ایدهآل برای پاسخ سریع به پیام یا نظر. اقدامات با فشار طولانی روی اعلان یا کشیدن به پایین نمایش داده میشوند.
دستهبندیهای اعلان، نوع محتوا را به مجموعه اقدامات موجود متصل میکنند. فرآیند ثبت در AppDelegate هنگام راهاندازی برنامه از طریق UNUserNotificationCenter.current().setNotificationCategories انجام میشود. دستهبندی در فیلد category پیمایش JSON روی سرور مشخص میشود و سیستم به طور خودکار مجموعه اقدامات مربوطه را به اعلان اعمال میکند.
وقتی کاربر دکمهای را کلیک میکند یا متنی ارسال میکند، سیستم با متد didReceive response، نماینده UNUserNotificationCenterDelegate را فراخوانی میکند. UNNotificationResponse شامل شناسه اقدام و متن وارد شده (برای UNTextInputNotificationAction) است. بر اساس این اطلاعات، برنامه منطق تجاری مربوطه را اجرا میکند: پیام ارسال میکند، اقدام را تأیید میکند یا صفحه خاصی را باز میکند.
بیایید چرخه کامل ایجاد Rich Notification را بررسی کنیم: از ثبت دستهبندیها در AppDelegate تا پردازش در Service Extension و نمایش. AppDelegate دستهبندی را با دکمهها ثبت میکند، سرور اعلان را با URL تصویر ارسال میکند، Service Extension رسانه را بارگیری میکند و Content Extension رابط سفارشی را با دکمهها نمایش میدهد.
// AppDelegate — ثبت دستهبندیها و اقدامات
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions:
[UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
let replyAction = UNTextInputNotificationAction(
identifier: "reply",
title: "پاسخ",
options: [.authenticationRequired])
let likeAction = UNNotificationAction(
identifier: "like",
title: "پسندیدم",
options: [])
let category = UNNotificationCategory(
identifier: "social_post",
actions: [replyAction, likeAction],
intentIdentifiers: [],
options: [])
UNUserNotificationCenter.current()
.setNotificationCategories([category])
return true
}
پس از دریافت اعلان push با دستهبندی «social_post» و URL تصویر در فیلد سفارشی، Service Extension فعال میشود. توسعهدهنده تصویر را از طریق شبکه بارگیری میکند، یک UNNotificationAttachment با شناسه یکتا ایجاد کرده و آن را به محتوا اضافه میکند. بررسی اندازه فایل بارگیری شده مهم است — اگر از 10 MB بیشتر شود، attachment ایجاد نمیشود و سیستم اعلان را بدون رسانه نمایش میدهد.
class NotificationService: UNNotificationServiceExtension {
override func didReceive(
_ request: UNNotificationRequest,
withContentHandler contentHandler:
@escaping (UNNotificationContent) -> Void
) {
let content = (request.content.mutableCopy()
as! UNMutableNotificationContent)
guard let urlString = content.userInfo["media-url"]
as? String,
let url = URL(string: urlString)
else { contentHandler(request.content); return }
URLSession.shared.downloadTask(with: url) {
location, _, _ in
guard let location = location else {
contentHandler(content); return }
let attachment = try! UNNotificationAttachment(
identifier: "media", url: location,
options: [UNNotificationAttachmentOptionsTypeHintKey:
"jpg"])
content.attachments = [attachment]
contentHandler(content)
}.resume()
}
}
برای تست Rich Notification بدون سرور، از شبیهساز iOS استفاده کرده و push را از طریق ترمینال با xcrun simctl push ارسال کنید. در payload حتماً mutable-content: 1 را برای فعالسازی Service Extension و category را برای نمایش اقدامات مشخص کنید. این دستور push را از فایل JSON مستقیماً به شبیهساز انتخاب شده ارسال میکند که امکان تکرار سریع بدون راهاندازی زیرساخت سرور را فراهم میکند.
UNNotificationContentExtension امکان جایگزینی کامل رابط استاندارد اعلان با نمای UIKit یا SwiftUI دلخواه را فراهم میکند. این توسعهدهنده زمانی فعال میشود که کاربر اعلان را گسترش میدهد (force touch یا کشیدن به پایین) و میتواند شامل دکمهها، لغزندهها، انیمیشنها و هر مؤلفه UI دیگری باشد. اندازه رابط با استفاده از Auto Layout با محتوا تطبیق مییابد.
Content Extension بر اساس storyboard با نمایی که از UIViewController ارث میبرد کار میکند. SwiftUI View از طریق UIHostingController از iOS 16 یکپارچه میشود که امکان استفاده از رویکردهای مدرن برای ساخت رابط را فراهم میکند. برای سازگاری معکوس با iOS 14–15، توصیه میشود از UIKit با فایلهای xib استفاده شود. رابط محتوای اصلاحشده را از Service Extension از طریق UNNotificationContent دریافت میکند.
Content Extension پروتکل UNNotificationContentExtension را با متد didReceive response پیادهسازی میکند. UNNotificationResponse شامل اطلاعاتی درباره دکمه کلیک شده یا متن وارد شده است. توسعهدهنده میتواند رابط را بدون بستن اعلان بهروزرسانی کند یا برای بستن آن، completion handler را فراخوانی کند. این امکان ایجاد سناریوهای تعامل سریع مانند «پسندیدن» با بازخورد بصری مستقیم در اعلان را فراهم میکند.
Apple توصیه میکند Content Extension مختصر و کاربردی باشد و از عناصر اضافی خودداری کند. حداکثر ارتفاع اعلان گسترش یافته حدود 400 نقطه است و پس از آن محتوا اسکرول میشود. برای یکپارچگی با سایر اعلانها از فونتها و فاصلههای سیستمی استفاده کنید. در اندازههای مختلف صفحه تست کنید تا مطمئن شوید رابط هم در iPhone و هم در iPad به درستی نمایش داده میشود.
سوالات متداول
حداکثر اندازه یک پیوست رسانهای 10 MB است. در صورت تجاوز از حد مجاز، UNNotificationAttachment ایجاد نمیشود و اعلان بدون رسانه نمایش داده میشود. توصیه میشود تصاویر را برای بارگیری سریع در Service Extension به 1–3 MB بهینه کنید.
Rich Notification در همه دستگاههای دارای iOS 10 و بالاتر از جمله iPhone 5s و جدیدتر پشتیبانی میشود. Content Extension با UI سفارشی از iOS 12 در دسترس است. SwiftUI در Content Extension از iOS 16. در نسخههای قدیمیتر، اعلان به صورت استاندارد نمایش داده میشود.
بله، GIF متحرک از iOS 12 پشتیبانی میشود. GIF به عنوان یک تصویر معمولی از طریق UNNotificationAttachment بارگیری شده و هنگام مشاهده اعلان به طور خودکار پخش میشود. اندازه GIF به همان 10 MB محدود است.
حداکثر 4 اقدام برای یک اعلان هنگام ثبت دستهبندی. در صورت تعداد بیشتر، سیستم 4 مورد اول را نمایش داده و بقیه را نادیده میگیرد. برای UX بهینه، توصیه میشود از 2–3 دکمه استفاده کنید — گزینههای زیاد رابط را شلوغ میکند.
بله، سرور باید push را از طریق APNS (Apple Push Notification service) با payload JSON حاوی URL فایل رسانه در فیلد سفارشی و پرچم mutable-content: 1 ارسال کند. سرور همچنین category را برای فعالسازی Content Extension و اقدامات مشخص میکند.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید