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

بدءًا من Android 7.0 (المستوى 24 من واجهة برمجة التطبيقات)، يمكنك عرض الإشعارات ذات الصلة في مجموعة. على سبيل المثال، إذا كان تطبيقك يعرض إشعارات الرسائل الإلكترونية المُستلَمة، يمكنك وضع جميع الإشعارات للرسائل الإلكترونية الجديدة في المجموعة نفسها كي يتم تصغيرها معًا.

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

الشكل 1: مجموعة إشعارات مصغّرة (أعلى) وموسّعة (أسفل)

استخدِم مجموعات الإشعارات إذا كانت جميع الشروط التالية صحيحة في حالة استخدامك:

  • الإشعارات الفرعية هي إشعارات كاملة ويمكن عرضها بشكل فردي بدون الحاجة إلى ملخّص للمجموعة.

  • وهناك فائدة في عرض إشعارات الطفل بشكل فردي. على سبيل المثال:

    • وهي قابلة للتنفيذ، مع إجراءات خاصة بكل إشعار.

    • تتوفّر المزيد من المعلومات في كل إشعار ليطلع عليها المستخدم.

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

إنشاء مجموعة وإضافة إشعار إليها

لإنشاء مجموعة إشعارات، حدِّد سلسلة معرّف فريدة للمجموعة. بعد ذلك، لكل إشعار تريده في المجموعة، استخدِم الدالة setGroup()، مع تضمين اسم المجموعة. مثلاً:

Kotlin

val GROUP_KEY_WORK_EMAIL = "com.android.example.WORK_EMAIL"

val newMessageNotification = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID)
        .setSmallIcon(R.drawable.new_mail)
        .setContentTitle(emailObject.getSenderName())
        .setContentText(emailObject.getSubject())
        .setLargeIcon(emailObject.getSenderAvatar())
        .setGroup(GROUP_KEY_WORK_EMAIL)
        .build()

Java

String GROUP_KEY_WORK_EMAIL = "com.android.example.WORK_EMAIL";

Notification newMessageNotification = new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID)
        .setSmallIcon(R.drawable.new_mail)
        .setContentTitle(emailObject.getSenderName())
        .setContentText(emailObject.getSubject())
        .setLargeIcon(emailObject.getSenderAvatar())
        .setGroup(GROUP_KEY_WORK_EMAIL)
        .build();

يتم ترتيب الإشعارات تلقائيًا وفقًا لوقت نشرها، ولكن يمكنك تغيير الترتيب من خلال استدعاء setSortKey().

إذا كان يجب معالجة تنبيهات مجموعة إشعارات من خلال إشعار مختلف، اتصل بالرقم setGroupAlertBehavior(). على سبيل المثال، إذا كنت تريد أن يصدر صوت فقط عن ملخّص مجموعتك، يجب أن يكون لجميع العناصر في المجموعة سلوك تنبيه المجموعة GROUP_ALERT_SUMMARY. الخيارات الأخرى هي GROUP_ALERT_ALL وGROUP_ALERT_CHILDREN.

إعداد ملخّص للمجموعة

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

  • في إصدارات Android الأقدم من 7.0 (المستوى 24 من واجهة برمجة التطبيقات)، والتي لا يمكنها عرض مجموعة مُدمجة من الإشعارات، لا يعرض النظام سوى إشعار ملخّص المجموعة ويُخفي كل الإشعارات الأخرى. يمكن للمستخدم النقر على إشعار ملخّص المجموعة لفتح تطبيقك.

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

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

لإضافة ملخّص مجموعة، اتّبِع الخطوات التالية:

  1. أنشئ إشعارًا جديدًا يتضمّن وصفًا للمجموعة، وغالبًا ما يكون من الأفضل استخدام إشعار بأسلوب البريد الوارد .

  2. أضِف الإشعار التلخيصي إلى المجموعة من خلال الاتصال بالرقم setGroup().

  3. حدِّد أنّه يجب استخدامه كملخّص للمجموعة من خلال استدعاء setGroupSummary(true).

تعرِض التعليمة البرمجية التالية مثالاً على إنشاء ملخّص مجموعة:

Kotlin

// Use constant ID for notifications used as group summary.
val SUMMARY_ID = 0
val GROUP_KEY_WORK_EMAIL = "com.android.example.WORK_EMAIL"

