ایجاد و مدیریت کانال های اطلاع رسانی

از اندروید ۸.۰ (سطح API ۲۶)، همه اعلان‌ها باید به یک کانال اختصاص داده شوند. برای هر کانال، می‌توانید رفتار بصری و صوتی را که برای همه اعلان‌های آن کانال اعمال می‌شود، تنظیم کنید. کاربران می‌توانند این تنظیمات را تغییر دهند و تصمیم بگیرند که کدام کانال‌های اعلان از برنامه شما می‌توانند مزاحم یا قابل مشاهده باشند.

برای مرور کلی کانال‌ها و سایر ویژگی‌های اعلان در اندروید ۸.۰، ویدیوی زیر را تماشا کنید.

تنظیمات کاربر برای کانال‌های اعلان، همانطور که در شکل ۱ نشان داده شده است، برای هر برنامه در تنظیمات سیستم موجود است.

شکل ۱. تنظیمات اعلان برای برنامه ساعت و یکی از کانال‌های آن.

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

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

وقتی اندروید ۸.۰ (سطح API ۲۶) یا بالاتر را هدف قرار می‌دهید، باید یک یا چند کانال اعلان پیاده‌سازی کنید. اگر targetSdkVersion شما روی ۲۵ یا پایین‌تر تنظیم شده باشد، وقتی برنامه شما روی اندروید ۸.۰ (سطح API ۲۶) یا بالاتر اجرا می‌شود، مانند دستگاه‌هایی که اندروید ۷.۱ (سطح API ۲۵) یا پایین‌تر را اجرا می‌کنند، رفتار می‌کند.

ایجاد کانال اطلاع رسانی

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

  1. یک شیء NotificationChannel با شناسه کانال منحصر به فرد، نام قابل مشاهده توسط کاربر و سطح اهمیت بسازید.

  2. به صورت اختیاری، می‌توانید توضیحی را که کاربر در تنظیمات سیستم می‌بیند با استفاده از setDescription() مشخص کنید.

  3. کانال اعلان را با ارسال آن به createNotificationChannel() ثبت کنید.

مثال زیر نحوه ایجاد و ثبت یک کانال اعلان را نشان می‌دهد:

  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
      // Create the NotificationChannel.
      val name = getString(R.string.channel_name)
      val descriptionText = getString(R.string.channel_description)
      val importance = NotificationManager.IMPORTANCE_DEFAULT
      val mChannel = NotificationChannel(CHANNEL_ID, name, importance)
      mChannel.description = descriptionText
      // Register the channel with the system. You can't change the importance
      // or other notification behaviors after this.
      val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
      notificationManager.createNotificationChannel(mChannel)
  }

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

به طور پیش‌فرض، تمام اعلان‌های ارسال شده به یک کانال مشخص، از رفتارهای بصری و صوتی تعریف شده توسط سطح اهمیت از کلاس NotificationManagerCompat ، مانند IMPORTANCE_DEFAULT یا IMPORTANCE_HIGH استفاده می‌کنند. برای اطلاعات بیشتر در مورد سطوح اهمیت ، به بخش بعدی مراجعه کنید.

اگر می‌خواهید رفتارهای پیش‌فرض اعلان کانال خود را بیشتر سفارشی کنید، می‌توانید متدهایی مانند enableLights() ، setLightColor() و setVibrationPattern() را در NotificationChannel فراخوانی کنید. به یاد داشته باشید که پس از ایجاد کانال، نمی‌توانید این تنظیمات را تغییر دهید و کاربر کنترل نهایی بر فعال بودن یا نبودن این رفتارها را دارد.

همچنین می‌توانید با فراخوانی تابع createNotificationChannels() چندین کانال اعلان را در یک عملیات واحد ایجاد کنید.

سطح اهمیت را تنظیم کنید

اهمیت کانال بر سطح وقفه همه اعلان‌های ارسال شده در کانال تأثیر می‌گذارد. آن را در سازنده NotificationChannel با استفاده از یکی از پنج سطح اهمیت، از IMPORTANCE_NONE(0) تا IMPORTANCE_HIGH(4) تعیین کنید.

برای پشتیبانی از دستگاه‌هایی که اندروید ۷.۱ (سطح API ۲۵) یا پایین‌تر را اجرا می‌کنند، باید برای هر اعلان، با استفاده از یک ثابت اولویت از کلاس NotificationCompat تابع setPriority() نیز فراخوانی کنید.

