Notification Channel — چیست، چه انواعی دارد و چگونه در Android کار می‌کند

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

Notification Channel (کانال اعلان) — مکانیسمی است در Android که در نسخه 8.0 (API 26) معرفی شد و اعلان‌ها را بر اساس دسته‌بندی گروه‌بندی می‌کند و به کاربر کنترل رفتار آنها را می‌دهد. هر کانال سطح اهمیت، صدا، لرزش و ظاهر بصری را برای تمام اعلان‌های ارسال شده از طریق خود تعیین می‌کند. طبق Android Developers، NotificationChannel برای همه اعلان‌ها در Android 8+ الزامی است — بدون آن اعلان‌ها نمایش داده نمی‌شوند.

نکات اصلی

  • Notification Channel — دسته‌بندی اعلان‌های Android 8+ که رفتار گروهی از اعلان‌ها را مدیریت می‌کند
  • الزامی بودن — در Android 8+ هر اعلان باید یک کانال داشته باشد، در غیر این صورت نمایش داده نمی‌شود
  • سطح اهمیت — سطح اهمیت کانال (IMPORTANCE_HIGH, DEFAULT, LOW, MIN) نحوه نمایش را تعیین می‌کند
  • کنترل توسط کاربر — کاربر می‌تواند هر کانال را به صورت جداگانه در تنظیمات سیستم شخصی‌سازی کند
  • گروه‌های کانال — NotificationChannelGroup کانال‌ها را به صورت بصری در رابط تنظیمات گروه‌بندی می‌کند

Notification Channel چیست؟

Notification Channel — یک ظرف منطقی برای اعلان‌های یک نوع در Android 8+ (Oreo) است. توسعه‌دهنده کانالی با ID یکتا ایجاد می‌کند، پارامترهای آن را تنظیم می‌کند و سپس هر اعلان را با مشخص کردن این کانال ارسال می‌کند. تمام اعلان‌های یک کانال تنظیمات آن را به ارث می‌برند.

قبل از Android 8 مدیریت اعلان‌ها دودویی بود: همه یا هیچ. کاربر فقط می‌توانست اعلان‌های برنامه را کاملاً غیرفعال کند. کانال‌ها این مشکل را حل کردند: اکنون می‌توان اعلان‌های تبلیغاتی را غیرفعال کرد اما اعلان‌های پیام دوستان را حفظ کرد.

پس از ایجاد کانال، اهمیت آن (importance) می‌تواند در هر لحظه توسط کاربر از طریق تنظیمات → برنامه‌ها → اعلان‌ها تغییر کند. توسعه‌دهنده نمی‌تواند پس از ایجاد کانال importance را به صورت برنامه‌نویسی تغییر دهد — این یک محدودیت امنیتی Android است.

الزامی بودن کانال‌ها

در Android 8+ هر اعلان باید از طریق NotificationChannel ارسال شود. اگر برنامه بخواهد اعلانی را بدون کانال نمایش دهد — سیستم بی‌صدا آن را نادیده می‌گیرد. استثنا — اعلان‌های از طریق NotificationCompat با کانال پیش‌فرض که توسط کتابخانه به صورت خودکار ایجاد می‌شود.

کانال‌های اعلان در Android چگونه کار می‌کنند؟

کانال اعلان با مجموعه‌ای از پارامترها تعریف می‌شود که هنگام ایجاد آن از طریق کلاس NotificationChannel تنظیم می‌شوند. پارامتر اصلی — سطح اهمیت (importance level) است که نحوه تعامل اعلان با کاربر را تعیین می‌کند.

  • ID کانال — یک رشته یکتا (مثلاً “messages”)، هنگام ارسال هر اعلان استفاده می‌شود
  • نام کانال — نام قابل خواندن که در تنظیمات به کاربر نمایش داده می‌شود
  • توضیحات — توضیح هدف کانال که در تنظیمات زیر نام نشان داده می‌شود
  • Importance — سطح از IMPORTANCE_NONE تا IMPORTANCE_HIGH، نحوه نمایش را تعیین می‌کند
  • صدا و لرزش — به صورت جداگانه برای هر کانال هنگام ایجاد تنظیم می‌شود

