Notification Action — دکمههای تعاملی و فیلدهای ورودی که مستقیماً در اعلان پش نمایش داده میشوند و به کاربر اجازه میدهند بدون باز کردن برنامه اقدامی انجام دهند. این یک عنصر کلیدی تجربه کاربر است که مسیر تا صفحه مورد نظر را کوتاه میکند. به استناد به Android Developers, 2025، Notification Action میزان درگیری کاربران را تا 40% افزایش میدهد.
نکات کلیدی
Notification Action — یک عنصر تعاملی رابط کاربر است که به اعلان پش اضافه میشود تا یک اقدام مشخص انجام دهد. کاربر میتواند بدون ورود به برنامه به پیام پاسخ دهد، وظیفهای را تأیید کند یا صفحه خاصی را باز کند. اقدامات به صورت دکمههایی در زیر متن اعلان یا در نمایش بسطه شده با سوایپ نمایش داده میشوند.
هدف اصلی Notification Action کاهش تعداد مراحل برای دستیابی کاربر به هدفش است. به جای باز کردن برنامه و پیمایش به صفحه مورد نظر، کاربر یک دکمه را کلیک میکند. تحقیقات نشان میدهد که برنامههایی با اعلانهای تعاملی نسبت به اعلانهای ساده 25–40% سطح درگیری بالاتری دارند.
در Android، Notification Action در نمایش فشرده به صورت آیکون-دکمه و در حالت بسطه به صورت دکمههای متنی نمایش داده میشوند. در iOS، اقدامات با فشار دادن طولانی بر اعلان یا سوایپ به چپ نمایان میشوند. هر پلتفرم توصیههای مخصوص خود را برای تعداد اقدامات دارد — Android حداکثر 3 و iOS حداکثر 4 را توصیه میکند.
| پلتفرم | حداکثر اقدامات | روش نمایش | انواع اقدامات |
|---|---|---|---|
| Android | 3 | آیکونها + متن | دکمهها، ورود متن |
| iOS | 4 | فشار طولانی / سوایپ | دکمهها، ورود متن |
در Android، Notification Action از طریق NotificationCompat.Builder با استفاده از روش addAction() ایجاد میشود. هر اقدام شامل یک آیکون، متن و PendingIntent است که با کلیک تفعیل میشود. از Android 7.0 (API 24) به بعد، ورود مستقیم متن از طریق RemoteInput پشتیبانی میشود.
برای ایجاد دکمه در اعلان، باید یک PendingIntent تعریف کنید که با کلیک تفعیل شود. PendingIntent میتواند Activity را باز کند، Service یا BroadcastReceiver را اجرا کند. آیکون اقدام باید تک رنگ باشد و با Material Design مطابقت داشته باشد.
val acceptIntent = Intent(context, AcceptActionReceiver::class.java)
acceptIntent.putExtra("notification_id", notificationId)
val acceptPendingIntent = PendingIntent.getBroadcast(
context, requestCode,
acceptIntent, PendingIntent.FLAG_UPDATE_CURRENT
)
val notification = NotificationCompat.Builder(context, CHANNEL_ID)
.setSmallIcon(R.drawable.ic_notification)
.setContentTitle("درخواست تأیید")
.setContentText("تأیید انجام وظیفه")
.addAction(R.drawable.ic_accept, "تأیید", acceptPendingIntent)
.build()
برای سناریوهایی که ورود متن نیاز است (مانند پاسخ به پیام)، Android RemoteInput را فراهم میکند. کاربر متن را مستقیماً در اعلان وارد میکند و برنامه آن را بدون باز کردن Activity دریافت میکند. RemoteInput از Android 7.0+ پشتیبانی میکند و نیازمند پردازش صریح در BroadcastReceiver یا Service است.
val remoteInput = RemoteInput.Builder("reply_input")
.setLabel("پاسخ را وارد کنید")
.build()
val replyAction = NotificationCompat.Action.Builder(
R.drawable.ic_reply, "پاسخ دادن", replyPendingIntent
)
.addRemoteInput(remoteInput)
.build()
val notification = NotificationCompat.Builder(context, CHANNEL_ID)
.addAction(replyAction)
.build()
هنگام کلیک روی اقدام، سیستم PendingIntent مشخص شده را تفعیل میکند. برای به دست آوردن متن وارد شده از RemoteInput، RemoteInput.getResultsFromIntent(intent) را فراخوان کنید. توصیه میشود اقدامات را در IntentService یا WorkManager پردازش کنید تا ترتاز UI مسدود نشود.
در iOS، Notification Action از طریق چارچوب UserNotifications پیاده سازی میشود. توسعهدهنده دستههای اقدام (UNNotificationCategory) ایجاد میکند و آنها را در زمان راهاندازی برنامه ثبت میکند. هر اقدام توسط یک شیئه UNNotificationAction با یک شناسه منحصر به فرد تعریف میشود.
برای افزودن اقدامات به اعلانهای پش در iOS، باید یک دسته ایجاد کنید که اقدامات مربوط را گروهبندی میکند. دسته در بار اعلان از طریق فیلد category مشخص میشود. پس از دریافت اعلان، سیستم اقدامات موجود از دسته مشخص شده را نمایش میدهد.
import UserNotifications
class NotificationSetup {
func registerNotificationCategories() {
let approveAction = UNNotificationAction(
identifier: "APPROVE_ACTION",
title: "تأیید",
options: [.foreground]
)
let declineAction = UNNotificationAction(
identifier: "DECLINE_ACTION",
title: "رد کردن",
options: [.destructive]
)
let category = UNNotificationCategory(
identifier: "REQUEST_CATEGORY",
actions: [approveAction, declineAction],
intentIdentifiers: [],
options: []
)
UNUserNotificationCenter.current()
.setNotificationCategories([category])
}
}
وقتی کاربر روی اقدامی کلیک میکند، سیستم روش userNotificationCenter:didReceiveNotificationResponse را در دلگات UNUserNotificationCenter فراخوان میکند. response.actionIdentifier شامل شناسه اقدام انجام شده است. برای ورود متن، از UNTextInputNotificationAction استفاده میشود که متن وارد شده توسط کاربر را تامین میکند.
extension AppDelegate: UNUserNotificationCenterDelegate {
func userNotificationCenter(
center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler: @escaping () -> Void
) {
switch response.actionIdentifier {
case "APPROVE_ACTION":
Log.d("Action: approved")
case "DECLINE_ACTION":
Log.d("Action: declined")
case UNNotificationDefaultActionIdentifier:
Log.d("Action: opened app")
default:
break
}
completionHandler()
}
}
Notification Action بر اساس نوع تعامل و سناریو استفاده طبقهبندی میشود. انتخاب صحیح نوع اقدام مستقیماً بر تجربه کاربر و نرخ تبدیل به اقدام هدف تأثیر میگذارد.
رایجترین نوع — دکمهای که برنامه را در صفحه مشخصی باز میکند. در Android از PendingIntent.getActivity() و در iOS از گزینه .foreground در UNNotificationAction استفاده میشود. برای اقداماتی که نیازمند رابط کامل هستند استفاده میشود، مانند مشاهده جزئیات سفارش.
اقداماتی که بدون باز کردن برنامه انجام میشوند. در Android از PendingIntent.getBroadcast() یا PendingIntent.getService() استفاده میشود. در iOS — گزینه .authenticationRequired یا بدون .foreground. نمونهها: علامت زدن وظیفه به عنوان انجام شده، لایک پست، افزودن به علاقهمندیها.
به کاربر اجازه میدهد متن را مستقیماً در اعلان وارد کند. در Android از طریق RemoteInput و در iOS از طریق UNTextInputNotificationAction پیاده سازی میشود. برای پاسخ به پیامها، نظرات، ورود کدهای تأیید یکبار مصرف میشود.
اقداماتی که دادهها را به طور قابل بازگشت تغییر میدهند — حذف، رد کردن، مسدود کردن. در Android به صورت ویژوال متمایز میشوند (رنگ قرمز در بعضی سیستمها)، در iOS نیازمند گزینه .destructive هستند. توصیه میشود برای اقدامات تخریبی تأیید بگیرید، مثلاً از طریق گفتگوی اضافی یا کلیک دوم.
یک کلاس جداگانه از اقدامات — ورود متن مستقیماً از اعلان. در Android از طریق RemoteInput در ترکیب با PendingIntent پیاده سازی میشود. در iOS از UNTextInputNotificationAction که از UNNotificationAction مشتق شده استفاده میشود. چنین اقداماتی برای پاسخهای سریع در پیامرسانها، ورود کدهای تخفیف، پر کردن فرمهای بازخورد یا ارزیابی کیفیت خدمات استفاده میشود. متن وارد شده همراه با شناسه اقدام به برنامه ارسال میشود. برای پردازش صحیح ورود متن در هر دو پلتفرم، باید تجزیه و تحلیل دادههای وارد شده و اعتبارسنجی قبل از انجام اقدام هدف اجرا شود.
پردازش صحیح Notification Action برای تحلیل و تجربه کاربر حیاتی است. هر کلیک باید ثبت شود و اقدام به طور قابل اعتماد انجام شود، حتی اگر برنامه بسته شده باشد.
هر کلیک بر روی Notification Action را از طریق سیستم تحلیل ردیابی کنید. Firebase Analytics، Mixpanel یا Yandex.Metrica به شما امکان ثبت شناسه اقدام، زمان کلیک و زمینه اعلان را میدهند. این دادهها به بهینهسازی استراتژی اعلانها و افزایش درگیری کمک میکنند. آزمایش A/B با مجموعههای مختلف اقدامات به تعیین موثرترین سناریوهای تعامل با کاربر کمک میکند.
اگر برنامه بسته شده باشد، سیستم هنوز هم Intent یا UNNotificationResponse را برای کلیک روی اقدام ارسال میکند. در Android از BroadcastReceiver برای پردازش تضمینی استفاده کنید. در iOS، سیستم برنامه را در پسزمینه اجرا میکند و پاسخ را به دلگات ارسال میکند. برای اقدامات حیاتی (تأیید پرداخت، اجازه دسترسی) یک مکانیزم تلاش مجدد و اعلام به کاربر درباره انجام موفقیتآمیز اضافه کنید.
از Android 7.0 به بعد، توسعهدهنده میتواند بر نمایش Notification Action از طریق آیکونها و رنگها تأثیر بگذارد. آیکونها باید تک رنگ (کانال آلفا)، با اندازه 24x24 dp باشند. در iOS سفارشی سازی دکمهها محدود است — از رنگها و فونتهای سیستمی استفاده میشود. Material Design گروهبندی اقدامات را بر اساس اولویت توصیه میکند: مهمترین اقدام ابتدا، تخریبی در پایان.
سؤالات متداول
در Android حداکثر 3 اقدام و در iOS تا 4 اقدام توصیه میشود. تجاوز از حد باعث میشود بخشی از اقدامات نمایش داده نشوند یا در زیرمنو مخفی شوند.
آیکون به NotificationCompat.Action.Builder به عنوان یک منبع drawable ارسال میشود. آیکون باید تک رنگ (کانال آلفا)، با اندازه 24x24 dp باشد و با توصیههای Material Design مطابقت داشته باشد.
بله، اگر اعلان در صفحه قفل نمایش داده شود و فلاگ visibility به VISIBILITY_PUBLIC تنظیم شده باشد. در iOS برای اقداماتی که نیازمند اجازه دسترسی هستند، گزینه .authenticationRequired مورد نیاز است.
در Android سیستم فرآیند را بازسازی میکند و Intent را تحویل میدهد. در iOS سیستم برنامه را در پسزمینه اجرا میکند. میتوان با استفاده از BroadcastReceiver در Android و UNNotificationServiceExtension در iOS تحویل را تضمین کرد.
در Android اقدامات بلافاصله در زیر اعلان به صورت آیکون نمایان هستند. در iOS اقدامات در پشت فشار طولانی یا سوایپ مخفی هستند. طراحی UX اعلانها باید این تفاوتهای پلتفرمی را در نظر بگیرد.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید