إنشاء قنوات الإشعارات وإدارتها

بدءًا من الإصدار Android 8.0 (المستوى 26 من واجهة برمجة التطبيقات)، يجب تخصيص كل الإشعارات إلى قناة معيّنة. في كل قناة، يمكنك ضبط السلوك المرئي والسمعي الذي يتم تطبيقه على كل الإشعارات في تلك القناة. ويمكن للمستخدمين تغيير هذه الإعدادات وتحديد قنوات الإشعارات من تطبيقك التي يمكن أن تكون متداخلة أو مرئية.

يمكنك مشاهدة الفيديو التالي للحصول على نظرة عامة على القنوات وميزات الإشعارات الأخرى في Android 8.0.

تتوفر إعدادات المستخدم لقنوات الإشعارات لكل تطبيق في إعدادات النظام، كما هو موضح في الشكل 1.

الشكل 1. إعدادات الإشعارات لتطبيق "الساعة" وإحدى القنوات التابعة له.

بعد إنشاء قناة إشعارات، لا يمكنك تغيير سلوكيات الإشعارات. ويكون لدى المستخدم تحكم كامل في هذه المرحلة. مع ذلك، يبقى بإمكانك تغيير اسم القناة ووصفها.

أنشئ قناة لكل نوع من الإشعارات التي تحتاج إلى إرسالها. يمكنك أيضًا إنشاء قنوات إشعارات تعكس الخيارات التي أجراها المستخدمون. على سبيل المثال، يمكنك إعداد قنوات إشعارات منفصلة لكل مجموعة محادثة أنشأها مستخدم في تطبيق مراسلة.

عندما تستهدف الإصدار Android 8.0 (المستوى 26 لواجهة برمجة التطبيقات) أو إصدارًا أحدث، عليك تنفيذ قناة واحدة أو أكثر للإشعارات. إذا تم ضبط targetSdkVersion على 25 أو أقل، وعندما يعمل تطبيقك على الإصدار Android 8.0 (المستوى 26 لواجهة برمجة التطبيقات) أو أعلى، سيعمل التطبيق نفسه على الأجهزة التي تعمل بالإصدار 7.1 من نظام التشغيل Android (المستوى 25 من واجهة برمجة التطبيقات) أو الإصدارات الأقدم.

إنشاء قناة إشعارات

لإنشاء قناة إشعارات، اتبع الخطوات التالية:

  1. أنشِئ عنصر NotificationChannel يتضمّن معرّف قناة فريدًا واسمًا مرئيًا للمستخدم ومستوى أهمية.

  2. يمكنك اختياريًا تحديد الوصف الذي يظهر للمستخدم في إعدادات النظام من خلال إضافة setDescription().

  3. سجّل قناة الإشعارات من خلال تمريرها إلى createNotificationChannel().

يوضّح المثال التالي كيفية إنشاء قناة إشعارات وتسجيلها:

Kotlin

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)
}

Java

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 (المستوى 25 لواجهة برمجة التطبيقات) أو الإصدارات الأقدم، عليك أيضًا طلب الرمز setPriority() لكل إشعار، باستخدام أولوية ثابتة من فئة NotificationCompat.

يتم ربط ثابتي الأهمية (NotificationManager.IMPORTANCE_*) والأولوية (NotificationCompat.PRIORITY_*) بخيارات الأهمية المرئية للمستخدم، كما هو موضح في الجدول التالي.

مستوى الأهمية المرئي للمستخدم الأهمية (الإصدار Android 8.0 والإصدارات الأحدث) الأولوية (Android 7.1 والإصدارات الأقدم)
عاجل
يصدر صوتًا ويظهر كإشعار تنبيه.
IMPORTANCE_HIGH PRIORITY_HIGH أو PRIORITY_MAX
عالي
تُصدر صوتًا.
IMPORTANCE_DEFAULT PRIORITY_DEFAULT
متوسط
لا يصدر أي صوت.
IMPORTANCE_LOW PRIORITY_LOW
منخفض
لا يُصدر صوتًا ولا يظهر في شريط الحالة.
IMPORTANCE_MIN PRIORITY_MIN
بدون صوت
لا يُصدر هذا الخيار أي صوت ولا يظهر في شريط الحالة أو مركز الإشعارات.
IMPORTANCE_NONE N/A