val newMessageNotification1 = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID)
        .setSmallIcon(R.drawable.ic_notify_email_status)
        .setContentTitle(emailObject1.getSummary())
        .setContentText("You will not believe...")
        .setGroup(GROUP_KEY_WORK_EMAIL)
        .build()

val newMessageNotification2 = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID)
        .setSmallIcon(R.drawable.ic_notify_email_status)
        .setContentTitle(emailObject2.getSummary())
        .setContentText("Please join us to celebrate the...")
        .setGroup(GROUP_KEY_WORK_EMAIL)
        .build()

val summaryNotification = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID)
        .setContentTitle(emailObject.getSummary())
        // Set content text to support devices running API level < 24.
        .setContentText("Two new messages")
        .setSmallIcon(R.drawable.ic_notify_summary_status)
        // Build summary info into InboxStyle template.
        .setStyle(NotificationCompat.InboxStyle()
                .addLine("Alex Faarborg Check this out")
                .addLine("Jeff Chang Launch Party")
                .setBigContentTitle("2 new messages")
                .setSummaryText("janedoe@example.com"))
        // Specify which group this notification belongs to.
        .setGroup(GROUP_KEY_WORK_EMAIL)
        // Set this notification as the summary for the group.
        .setGroupSummary(true)
        .build()

NotificationManagerCompat.from(this).apply {
    notify(emailNotificationId1, newMessageNotification1)
    notify(emailNotificationId2, newMessageNotification2)
    notify(SUMMARY_ID, summaryNotification)
}

Java

// Use constant ID for notifications used as group summary.
int SUMMARY_ID = 0;
String GROUP_KEY_WORK_EMAIL = "com.android.example.WORK_EMAIL";

Notification newMessageNotification1 =
    new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID)
        .setSmallIcon(R.drawable.ic_notify_email_status)
        .setContentTitle(emailObject1.getSummary())
        .setContentText("You will not believe...")
        .setGroup(GROUP_KEY_WORK_EMAIL)
        .build();

Notification newMessageNotification2 =
    new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID)
        .setSmallIcon(R.drawable.ic_notify_email_status)
        .setContentTitle(emailObject2.getSummary())
        .setContentText("Please join us to celebrate the...")
        .setGroup(GROUP_KEY_WORK_EMAIL)
        .build();

Notification summaryNotification =
    new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID)
        .setContentTitle(emailObject.getSummary())
        // Set content text to support devices running API level < 24.
        .setContentText("Two new messages")
        .setSmallIcon(R.drawable.ic_notify_summary_status)
        // Build summary info into InboxStyle template.
        .setStyle(new NotificationCompat.InboxStyle()
                .addLine("Alex Faarborg  Check this out")
                .addLine("Jeff Chang    Launch Party")
                .setBigContentTitle("2 new messages")
                .setSummaryText("janedoe@example.com"))
        // Specify which group this notification belongs to.
        .setGroup(GROUP_KEY_WORK_EMAIL)
        // Set this notification as the summary for the group.
        .setGroupSummary(true)
        .build();

NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
notificationManager.notify(emailNotificationId1, newMessageNotification1);
notificationManager.notify(emailNotificationId2, newMessageNotification2);
notificationManager.notify(SUMMARY_ID, summaryNotification);

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

للاطّلاع على نموذج رمز برمجي يستخدم الإشعارات، يمكنك الاطّلاع على نموذج إشعارات Android .

التجميع التلقائي

في الإصدار 7.0 من نظام التشغيل Android (المستوى 24 لواجهة برمجة التطبيقات) والإصدارات الأحدث، إذا كان تطبيقك يُرسِل إعلامات ولا يحدِّد مفتاح مجموعة أو ملخّص مجموعة، قد يُجمِّعها النظام تلقائيًا معًا. تظهر الإشعارات المجمَّعة تلقائيًا مع إشعار ملخّص للمجموعة يحمل تصنيفًا يتضمّن مقتطفات من النص من بعض الإشعارات المجمَّعة. يمكن للمستخدم توسيع هذا الإشعار التلخيصي للاطّلاع على كل إشعار individual، كما هو الحال مع الإشعارات المجمّعة يدويًا.

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