Notification Category: چیست، چه دسته‌بندی‌هایی وجود دارد و چگونه در iOS کار می‌کنند

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

Notification Category (دسته‌بندی اعلان‌ها) مکانیزمی در iOS است برای گروه‌بندی اعلان‌های فشار بر اساس نوع و اختصاص اقدامات قابل تنظیم به آن‌ها. دسته‌بندی مشخص می‌کند که کدام دکمه‌ها در هنگام 3D Touch یا لمس طولانی روی اعلان نمایش داده شوند، همچنین نحوه پردازش اعلان‌های ورودی از این نوع توسط سیستم. بر اساس Apple Developer Documentation، UNNotificationCategory در UNUserNotificationCenter ثبت می‌شود و از طریق فیلد category در بار APNS به اعلان متصل می‌شود.

نکات اصلی

  • Notification Category — مکانیزم iOS برای طبقه‌بندی اعلان‌های فشار و افزودن اقدامات به آن‌ها
  • UNNotificationCategory — کلاسی که دسته‌بندی را با مجموعه‌ای از UNNotificationAction ثبت می‌کند
  • اقدامات — دکمه‌های زیر اعلان: UNTextInputAction برای ورود متن، UNNotificationAction برای ضربه
  • اتصال — دسته‌بندی در بار APNS از طریق کلید category در دیکشنری aps مشخص می‌شود
  • تفاوت با اندروید — iOS Category اقدامات را مدیریت می‌کند، Android Channel اهمیت و صدا را

Notification Category در iOS چیست؟

Notification Category قابلیتی در iOS (از نسخه 8.0) است که به توسعه‌دهنده اجازه می‌دهد اعلان‌های فشار را طبقه‌بندی کرده و اقدامات تعاملی به آن‌ها اضافه کند. وقتی کاربر اعلانی دریافت می‌کند و با فشار (3D Touch) یا لمس طولانی روی آن کلیک می‌کند، دکمه‌های تعریف‌شده توسط دسته‌بندی ظاهر می‌شوند.

دسته‌بندی از طریق شیء UNNotificationCategory ثبت می‌شود که شامل شناسه، آرایه‌ای از اقدامات و پارامترهای اختیاری نمایش است. سیستم از شناسه دسته‌بندی موجود در بار APNS برای یافتن دسته‌بندی ثبت‌شده و نمایش اقدامات مربوطه استفاده می‌کند.

برخلاف Android Notification Channel، iOS Category اهمیت، صدا یا لرزش را مدیریت نمی‌کند. تنها وظیفه آن ارائه امکانات تعاملی برای اعلان است: دکمه‌های پاسخ، تأیید، لغو یا ورود متن.

اجباری بودن دسته‌بندی‌ها

دسته‌بندی‌ها برای نمایش اعلان‌های فشار در iOS اجباری نیستند. اعلان در هر صورت نمایش داده می‌شود — با دکمه‌ها اگر دسته‌بندی ثبت شده باشد، یا بدون آن‌ها. دسته‌بندی‌ها فقط برای افزودن تعامل به اعلان‌ها مورد نیاز هستند.

دسته‌بندی اعلان‌ها چگونه کار می‌کند؟

مکانیزم دسته‌بندی‌ها از چهار مرحله تشکیل شده است: ثبت دسته‌بندی در سمت کلاینت، ارسال بار APNS با دسته‌بندی، تشخیص دسته‌بندی توسط سیستم و پردازش اقدام کاربر.

  • ثبت — برنامه UNNotificationCategory را با آرایه‌ای از اقدامات ایجاد کرده و در UNUserNotificationCenter ثبت می‌کند
  • ارسال — سرور کلید category را با مقداری مطابق با شناسه دسته‌بندی در بار APNS قرار می‌دهد
  • نمایش — iOS اعلان را نمایش می‌دهد و در force touch دکمه‌های متصل به دسته‌بندی را نشان می‌دهد
  • پردازش — کاربر دکمه را فشار می‌دهد، UNUserNotificationCenterDelegate.didReceive response فعال می‌شود

اقدامات در دسته‌بندی می‌توانند دو نوع باشند: foreground (برنامه را باز می‌کنند) و background (در پس‌زمینه اجرا می‌شوند). برای اقدامات پس‌زمینه، برنامه زمان محدودی (حدود ۳۰ ثانیه) برای پردازش در UNNotificationActionHandler دریافت می‌کند.