پس از ایجاد، کانال در تنظیمات اعلان سیستم ظاهر می‌شود. کاربر می‌تواند importance را تغییر دهد، صدا، لرزش را غیرفعال کند یا کانال را کاملاً مسدود کند. تمام تغییرات برای اعلان‌های بعدی فوراً اعمال می‌شوند.

پارامترهای پیکربندی کانال

هنگام ایجاد NotificationChannel می‌توان تنظیم کرد: صدا (سفارشی یا سیستمی)، لرزش (الگو و مدت)، نشانگر نور (رنگ LED)، نشان (setShowBadge)، قابلیت مشاهده در صفحه قفل (setLockscreenVisibility) و حالت مزاحم نشوید (setBypassDnd). این پارامترها هنگام ایجاد کانال ثابت می‌شوند و بعداً فقط توسط کاربر قابل تغییر هستند.

جدول مقایسه Importance Level

سطح اهمیت (importance) — پارامتر اصلی کانال است. تعیین می‌کند که اعلان صدا پخش کند، روی صفحه ظاهر شود یا فقط در سایه قرار گیرد. اهمیت را با اولویت اشتباه نگیرید — importance توسط کانال تنظیم می‌شود، در حالی که اولویت (setPriority) در Android 8+ نادیده گرفته می‌شود.

سطحثابترفتارصدا
HIGHIMPORTANCE_HIGH (4)نمایش بنر heads-up، ظاهر شدن در پردهبله
DEFAULTIMPORTANCE_DEFAULT (3)ظاهر شدن در پرده، بدون heads-upبله
LOWIMPORTANCE_LOW (2)ظاهر شدن در پرده بدون صداخیر
MINIMPORTANCE_MIN (1)فقط در سایه، بدون صدا و لرزشخیر
NONEIMPORTANCE_NONE (0)اصلاً نمایش داده نمی‌شودخیر

برای بیشتر سناریوهای کاربری از IMPORTANCE_DEFAULT (3) استفاده کنید — اعلان در پرده با صدا ظاهر می‌شود اما بدون بنر بازشونده. IMPORTANCE_HIGH را فقط برای رویدادهای حیاتی استفاده کنید: تماس ورودی، پیام از مخاطب، یادآوری با تایمر.

ایجاد کانال در کد Android

کانال یک بار — هنگام راه‌اندازی برنامه یا اولین استفاده ایجاد می‌شود. بهترین روش — ایجاد همه کانال‌ها هنگام راه‌اندازی برنامه، در متد Application.onCreate. ایجاد مجدد کانال موجود ایمن است — اگر کانال از قبل وجود داشته باشد، Android درخواست را نادیده می‌گیرد.

kotlin
class App : Application() {

    override fun onCreate() {
        super.onCreate()
        createNotificationChannels()
    }

    private fun createNotificationChannels() {
        val messagesChannel = NotificationChannel(
            CHANNEL_MESSAGES,
            "پیام‌ها",
            NotificationManager.IMPORTANCE_HIGH
        ).apply {
            description = "اعلان‌های پیام‌های جدید"
            enableVibration = true
            setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
        }

        val promoChannel = NotificationChannel(
            CHANNEL_PROMO,
            "تخفیف‌ها و اخبار",
            NotificationManager.IMPORTANCE_LOW
        ).apply {
            description = "اعلان‌های بازاریابی و پیشنهادهای ویژه"
            setShowBadge(false)
        }

        val manager = getSystemService(NotificationManager::class.java)
        manager.createNotificationChannel(messagesChannel)
        manager.createNotificationChannel(promoChannel)
    }

    companion object {
        const val CHANNEL_MESSAGES = "messages"
        const val CHANNEL_PROMO = "promo"
    }
}

هنگام ارسال اعلان، ID کانال را از طریق setChannelId (برای NotificationCompat) یا در سازنده Notification.Builder مشخص کنید. اگر کانالی با ID مشخص وجود نداشته باشد — اعلان نمایش داده نمی‌شود اما خطایی رخ نمی‌دهد.

مدیریت و ویرایش کانال‌ها

Android چندین API برای مدیریت برنامه‌نویسی کانال‌ها ارائه می‌دهد: دریافت لیست، حذف و بررسی تنظیمات فعلی. حذف کانال باعث می‌شود که تمام اعلان‌های آن توسط سیستم از تاریخچه حذف شوند.

