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

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

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

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

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

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

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

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

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

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

مستوى الأهمية المرئي للمستخدم الأهمية (Android 8.0 والإصدارات الأحدث) الأولوية (الإصدار 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، أنت لا يمكنك تغيير مستوى الأهمية. ومع ذلك، يمكن للمستخدم تغيير والتفضيلات لقنوات تطبيقك في أي وقت.

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

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

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

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

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