گزینه‌های ثبت دسته‌بندی

UNNotificationCategory چندین گزینه را از طریق پارامتر options پشتیبانی می‌کند: customDismissAction — دریافت رویداد هنگام کشیدن اعلان، allowInCarPlay — نمایش اقدامات در CarPlay، hiddenPreviewsBodyPlaceholder — متن سفارشی برای پیش‌نمایش‌های مخفی. تنظیم صحیح گزینه‌ها تجربه کاربری را در دستگاه‌های مختلف اپل بهبود می‌بخشد.

UNNotificationAction: انواع اقدامات

iOS دو نوع اقدام برای دسته‌بندی اعلان‌ها ارائه می‌دهد. هر نوع کاربرد و روش تعامل خاص خود را با کاربر دارد.

نوعکلاستوضیحمثال
اقدام سادهUNNotificationActionدکمه با عنوان و گزینه‌ها (destructive, foreground, authenticationRequired)«حذف»، «مشاهده»
ورود متنUNTextInputActionدکمه‌ای که فیلد ورود متن با راهنما باز می‌کند«پاسخ»، «نظر»

UNTextInputAction — قابلیت منحصر‌به‌فرد iOS. با فشار دکمه «پاسخ»، سیستم یک فیلد متنی نمایش می‌دهد که کاربر پاسخ خود را در آن وارد می‌کند. متن وارد شده همراه با شناسه اقدام به نماینده ارسال می‌شود. این امکان پاسخ‌های سریع بدون باز کردن برنامه را فراهم می‌کند.

گزینه‌های اقدام: options.authenticationRequired — نیاز به باز کردن قفل دستگاه، options.destructive — دکمه را قرمز رنگ می‌کند (برای اقدامات خطرناک)، options.foreground — پس از فشار برنامه را باز می‌کند.

پیکربندی دسته‌بندی در کد iOS

دسته‌بندی‌ها هنگام راه‌اندازی برنامه، معمولاً در متد didFinishLaunchingWithOptions ثبت می‌شوند. ثبت از طریق UNUserNotificationCenter، پس از درخواست مجوز اعلان‌ها انجام می‌شود. دسته‌بندی‌ها را می‌توان در هر راه‌اندازی به‌روز کرد — نسخه‌های قدیمی با نسخه‌های جدید جایگزین می‌شوند.

swift
import UserNotifications

class AppDelegate: UIResponder, UIApplicationDelegate {

    func registerNotificationCategories() {
        let replyAction = UNTextInputNotificationAction(
            identifier: "reply",
            title: "پاسخ",
            options: [.foreground],
            textInputButtonTitle: "ارسال",
            textInputPlaceholder: "پیام را وارد کنید..."
        )

        let deleteAction = UNNotificationAction(
            identifier: "delete",
            title: "حذف",
            options: [.destructive]
        )

        let messageCategory = UNNotificationCategory(
            identifier: "message",
            actions: [replyAction, deleteAction],
            intentIdentifiers: [],
            options: [.customDismissAction]
        )

        UNUserNotificationCenter.current()
            .setNotificationCategories([messageCategory])
    }

    func application(
        _ application: UIApplication,
        didFinishLaunchingWithOptions options: [UIApplication.LaunchOptionsKey: Any]?
    ) -> Bool {
        UNUserNotificationCenter.current().delegate = self
        registerNotificationCategories()
        return true
    }
}

پس از ثبت دسته‌بندی، هر اعلان با category = «message» در بار APNS دکمه‌های «پاسخ» و «حذف» را نمایش خواهد داد. پردازش فشارها در userNotificationCenter:didReceive response انجام می‌شود، جایی که actionIdentifier مشخص می‌کند کدام دکمه فشار داده شده است.

پردازش فشار در نماینده

وقتی کاربر دکمه دسته‌بندی را فشار می‌دهد، iOS نماینده UNUserNotificationCenterDelegate را با شیء UNNotificationResponse فراخوانی می‌کند. response.actionIdentifier شامل شناسه دکمه فشار داده شده است، و response.notification.request.content.userInfo حاوی داده‌های سفارشی از بار APNS است. برای UNTextInputAction، response.userText با متن وارد شده توسط کاربر نیز در دسترس است.

تفاوت با کانال‌های اندروید

