بازگشت به وبلاگ

Notification Channel در اندروید چیست؟ آموزش جامع ایجاد و مدیریت کانال اعلان برای پوش نوتیفیکیشن

Notification Channel در اندروید چیست؟ آموزش جامع ایجاد و مدیریت کانال اعلان برای پوش نوتیفیکیشن

در دنیای اپلیکیشن‌های موبایل، اعلان‌ها (Notifications) نقش حیاتی در ارتباط با کاربران دارند. اما اگر اعلان‌ها به درستی مدیریت نشوند، نه تنها مفید نیستند، بلکه می‌توانند آزاردهنده شده و باعث حذف اپلیکیشن شوند. اندروید برای حل این مشکل، سیستمی به نام Notification Channel (کانال اعلان) معرفی کرده است. در این مقاله جامع، به زبان ساده و با مثال‌های عملی، بررسی می‌کنیم که کانال اعلان چیست، چرا مهم است و چگونه باید آن را برای پوش نوتیفیکیشن تنظیم کنید.

فهرست مطالب

Notification Channel چیست؟

Notification Channel یا کانال اعلان، یک قابلیت کلیدی در اندروید 8.0 (API level 26) به بعد است که به توسعه‌دهندگان اجازه می‌دهد اعلان‌های برنامه را به دسته‌های جداگانه تقسیم کنند. هر کانال نمایانگر یک نوع اعلان است (مثلاً «پیام‌های جدید»، «یادآوری‌ها»، «پیشنهادهای ویژه») و کاربر می‌تواند تنظیمات هر کانال را به طور مستقل کنترل کند. به عبارت ساده، به جای اینکه کاربر فقط بتواند همه اعلان‌های برنامه را فعال یا غیرفعال کند، می‌تواند برای هر نوع اعلان به صورت جداگانه تصمیم بگیرد که آیا می‌خواهد آن را دریافت کند یا نه، و چگونه نمایش داده شود.

برای درک بهتر، فرض کنید اپلیکیشن فروشگاهی دارید. شما می‌خواهید اعلان‌های «سفارش جدید»، «تخفیف‌ها» و «اخبار» را ارسال کنید. با استفاده از Notification Channel، می‌توانید سه کانال مجزا بسازید. سپس کاربر می‌تواند کانال «تخفیف‌ها» را بی‌صدا کند یا کاملاً غیرفعال کند، اما هنوز اعلان‌های «سفارش جدید» را دریافت کند. این یعنی کنترل بیشتر برای کاربر و تعامل بهتر با اپلیکیشن شما.

چرا Notification Channel اهمیت دارد؟

اهمیت Notification Channel فراتر از یک قابلیت اختیاری است. در ادامه به دلایل اصلی اهمیت آن اشاره می‌کنیم:

۱. تجربه کاربری بهتر

کاربران امروزی اعلان‌های مزاحم را تحمل نمی‌کنند. با کانال‌های اعلان، کاربر می‌تواند اعلان‌های بی‌ربط را خاموش کند و فقط اعلان‌های مهم را دریافت کند. این به کاهش نرخ حذف اپلیکیشن و افزایش رضایت کاربر کمک می‌کند.

۲. کنترل دقیق‌تر کاربر

در نسخه‌های قبل از اندروید 8، کاربر فقط می‌توانست همه اعلان‌های یک برنامه را با هم مدیریت کند. حالا او می‌تواند برای هر کانال، تنظیمات صدا، لرزش، نمایش در نوار وضعیت، و... را به صورت مستقل تعیین کند.

۳. سازگاری با پوش نوتیفیکیشن

سرویس‌هایی مانند FCM (Firebase Cloud Messaging) یا پوشفا، هنگام ارسال پوش نوتیفیکیشن به اندروید، می‌توانند یک کانال خاص را هدف قرار دهند. اگر برنامه شما کانال‌های مناسبی تعریف کند، می‌توانید پوش‌های تبلیغاتی را در کانال «تبلیغات» و پوش‌های اطلاع‌رسانی مهم را در کانال «هشدارها» ارسال کنید، و کاربران می‌توانند بر اساس علاقه خود آن‌ها را مدیریت کنند.

۴. بهبود عملکرد اپلیکیشن

با استفاده از کانال‌ها، می‌توانید رفتار اعلان‌ها را بهتر پیش‌بینی کنید و از تداخل یا ارسال بیش از حد جلوگیری کنید. این به بهبود عملکرد کلی برنامه کمک می‌کند.

Notification Channel چگونه کار می‌کند؟

سیستم کانال اعلان در اندروید به این صورت کار می‌کند:

  1. توسعه‌دهنده برنامه، یک یا چند کانال را در زمان اجرا (runtime) با استفاده از کلاس NotificationChannel ایجاد می‌کند.
  2. هر کانال دارای یک شناسه یکتا (channel ID)، نام (که به کاربر نمایش داده می‌شود) و سطح اهمیت (importance level) است.
  3. هنگام ارسال اعلان، توسعه‌دهنده باید شناسه کانال را به همراه اعلان مشخص کند.
  4. سیستم عامل، اعلان را در آن کانال قرار می‌دهد و تنظیمات کاربر برای آن کانال را اعمال می‌کند.
  5. کاربر می‌تواند در تنظیمات سیستم، هر کانال را تغییر دهد: صدا، ویبره، نمایش به صورت pop-up و... یا آن را به طور کامل غیرفعال کند.

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