kotlin
val manager =
    getSystemService(NotificationManager::class.java)

// دریافت لیست همه کانال‌ها
val channels = manager.getNotificationChannels()
channels.forEach { channel ->
    Log.d("کانال‌ها", "${channel.id}: ${channel.importance}")
}

// بررسی importance فعلی (کاربر ممکن است تغییر داده باشد)
val channel = manager.getNotificationChannel(CHANNEL_MESSAGES)
if (channel.importance == NotificationManager.IMPORTANCE_NONE) {
    // کاربر کانال را غیرفعال کرده است
    suggestEnablingChannel()
}

// حذف کانال
manager.deleteNotificationChannel(CHANNEL_PROMO)

پس از ایجاد کانال، توسعه‌دهنده نمی‌تواند importance آن را به صورت برنامه‌نویسی تغییر دهد — این محدودیت Android برای محافظت از کاربر در برابر سوءاستفاده است. اگر نیاز به تغییر اهمیت کانال دارید، یک کانال جدید با ID دیگر ایجاد کنید و اعلان‌ها را منتقل کنید.

مهاجرت هنگام تغییر importance

اگر نیاز به تغییر اهمیت یک کانال موجود دارید، یک کانال جدید با ID متفاوت (مثلاً “messages_v2”) ایجاد کنید و شروع به ارسال اعلان‌ها به آن کنید. کانال قدیمی را می‌توان از طریق deleteNotificationChannel حذف کرد — تمام اعلان‌های آن از تاریخچه حذف می‌شوند. کاربر را از طریق رابط برنامه از مهاجرت مطلع کنید تا تنظیمات خود را از دست ندهد.

گروه‌های کانال (NotificationChannelGroup)

NotificationChannelGroup چند کانال را در یک گروه بصری در رابط تنظیمات Android ترکیب می‌کند. گروه‌ها به کاربر کمک می‌کنند تا زمانی که برنامه از 5+ کانال استفاده می‌کند جهت‌یابی کند: مثلاً “اجتماعی”، “سیستمی”، “بازاریابی”.

گروه از طریق createNotificationChannelGroup ایجاد می‌شود و هنگام ایجاد کانال از طریق متد setGroup به آن منتقل می‌شود. حذف گروه همچنین تمام کانال‌های آن را حذف می‌کند. هر کانال فقط می‌تواند به یک گروه تعلق داشته باشد.

در عمل، گروه‌های کانال برای برنامه‌هایی با بیش از 3 کانال توصیه می‌شوند. آنها پیمایش در تنظیمات را ساده‌تر می‌کنند و احتمال اینکه کاربر بدون درک لیست کانال‌ها همه اعلان‌ها را یکباره غیرفعال کند کاهش می‌دهند.

نمونه ایجاد گروه کانال

گروه از طریق createNotificationChannelGroup با ID یکتا و نام ایجاد می‌شود. سپس هر کانال از طریق متد setGroup به گروه متصل می‌شود. در تنظیمات سیستم، گروه به صورت بخشی با عنوان نمایش داده می‌شود که زیر آن تمام کانال‌های این گروه قرار دارند. اگر گروه حذف شود، تمام کانال‌های آن نیز به طور خودکار توسط سیستم بدون امکان بازیابی حذف می‌شوند.

الگوهای طراحی کانال

طراحی صحیح کانال‌های اعلان مستقیماً بر تجربه کاربر و retention تأثیر می‌گذارد. الگوی اصلی — سه سطح اهمیت: کانال بحرانی (IMPORTANCE_HIGH) برای پیام‌ها و تماس‌ها، استاندارد (IMPORTANCE_DEFAULT) برای اعلان‌های عمومی و آرام (IMPORTANCE_LOW) برای بازاریابی و اخبار. چنین درجه‌بندی به کاربر انتخاب قابل فهمی بدون بار اضافی می‌دهد.

الگوی دوم — کانال بر اساس ماژول عملکردی. هر ماژول بزرگ برنامه (چت، سفارشات، فید، بازاریابی) کانال خود را دریافت می‌کند. اگر ماژول‌ها بیش از 5 عدد باشند، آنها را در NotificationChannelGroup ترکیب کنید. در تنظیمات سیستم، گروه به صورت بخشی با عناصر قابل پنهان نمایش داده می‌شود — این کار پیمایش را ساده می‌کند.