توسعه‌دهندگانی که با Android Notification Channels آشنا هستند، اغلب آن‌ها را با iOS Notification Categories اشتباه می‌گیرند. با وجود نام مشابه، این مکانیزم‌ها وظایف متفاوتی را حل کرده و به روش‌های مختلفی کار می‌کنند.

  • هدف — Android Channels اهمیت و دید اعلان‌ها را مدیریت می‌کند؛ iOS Categories — اقدامات تعاملی را
  • اجباری بودن — Android Channel برای نمایش اعلان ضروری است؛ iOS Category اختیاری است
  • کنترل کاربر — کاربر اندروید کانال‌ها را در تنظیمات سیستم پیکربندی می‌کند؛ دسته‌بندی‌های iOS مستقیماً برای کاربر قابل مشاهده نیستند
  • گروه‌بندی — Android Channels را می‌توان در گروه‌ها ترکیب کرد (ChannelGroup)؛ iOS Categories گروه‌بندی نمی‌شوند

در هر دو پلتفرم می‌توان هر دو مکانیزم را ترکیب کرد: در اندروید اعلان می‌تواند متعلق به کانالی با اقدامات NotificationCompat باشد، و در iOS دسته‌بندی کانال‌هایی را تکمیل می‌کند که در iOS thread-id نامیده می‌شوند و برای گروه‌بندی اعلان‌ها در مرکز اعلان‌ها استفاده می‌شوند.

بار APNS با دسته‌بندی

برای اینکه اعلان با دکمه‌های دسته‌بندی نمایش داده شود، سرور باید کلید category را در بار APNS قرار دهد. بدون این کلید، سیستم نمی‌داند کدام دسته‌بندی را برای اعلان اعمال کند.

json
{
    "aps": {
        "alert": {
            "title": "پیام جدید",
            "body": "آنا: سلام! چطوری؟"
        },
        "category": "message",
        "thread-id": "chat_123",
        "badge": 5,
        "sound": "default"
    }
}

کلید category باید دقیقاً با شناسه ثبت‌شده از طریق setNotificationCategories در سمت کلاینت مطابقت داشته باشد. حروف بزرگ و کوچک مهم هستند — «message» و «Message» دسته‌بندی‌های متفاوتی در نظر گرفته می‌شوند. اگر دسته‌بندی یافت نشود، اعلان بدون دکمه و بدون خطا در لاگ‌ها نمایش داده می‌شود.

پردازش دسته‌بندی ناشناخته

اگر سرور اعلانی با category که در کلاینت ثبت نشده ارسال کند، iOS دسته‌بندی را نادیده گرفته و اعلان را بدون دکمه نمایش می‌دهد. خطا ثبت نمی‌شود و برنامه از عدم تطابق مطلع نمی‌شود. توصیه می‌شود لیست دسته‌بندی‌ها را بین سرور و کلاینت از طریق یک فایل پیکربندی همگام‌سازی کرده و در هر به‌روزرسانی برنامه بررسی کنید.

الگوهای طراحی دسته‌بندی

هنگام طراحی دسته‌بندی اعلان‌های iOS، اصل یک دسته‌بندی — یک سناریو را رعایت کنید. هر دسته‌بندی باید با نوع خاصی از تعامل مطابقت داشته باشد: پاسخ به پیام، تأیید اقدام، رد درخواست. سناریوهای مختلف را در یک دسته‌بندی ترکیب نکنید — این کاربر را سردرگم کرده و پردازش را در نماینده پیچیده می‌کند.

از UNTextInputAction برای سناریوهایی استفاده کنید که کاربر باید بدون باز کردن برنامه متن وارد کند: پاسخ‌ها در پیام‌رسان‌ها، نظرات، یادداشت‌های سریع. اقدامات متنی تعامل را افزایش می‌دهند — کاربر در ۲ ضربه به جای ۵+ ضربه در برنامه باز، یک اقدام معنادار انجام می‌دهد.

برای اقدامات خطرناک (حذف، مسدود کردن) از گزینه destructive استفاده کنید. iOS این دکمه‌ها را با رنگ قرمز برجسته می‌کند و کاربر را از غیرقابل برگشت بودن اقدام آگاه می‌کند. برای اقداماتی که نیاز به باز کردن قفل دستگاه دارند (مشاهده داده‌های شخصی)، authenticationRequired را تنظیم کنید — سیستم قبل از اجرا Face ID یا رمز عبور درخواست می‌کند.