ایجاد Notification Channel در اندروید

برای ایجاد یک کانال اعلان، مراحل زیر را دنبال کنید:

پیش‌نیازها

  • اندروید استودیو و آشنایی با زبان کاتلین یا جاوا
  • حداقل SDK نسخه 26 (Android 8.0) برای استفاده از Notification Channel
  • دستگاه یا شبیه‌ساز با اندروید 8.0 یا بالاتر

مراحل ایجاد

ابتدا یک نمونه از کلاس NotificationChannel بسازید و آن را به سیستم اعلان ثبت کنید. در ادامه یک مثال کاتلین را می‌بینید:


class MyApp : Application() {
    override fun onCreate() {
        super.onCreate()
        createNotificationChannel()
    }

    private fun createNotificationChannel() {
        // ایجاد کانال با شناسه، نام و اهمیت
        val channelId = "general_notifications"
        val channelName = "اعلان‌های عمومی"
        val importance = NotificationManager.IMPORTANCE_DEFAULT
        val channel = NotificationChannel(channelId, channelName, importance)
        
        // تنظیم توضیحات کانال (اختیاری اما توصیه می‌شود)
        channel.description = "اعلان‌های عمومی اپلیکیشن"
        
        // تنظیمات اضافی مانند صدا و ویبره
        val audioAttributes = AudioAttributes.Builder()
            .setUsage(AudioAttributes.USAGE_NOTIFICATION)
            .build()
        channel.setSound(Uri.parse("android.resource://" + packageName + "/" + R.raw.notification_sound), audioAttributes)
        channel.enableVibration(true)
        channel.vibrationPattern = longArrayOf(0, 500, 200, 500)
        
        // ثبت کانال
        val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
        notificationManager.createNotificationChannel(channel)
    }
}

در این کد:

  • channelId: شناسه یکتایی برای کانال است. بعداً برای ارسال اعلان از همین شناسه استفاده می‌کنید.
  • channelName: نامی که کاربر در تنظیمات سیستم می‌بیند.
  • importance: سطح اهمیت. مقادیر شامل IMPORTANCE_HIGH، IMPORTANCE_DEFAULT، IMPORTANCE_LOW و IMPORTANCE_MIN است.

سپس، هنگام ارسال اعلان (مثلاً از طریق FCM یا به صورت محلی)، باید شناسه کانال را به همراه اعلان مشخص کنید:


private fun sendNotification() {
    val builder = NotificationCompat.Builder(this, "general_notifications")
        .setSmallIcon(R.drawable.ic_notification)
        .setContentTitle("عنوان اعلان")
        .setContentText("متن اعلان")
        .setPriority(NotificationCompat.PRIORITY_DEFAULT)
        .setAutoCancel(true)
    
    with(NotificationManagerCompat.from(this)) {
        notify(1, builder.build())
    }
}

ایجاد چند کانال برای انواع مختلف

برای پوش نوتیفیکیشن، معمولاً بهتر است چند کانال داشته باشید. مثلاً:

  • اعلان‌های بحرانی (مثل هشدارهای امنیتی) با اهمیت بالا
  • اعلان‌های عادی (مثل پیام‌های جدید) با اهمیت متوسط
  • اعلان‌های تبلیغاتی با اهمیت پایین

این تنوع به کاربر این امکان را می‌دهد که اعلان‌های تبلیغاتی را خاموش کند اما هشدارهای مهم را دریافت کند.

مدیریت کانال‌ها: اولویت، صدا، ویبره و...

بعد از ایجاد کانال، می‌توانید تنظیمات مختلفی را برای آن اعمال کنید. در ادامه به مهم‌ترین آن‌ها اشاره می‌کنیم.

سطح اهمیت (Importance)

سطح اهمیت تعیین می‌کند که اعلان چگونه نمایش داده شود و آیا صدا و ویبره داشته باشد یا خیر. مقادیر مناسب:

  • IMPORTANCE_HIGH: اعلان به صورت pop-up نمایش داده می‌شود و صدا دارد. مناسب برای هشدارهای مهم.
  • IMPORTANCE_DEFAULT: اعلان صدا دارد و در نوار وضعیت ظاهر می‌شود. مناسب برای پیام‌های معمولی.
  • IMPORTANCE_LOW: اعلان بدون صدا نمایش داده می‌شود. مناسب برای محتوای غیرضروری.
  • IMPORTANCE_MIN: اعلان فقط در نوار وضعیت به صورت آیکون کوچک نمایش داده می‌شود. تقریباً بی‌صدا و بی‌مزاحمت.

توجه: در اندروید 13 (API 33) به بعد، کاربر برای اعلان‌های برنامه دسترسی runtime می‌دهد و این اولویت‌ها ممکن است نادیده گرفته شوند.