الگوی سوم — کانال برای توسعه‌دهنده. یک کانال جداگانه با IMPORTANCE_MIN برای اعلان‌های اشکال‌زدایی و سرویس ایجاد کنید. کاربران آنها را در پرده نخواهند دید، اما توسعه‌دهنده می‌تواند لاگ‌ها را از طریق adb تحلیل کند. در Production این کانال را می‌توان حذف یا از طریق Intent از رابط کاربری پنهان کرد.

الگوی چهارم — بازخورد درباره کانال‌ها. به کاربر در رابط نشان دهید چه کانال‌هایی فعال هستند و importance فعلی آنها چقدر است. در Android 8+ می‌توان وضعیت کانال را از طریق getNotificationChannel دریافت کرد و اگر کانال غیرفعال است به کاربر پیشنهاد تغییر تنظیمات داد. این به ویژه برای عملکردهای حیاتی برنامه مهم است.

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

اگر در Android 8+ کانال ایجاد نشود چه اتفاقی می‌افتد؟

اعلان نمایش داده نمی‌شود نه در پرده و نه در سایه. سیستم فراخوانی notify() را بی‌صدا نادیده می‌گیرد. استثناها: هنگام استفاده از NotificationCompat کتابخانه یک کانال پیش‌فرض ایجاد می‌کند اما importance آن همیشه DEFAULT است. توصیه می‌شود همیشه کانال‌های خود را ایجاد کنید.

آیا می‌توان کانال را پس از ایجاد تغییر داد؟

می‌توان نام، توضیحات و صدای کانال را تغییر داد. Importance قابل تغییر نیست — این تصمیم توسط سیستم از توسعه‌دهنده محافظت می‌شود. اگر نیاز به افزایش اهمیت دارید — یک کانال جدید با ID دیگر ایجاد کنید و از آن برای اعلان‌های جدید استفاده کنید. کاربر می‌تواند importance را در هر لحظه تغییر دهد.

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

از getNotificationChannel استفاده کنید و importance را بررسی کنید: اگر مقدار برابر IMPORTANCE_NONE باشد، کانال غیرفعال است. همچنین می‌توان تنظیمات سیستم کانال را از طریق Intent باز کرد: Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS با پارامترهای app_package و channel_id.

چند کانال می‌توان در یک برنامه ایجاد کرد؟

هیچ محدودیتی وجود ندارد — Android محدودیتی برای تعداد کانال‌ها تعیین نمی‌کند. با این حال توصیه می‌شود بیش از 5–10 کانال ایجاد نکنید تا کاربر با انتخاب بیش از حد مواجه نشود. حداقل بهینه 2–3 کانال است: اعلان‌های بحرانی، معمولی و بازاریابی.

آیا کانال‌ها در Android 7 و پایین‌تر کار می‌کنند؟

در Android 7.1 (API 25) و پایین‌تر کانال‌ها پشتیبانی نمی‌شوند. کلاس NotificationChannel فقط از API 26 در دسترس است. برای سازگاری با عقب از NotificationCompat استفاده کنید و ایجاد کانال را در شرط if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) قرار دهید.

خلاصه

  • Notification Channel — مکانیسم گروه‌بندی اعلان‌های Android 8+، الزامی برای نمایش
  • Importance — سطح از NONE تا HIGH، صدا، heads-up و قابلیت دیدن در پرده را تعیین می‌کند
  • مدیریت — کاربر می‌تواند importance و صدای کانال را در هر لحظه تغییر دهد
  • ایجاد — کانال از طریق NotificationManager.createNotificationChannel یک بار ایجاد می‌شود
  • تغییرناپذیری importance — توسعه‌دهنده نمی‌تواند پس از ایجاد کانال اهمیت را افزایش دهد
  • گروه‌ها — NotificationChannelGroup کانال‌ها را برای پیمایش راحت در تنظیمات ترکیب می‌کند
  • سازگاری — در Android 7- از NotificationCompat با بررسی نسخه SDK استفاده کنید

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

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

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

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