اعتبارًا من الإصدار Android 8.0 (مستوى واجهة برمجة التطبيقات 26)، يجب تخصيص جميع الإشعارات لقناة معيّنة. يمكنك ضبط السلوك المرئي والسمعي لكل قناة، والذي يتم تطبيقه على جميع الإشعارات في تلك القناة. يمكن للمستخدمين تغيير هذه الإعدادات وتحديد قنوات الإشعارات من تطبيقك التي يمكن أن تكون متطفلة أو مرئية.
يمكنك مشاهدة الفيديو التالي للحصول على نظرة عامة على القنوات وميزات الإشعارات الأخرى في Android 8.0.
تتوفّر إعدادات المستخدم لقنوات الإشعارات لكل تطبيق في إعدادات النظام، كما هو موضّح في الشكل 1.
بعد إنشاء قناة إشعارات، لا يمكنك تغيير سلوكيات الإشعارات. ويتحكّم المستخدم بشكل كامل في تلك المرحلة. ومع ذلك، لا يزال بإمكانك تغيير اسم القناة ووصفها.
أنشِئ قناة لكل نوع من الإشعارات التي تريد إرسالها. يمكنك أيضًا إنشاء قنوات إشعارات لتعكس الخيارات التي حدّدها المستخدمون. على سبيل المثال، يمكنك إعداد قنوات إشعارات منفصلة لكل مجموعة محادثات ينشئها المستخدم في تطبيق مراسلة.
عند استهداف الإصدار 8.0 من نظام التشغيل Android (المستوى 26 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث، يجب تنفيذ قناة واحدة أو أكثر من قنوات الإشعارات. إذا تم ضبط targetSdkVersion على 25 أو أقل، فعند تشغيل تطبيقك على Android 8.0 (مستوى واجهة برمجة التطبيقات 26) أو إصدار أحدث، سيعمل بالطريقة نفسها التي يعمل بها على الأجهزة التي تعمل بنظام التشغيل Android 7.1 (مستوى واجهة برمجة التطبيقات 25) أو إصدار أقدم.
إنشاء قناة إشعارات
لإنشاء قناة إشعارات، اتّبِع الخطوات التالية:
أنشئ عنصر
NotificationChannelباستخدام معرّف قناة فريد واسم مرئي للمستخدم ومستوى الأهمية.يمكنك اختياريًا تحديد الوصف الذي يظهر للمستخدم في إعدادات النظام باستخدام
setDescription().سجِّل قناة الإشعارات من خلال تمريرها إلى
createNotificationChannel().
يوضّح المثال التالي كيفية إنشاء قناة إشعارات وتسجيلها:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // Create the NotificationChannel. 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 = context.getSystemService(NotificationManager::class.java) notificationManager?.createNotificationChannel(mChannel) }
لا تؤدي إعادة إنشاء قناة إشعارات حالية بقيمها الأصلية إلى تنفيذ أي عملية، لذا من الآمن استدعاء هذا الرمز عند بدء تشغيل التطبيق.
تستخدم جميع الإشعارات المنشورة على قناة معيّنة تلقائيًا السلوكيات المرئية والسمعية المحدّدة حسب مستوى الأهمية من الفئة NotificationManagerCompat، مثل IMPORTANCE_DEFAULT أو IMPORTANCE_HIGH. راجِع القسم التالي للحصول على مزيد من المعلومات حول
مستويات الأهمية.
إذا أردت تخصيص سلوكيات الإشعارات التلقائية لقناتك بشكل أكبر،
يمكنك استدعاء طرق مثل enableLights() وsetLightColor()
وsetVibrationPattern() على NotificationChannel. يُرجى العِلم أنّه بعد إنشاء القناة، لا يمكنك تغيير هذه الإعدادات، ويكون للمستخدم التحكّم النهائي في ما إذا كانت هذه السلوكيات نشطة.
يمكنك أيضًا إنشاء قنوات إشعارات متعددة في عملية واحدة من خلال
استدعاء createNotificationChannels().
ضبط مستوى الأهمية
تؤثر أهمية القناة في مستوى مقاطعة جميع الإشعارات المنشورة في
القناة. حدِّدها في دالة الإنشاء NotificationChannel باستخدام أحد مستويات الأهمية الخمسة، والتي تتراوح من IMPORTANCE_NONE(0) إلى IMPORTANCE_HIGH(4).
لإتاحة الأجهزة التي تعمل بالإصدار 7.1 من نظام التشغيل Android (المستوى 25 لواجهة برمجة التطبيقات) أو الإصدارات الأقدم، يجب أيضًا
استدعاء setPriority() لكل إشعار، باستخدام ثابت الأولوية من
فئة NotificationCompat.
يتم ربط ثوابت الأهمية (NotificationManager.IMPORTANCE_*) والأولوية (NotificationCompat.PRIORITY_*) بخيارات الأهمية التي تظهر للمستخدم، كما هو موضّح في الجدول التالي.
| مستوى الأهمية المرئي للمستخدم | الأهمية (الإصدار 8.0 من نظام التشغيل Android والإصدارات الأحدث) | الأولوية (الإصدار 7.1 من نظام التشغيل Android والإصدارات الأقدم) |
|---|---|---|
| مهمة عاجلة يصدر صوت ويظهر كتنبيه. |
IMPORTANCE_HIGH |
PRIORITY_HIGH أو PRIORITY_MAX |
| مهمة يصدر صوت. |
IMPORTANCE_DEFAULT |
PRIORITY_DEFAULT |
| متوسط لا يصدر أي صوت. |
IMPORTANCE_LOW |
PRIORITY_LOW |
| منخفضة لا يصدر صوت ولا يظهر في شريط الحالة. |
IMPORTANCE_MIN |
PRIORITY_MIN |
| بدون صوت لا يصدر أي صوت ولا يظهر في شريط الحالة أو لوحة الإشعارات. |
IMPORTANCE_NONE |
N/A |
تظهر جميع الإشعارات، بغض النظر عن أهميتها، في أماكن غير مزعجة في واجهة مستخدم النظام، مثل درج الإشعارات وكشارة على رمز مشغّل التطبيقات، مع أنّه يمكنك تعديل مظهر شارة الإشعار.
بعد إرسال القناة إلى NotificationManager، لا يمكنك تغيير
مستوى الأهمية. ومع ذلك، يمكن للمستخدم تغيير إعداداته المفضّلة لقنوات
تطبيقك في أي وقت.
للحصول على معلومات حول اختيار مستوى الأولوية المناسب، يُرجى الاطّلاع على "مستويات الأولوية" في دليل تصميم الإشعارات.
قراءة إعدادات قناة الإشعارات
يمكن للمستخدمين تعديل إعدادات قنوات الإشعارات، بما في ذلك السلوكيات مثل الاهتزاز وصوت التنبيه. إذا أردت معرفة الإعدادات التي يطبّقها المستخدم على قنوات الإشعارات، اتّبِع الخطوات التالية:
احصل على الكائن
NotificationChannelمن خلال استدعاءgetNotificationChannel()أوgetNotificationChannels().يمكنك الاستعلام عن إعدادات قناة معيّنة، مثل
getVibrationPattern()وgetSound()وgetImportance().
إذا رصدت إعدادًا للقناة تعتقد أنّه يمنع السلوك المقصود لتطبيقك، يمكنك اقتراح أن يغيّره المستخدم وتقديم إجراء لفتح إعدادات القناة، كما هو موضّح في القسم التالي.
فتح إعدادات قناة الإشعارات
بعد إنشاء قناة إشعارات، لا يمكنك تغيير سلوكياتها المرئية والسمعية آليًا. يمكن للمستخدم فقط تغيير سلوكيات القناة من إعدادات النظام. لتوفير وصول سريع للمستخدمين إلى إعدادات الإشعارات هذه، يمكنك إضافة عنصر في واجهة مستخدم إعدادات تطبيقك يفتح إعدادات النظام هذه.
يمكنك فتح إعدادات النظام لقنوات الإشعارات باستخدام
Intent يستخدم الإجراء ACTION_CHANNEL_NOTIFICATION_SETTINGS.
على سبيل المثال، يوضّح الرمز النموذجي التالي كيفية إعادة توجيه المستخدم إلى إعدادات قناة الإشعارات:
val intent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS).apply { putExtra(Settings.EXTRA_APP_PACKAGE, context.packageName) putExtra(Settings.EXTRA_CHANNEL_ID, CHANNEL_ID) } Button(onClick = { context.startActivity(intent) }) { Text("Open Channel Settings") }
يُرجى العِلم أنّ الغرض يتطلّب عنصرَين إضافيَّين يحدّدان اسم حزمة تطبيقك (المعروف أيضًا باسم معرّف التطبيق) والقناة المطلوب تعديلها.
حذف قناة إشعارات
يمكنك حذف قنوات الإشعارات من خلال استدعاء
deleteNotificationChannel().
يوضّح الرمز النموذجي التالي كيفية إكمال هذه العملية:
val notificationManager = ContextCompat.getSystemService<NotificationManager>(context, NotificationManager::class.java) notificationManager?.deleteNotificationChannel(channelId)
إنشاء مجموعة قنوات إشعارات
إذا أردت تنظيم مظهر قنواتك بشكل أكبر في واجهة مستخدم الإعدادات، يمكنك إنشاء مجموعات قنوات. هذه فكرة جيدة عندما يدعم تطبيقك حسابات مستخدمين متعددة لأنها تتيح لك إنشاء مجموعة قنوات إشعارات لكل حساب. تساعد مجموعات القنوات المستخدمين في التمييز بين قنوات الإشعارات المتعددة التي تحمل أسماء متطابقة والتحكّم فيها.
على سبيل المثال، قد يتضمّن تطبيق شبكة اجتماعية دعمًا لحسابات العمل والحسابات الشخصية. في هذا السيناريو، قد يتطلّب كل حساب قنوات إشعارات متعدّدة ذات وظائف وأسماء متطابقة، مثل ما يلي:
حساب شخصي يتضمّن قناتَين:
تعليقات جديدة
اقتراحات بشأن المنشورات
حساب تجاري يضم قناتَين:
تعليقات جديدة
اقتراحات بشأن المنشورات
يساعد تنظيم قنوات الإشعارات في مجموعات لكل حساب المستخدمين في التمييز بينها.
تتطلّب كل مجموعة قنوات إشعارات معرّفًا يجب أن يكون فريدًا ضمن الحزمة، بالإضافة إلى اسم يظهر للمستخدم. يوضّح المقتطف التالي كيفية إنشاء مجموعة قنوات إشعارات.
fun createNotificationChannelGroup(context: Context, groupId: String, groupName: String) { val notificationManager = ContextCompat.getSystemService(context, NotificationManager::class.java) notificationManager?.createNotificationChannelGroup(NotificationChannelGroup(groupId, groupName)) }
بعد إنشاء مجموعة جديدة، يمكنك استدعاء
setGroup()
لربط عنصر NotificationChannel جديد بالمجموعة.
بعد إرسال القناة إلى مدير الإشعارات، لا يمكنك تغيير الربط بين قناة الإشعارات والمجموعة.