ثابت‌های اهمیت ( NotificationManager.IMPORTANCE_* ) و اولویت ( NotificationCompat.PRIORITY_* ) به گزینه‌های اهمیت قابل مشاهده توسط کاربر، همانطور که در جدول زیر نشان داده شده است، نگاشت می‌شوند.

سطح اهمیت قابل مشاهده توسط کاربر اهمیت (اندروید ۸.۰ و بالاتر) اولویت (اندروید ۷.۱ و پایین‌تر)
فوری
صدایی ایجاد می‌کند و به عنوان یک اعلان هشدار ظاهر می‌شود.
IMPORTANCE_HIGH PRIORITY_HIGH یا PRIORITY_MAX
بالا
صدایی ایجاد می‌کند.
IMPORTANCE_DEFAULT PRIORITY_DEFAULT
متوسط
هیچ صدایی نمی‌دهد.
IMPORTANCE_LOW PRIORITY_LOW
کم
صدایی تولید نمی‌کند و در نوار وضعیت نمایش داده نمی‌شود.
IMPORTANCE_MIN PRIORITY_MIN
هیچکدام
هیچ صدایی نمی‌دهد و در نوار وضعیت یا سایه نمایش داده نمی‌شود.
IMPORTANCE_NONE N/A

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

پس از ارسال کانال به NotificationManager ، دیگر نمی‌توانید سطح اهمیت آن را تغییر دهید. با این حال، کاربر می‌تواند تنظیمات برگزیده خود را برای کانال‌های برنامه شما در هر زمان تغییر دهد.

برای اطلاعات بیشتر در مورد انتخاب سطح اولویت مناسب، به بخش «سطوح اولویت» در راهنمای طراحی اعلان‌ها مراجعه کنید.

تنظیمات کانال اعلان را بخوانید

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

  1. با فراخوانی getNotificationChannel() یا getNotificationChannels() شیء NotificationChannel را دریافت کنید.

  2. تنظیمات کانال خاص مانند getVibrationPattern() ، getSound() و getImportance() را پرس و جو کنید.

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

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

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

شما می‌توانید تنظیمات سیستم را برای کانال‌های اعلان با Intent ای که از اکشن ACTION_CHANNEL_NOTIFICATION_SETTINGS استفاده می‌کند، باز کنید.

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

  val intent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS).apply {
      putExtra(Settings.EXTRA_APP_PACKAGE, packageName)
      putExtra(Settings.EXTRA_CHANNEL_ID, myNotificationChannel.getId())
  }
  startActivity(intent)

توجه داشته باشید که اینتنت به دو مورد اضافی نیاز دارد که نام بسته برنامه شما (که با نام شناسه برنامه نیز شناخته می‌شود) و کانال مورد نظر برای ویرایش را مشخص می‌کنند.

حذف کانال اعلان

شما می‌توانید کانال‌های اعلان را با فراخوانی تابع deleteNotificationChannel() حذف کنید. کد نمونه زیر نحوه تکمیل این فرآیند را نشان می‌دهد:

  // The id of the channel.
  val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
  val id: String = "my_channel_01"
  notificationManager.deleteNotificationChannel(id)

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

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

شکل ۲. تنظیمات کانال اعلان با گروه‌هایی برای حساب‌های شخصی و کاری.

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

  • یک حساب شخصی با دو کانال:

    • نظرات جدید

    • توصیه‌های پست

  • یک حساب تجاری با دو کانال:

    • نظرات جدید

    • توصیه‌های پست

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

هر گروه کانال اعلان به یک شناسه (ID) نیاز دارد که باید در بسته شما منحصر به فرد باشد، و همچنین یک نام قابل مشاهده توسط کاربر. قطعه کد زیر نحوه ایجاد یک گروه کانال اعلان را نشان می‌دهد.

  // The id of the group.
  val groupId = "my_group_01"
  // The user-visible name of the group.
  val groupName = getString(R.string.group_name)
  val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
  <b>notificationManager.createNotificationChannelGroup(NotificationChannelGroup(groupId, groupName))</b>

پس از ایجاد یک گروه جدید، می‌توانید تابع setGroup() را برای مرتبط کردن یک شیء NotificationChannel جدید با گروه فراخوانی کنید.

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