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

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

ویدیوی زیر را برای مروری بر کانال ها و سایر ویژگی های اعلان در اندروید 8.0 مشاهده کنید.

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

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

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

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

هنگامی که Android 8.0 (سطح API 26) یا بالاتر را هدف قرار می دهید، باید یک یا چند کانال اعلان را اجرا کنید. اگر targetSdkVersion شما روی 25 یا پایین‌تر تنظیم شده باشد، وقتی برنامه شما روی Android 8.0 (سطح API 26) یا بالاتر اجرا می‌شود، مانند دستگاه‌های دارای Android 7.1 (سطح API 25) یا پایین‌تر عمل می‌کند.

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

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

  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)
}
جاوا
private void createNotificationChannel() {
    // Create the NotificationChannel, but only on API 26+ because
    // the NotificationChannel class is not in the Support Library.
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        CharSequence name = getString(R.string.channel_name);
        String description = getString(R.string.channel_description);
        int importance = NotificationManager.IMPORTANCE_DEFAULT;
        NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);
        channel.setDescription(description);
        // Register the channel with the system. You can't change the importance
        // or other notification behaviors after this.
        NotificationManager notificationManager = getSystemService(NotificationManager.class);
        notificationManager.createNotificationChannel(channel);
    }
}

ایجاد مجدد یک کانال اعلان موجود با مقادیر اصلی آن هیچ عملیاتی را انجام نمی دهد، بنابراین هنگام راه اندازی یک برنامه می توانید با این کد تماس بگیرید.

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

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

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

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

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

برای پشتیبانی از دستگاه‌هایی که دارای Android 7.1 (سطح API 25) یا پایین‌تر هستند، باید setPriority() برای هر اعلان با استفاده از یک ثابت اولویت از کلاس NotificationCompat فراخوانی کنید.

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

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

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

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

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

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

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

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

  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)
جاوا
Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS);
intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName());
intent.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)
جاوا
NotificationManager notificationManager =
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// The id of the channel.
String id = "my_channel_01";
notificationManager.deleteNotificationChannel(id);
یک گروه کانال اطلاع رسانی ایجاد کنید

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

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

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

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

    • نظرات جدید

    • توصیه ها را پست کنید

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

    • نظرات جدید

    • توصیه ها را پست کنید

سازماندهی کانال های اعلان در گروه های هر حساب به کاربران اجازه می دهد بین آنها تمایز قائل شوند.

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

کاتلین
// 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
notificationManager.createNotificationChannelGroup(NotificationChannelGroup(groupId, groupName))
جاوا
// The id of the group.
String groupId = "my_group_01";
// The user-visible name of the group.
CharSequence groupName = getString(R.string.group_name);
NotificationManager notificationManager =
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.createNotificationChannelGroup(new NotificationChannelGroup(groupId, groupName));

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

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