تظهر جميع الإشعارات، بغض النظر عن أهميتها، في مواقع واجهة المستخدم الخاصة بالنظام والتي لا تقاطع تجربة المشاهدة، كما هو الحال في درج الإشعارات، مثلاً على شكل شارة على رمز مشغّل التطبيقات، ومع ذلك يمكنك تعديل مظهر شارة الإشعار.

بعد إرسال القناة إلى NotificationManager، لن تتمكن من تغيير مستوى الأهمية. ومع ذلك، يمكن للمستخدم تغيير تفضيلاته لقنوات تطبيقك في أي وقت.

للحصول على معلومات حول اختيار مستوى أولوية مناسب، راجع "مستويات الأولوية" في دليل تصميم الإشعارات.

قراءة إعدادات قناة الإشعارات

يمكن للمستخدمين تعديل إعدادات قنوات الإشعارات، بما في ذلك سلوكيات مثل الاهتزاز وصوت التنبيه. إذا كنت تريد معرفة الإعدادات التي يطبقها المستخدم على قنوات الإشعارات، فاتبع هذه الخطوات:

  1. احصل على الكائن NotificationChannel من خلال استدعاء getNotificationChannel() أو getNotificationChannels().

  2. طلب البحث عن إعدادات خاصة بالقناة، مثلاً getVibrationPattern() وgetSound() وgetImportance()

إذا اكتشفت إعداد قناة تعتقد أنه يعيق السلوك المقصود في تطبيقك، يمكنك أن تقترح على المستخدم تغييره، واتخاذ إجراء لفتح إعدادات القناة، كما هو موضّح في القسم التالي.

فتح إعدادات قناة الإشعارات

بعد إنشاء قناة إشعارات، لا يمكنك تغيير السلوكيات المرئية والسمعية لقناة الإشعارات آليًا. يمكن للمستخدم وحده تغيير سلوكيات القناة من إعدادات النظام. لمنح المستخدمين سهولة الوصول إلى إعدادات الإشعارات هذه، أضف عنصرًا في واجهة مستخدم الإعدادات في التطبيق يفتح إعدادات النظام هذه.

يمكنك فتح إعدادات النظام لقنوات الإشعارات باستخدام Intent التي تستخدم الإجراء ACTION_CHANNEL_NOTIFICATION_SETTINGS.

على سبيل المثال، يوضّح الرمز النموذجي التالي كيفية إعادة توجيه مستخدم إلى إعدادات قناة إشعارات:

Kotlin

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

Java

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(). يوضح الرمز النموذجي التالي كيفية إكمال هذه العملية:

Kotlin

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

Java

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

إنشاء مجموعة قنوات للإشعارات

إذا أردت تنظيم مظهر قنواتك في واجهة مستخدم الإعدادات، يمكنك إنشاء مجموعات قنوات. هذه فكرة جيدة عندما يدعم تطبيقك حسابات مستخدمين متعددة، مثل الملفات الشخصية للعمل، لأنها تتيح لك إنشاء مجموعة قنوات إشعارات لكل حساب. بهذه الطريقة، يمكن للمستخدمين بسهولة تحديد قنوات إشعار متعددة لها أسماء متطابقة والتحكم فيها.

الشكل 2. إعدادات قناة الإشعارات مع مجموعات الحسابات الشخصية وحسابات العمل.

على سبيل المثال، قد يتضمن تطبيق شبكات اجتماعية دعمًا للحسابات الشخصية وحسابات العمل. في هذا السيناريو، قد يتطلب كل حساب قنوات إشعارات متعددة ذات وظائف وأسماء متطابقة، مثل ما يلي:

  • حساب شخصي مرتبط بقناتَين:

    • تعليقان جديدان

    • اقتراحات المشاركة

  • حساب أعمال مع قناتَين:

    • تعليقان جديدان

    • اقتراحات المشاركة

يتيح تنظيم قنوات الإشعارات في مجموعات لكل حساب للمستخدمين التمييز بينها.

تتطلّب كل مجموعة قنوات للإشعارات معرّفًا يجب أن يكون فريدًا ضمن حزمتك، بالإضافة إلى اسم يظهر للمستخدم. يوضّح المقتطف التالي كيفية إنشاء مجموعة قنوات للإشعارات.

Kotlin

// 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))

Java

// 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 جديد بالمجموعة.

بعد إرسال القناة إلى مدير الإشعارات، لا يمكنك تغيير الارتباط بين قناة الإشعار والمجموعة.