صدا و ویبره

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

نشان‌دادن به صورت نقطه‌ای (Badge)

می‌توانید تعیین کنید که آیا اعلان‌های این کانال، نشان (Badge) روی آیکون برنامه بگذارند یا خیر:


channel.setShowBadge(true)

تنظیمات دیگر

علاوه بر موارد بالا، می‌توانید موارد زیر را نیز تنظیم کنید:

  • گروه کانال (Channel Group) برای سازماندهی کانال‌ها
  • مهلت انقضای اعلان
  • رفتار در حالت Do Not Disturb
  • و...

بهترین روش‌های استفاده از Notification Channel

برای اینکه بهترین تجربه را برای کاربران و عملکرد مطلوب را برای برنامه خود داشته باشید، این نکات را دنبال کنید:

۱. تعداد کانال‌ها را متعادل نگه دارید

خیلی کم یا خیلی زیاد بودن کانال‌ها می‌تواند کاربر را سردرگم کند. معمولاً ۳ تا ۵ کانال کافی است. هر کانال باید یک نوع اعلان مشخص را پوشش دهد.

۲. نام‌گذاری واضح و قابل فهم

نام کانال باید برای کاربر واضح باشد. به جای «اعلان‌ها»، از نام‌های توصیفی مانند «پیام‌های جدید» یا «هشدارهای امنیتی» استفاده کنید.

۳. تعیین اهمیت مناسب

برای اعلان‌های تبلیغاتی از اهمیت پایین استفاده کنید و برای اعلان‌های حیاتی از اهمیت بالا. به این ترتیب، کاربر کمترین مزاحمت را احساس می‌کند.

۴. توضیحات کوتاه و مفید

توضیحات کانال را به زبان ساده بنویسید تا کاربر بداند چه اعلان‌هایی دریافت خواهد کرد.

۵. استفاده از Channel Group

اگر کانال‌های زیادی دارید، آن‌ها را در گروه‌ها دسته‌بندی کنید تا کاربر بتواند همه کانال‌های یک گروه را با هم مدیریت کند.

۶. سازگاری با نسخه‌های قدیمی

برای دستگاه‌های با اندروید پایین‌تر از 8، باید fallback داشته باشید. معمولاً از همان کد اولیه استفاده می‌کنید، اما بدون کانال. مثلاً:


if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    // ساخت کانال
} else {
    // ارسال اعلان بدون کانال
}

۷. به کاربر اجازه انتخاب بدهید

اگر اپلیکیشن شما چند نوع اعلان دارد، بهتر است در تنظیمات برنامه، امکان فعال/غیرفعال کردن هر کانال را به کاربر بدهید. این کار می‌تواند در صفحه تنظیمات خود اپلیکیشن انجام شود.

مشکلات رایج و راه‌حل‌ها

برخی مشکلات رایج که هنگام کار با Notification Channel پیش می‌آید را بررسی می‌کنیم.

اعلان نمایش داده نمی‌شود

اگر اعلان شما نمایش داده نمی‌شود، دلایل زیر را بررسی کنید:

  • مطمئن شوید کانال با اهمیت مناسب ایجاد شده است. اگر اهمیت IMPORTANCE_NONE باشد، اعلان اصلا نشان داده نمی‌شود.
  • بررسی کنید که runtime permission برای POST_NOTIFICATIONS (اندروید 13+) را گرفته‌اید.
  • مطمئن شوید کاربر کانال را غیرفعال نکرده باشد.

کاربر نمی‌تواند کانال را ببیند

برای اینکه کاربر بتواند کانال را در تنظیمات ببیند، باید نام و توضیحات مناسبی داشته باشد. همچنین، اگر کانال را بعد از ارسال اولین اعلان با اهمیت NONE بسازید، ممکن است در تنظیمات پنهان شود. بنابراین همیشه کانال را قبل از ارسال اعلان، با اهمیت درست ایجاد کنید.

تغییر تنظیمات کانال بعد از ایجاد

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

سازگاری با FCM

هنگام ارسال پوش نوتیفیکیشن از سرور (مثلاً با پوشفا)، باید شناسه کانال را در پیکربندی اعلان مشخص کنید. در FCM، می‌توانید از پارامتر android_channel_id استفاده کنید. در پوشفا نیز معمولاً می‌توانید کانال مورد نظر را انتخاب کنید.

جمع‌بندی

Notification Channel یک ابزار قدرتمند در اندروید است که به توسعه‌دهندگان کمک می‌کند اعلان‌ها را به صورت معنادار دسته‌بندی کنند و تجربه کاربری بهتری فراهم کنند. با ایجاد کانال‌های مناسب، تعیین اهمیت درست و ارائه توضیحات شفاف، می‌توانید از نرخ بالای غیرفعال‌سازی اعلان‌ها جلوگیری کنید و تعامل کاربران با اپلیکیشن را افزایش دهید. در این مقاله، از مفاهیم پایه تا بهترین روش‌ها و مشکلات رایج را بررسی کردیم.

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