دسته‌بندی‌ها را روی دستگاه‌های مختلف تست کنید: در iPhone با 3D Touch، در iPhone بدون 3D Touch (لمس طولانی)، در iPad و در Mac. رفتار دسته‌بندی‌ها ممکن است در پلتفرم‌های مختلف اپل کمی متفاوت باشد. توجه ویژه — CarPlay: دکمه‌های دسته‌بندی روی صفحه خودرو نمایش داده می‌شوند، اما ورود متن در دسترس نیست، بنابراین UNTextInputAction به طور خودکار در CarPlay مخفی می‌شود. در watchOS دسته‌بندی‌ها پشتیبانی نمی‌شوند — همه اعلان‌ها بدون دکمه نمایش داده می‌شوند.

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

چند دسته‌بندی می‌توان در iOS ثبت کرد؟

محدودیتی وجود ندارد — iOS برای تعداد UNNotificationCategory محدودیتی تعیین نمی‌کند. با این حال، در عمل توصیه می‌شود بیش از ۱۰–۱۵ دسته‌بندی نداشته باشید تا پردازش در نماینده پیچیده نشود. هر دسته‌بندی می‌تواند حداکثر ۴ اقدام (دکمه) داشته باشد. بیش از ۴ اقدام توسط سیستم نادیده گرفته می‌شوند.

چگونه فشار دکمه دسته‌بندی را پردازش کنیم؟

نماینده UNUserNotificationCenterDelegate و متد didReceive response را پیاده‌سازی کنید. response.actionIdentifier را بررسی کنید: UNNotificationDismissActionIdentifier — کشیدن حذف، UNNotificationDefaultActionIdentifier — ضربه روی بدنه، یا شناسه سفارشی دکمه خود. برای دکمه‌های متنی، متن از طریق response.userText در دسترس است.

تفاوت category با thread-id چیست؟

Category — اقدامات تعاملی (دکمه‌ها) را برای اعلان تعیین می‌کند. Thread-id — اعلان‌ها را در مرکز اعلان‌ها بر اساس موضوع گروه‌بندی می‌کند. هر دو کلید در بار APNS مشخص می‌شوند. Category و thread-id مرتبط نیستند: یک اعلان می‌تواند دسته‌بندی داشته باشد بدون thread-id و بالعکس.

آیا دسته‌بندی‌ها در macOS کار می‌کنند؟

بله، UNNotificationCategory در macOS 10.14+ (Mojave) در برنامه‌هایی که از UserNotifications framework استفاده می‌کنند پشتیبانی می‌شود. رفتار دسته‌بندی‌ها در macOS مشابه iOS است: با کلیک روی اعلان دکمه‌ها نمایش داده می‌شوند، پردازش از طریق UNUserNotificationCenterDelegate انجام می‌شود.

آیا باید دسته‌بندی‌ها را در هر راه‌اندازی به‌روز کرد؟

توصیه می‌شود دسته‌بندی‌ها را در هر راه‌اندازی برنامه از طریق setNotificationCategories ثبت کنید. سیستم مجموعه قدیمی دسته‌بندی‌ها را با هر فراخوانی با مجموعه جدید جایگزین می‌کند. اگر به‌روز نکنید، دسته‌بندی‌ها بین راه‌اندازی‌ها حفظ می‌شوند، اما با تغییر کد، دسته‌بندی‌های قدیمی ممکن است با دسته‌بندی‌های جدید مطابقت نداشته باشند.

خلاصه

  • Notification Category — مکانیزم iOS برای افزودن اقدامات تعاملی به اعلان‌های فشار
  • UNNotificationCategory — کلاسی که شناسه، آرایه UNNotificationAction و گزینه‌ها را ترکیب می‌کند
  • UNTextInputAction — اقدام با فیلد ورود متن برای پاسخ‌های سریع بدون باز کردن برنامه
  • بار APNS — کلید category در دیکشنری aps اعلان را به دسته‌بندی ثبت‌شده متصل می‌کند
  • تا ۴ اقدام — حداکثر دکمه برای یک دسته‌بندی، بقیه توسط سیستم نادیده گرفته می‌شوند
  • گزینه‌های اقدام — foreground (باز کردن برنامه)، destructive (دکمه قرمز)، authenticationRequired
  • تفاوت با اندروید — iOS Category مسئول اقدامات است، Android Channel — مسئول اهمیت و صدا

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

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

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

همچنین بخوانید