استخدام فقاعات الإشعارات للمحادثات

تسهّل فقاعات الإشعارات على المستخدمين الاطّلاع على المحادثات والمشاركة فيها.

الشكل 1. فقاعة محادثة

تظهر الفقاعات فوق محتوى التطبيقات الأخرى، ويمكن للمستخدمين توسيعها للكشف عن محتوى التطبيق والتفاعل معه، كما يمكنهم تصغيرها عندما لا يستخدمونها.

عندما يكون الجهاز مقفلاً أو تكون ميزة "تشغيل الشاشة دائمًا" مفعَّلة، تظهر الفقاعات كما تظهر الإشعارات عادةً.

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

يمكن للمستخدمين إجراء ما يلي:

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

The Notification Bubble API

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

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

يوضّح الرمز البرمجي التالي كيفية تنفيذ فقاعة:

<activity
  android:name=".bubbles.BubbleActivity"
  android:theme="@style/AppTheme.NoActionBar"
  android:label="@string/title_activity_bubble"
  android:allowEmbedded="true"
  android:resizeableActivity="true"
/>

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

لإرسال إشعار منبثق، اتّبِع الخطوات التالية:

  1. أنشئ إشعارًا بالطريقة المعتادة.
  2. استخدِم BubbleMetadata.Builder(PendingIntent, Icon) أو BubbleMetadata.Builder(String) لإنشاء كائن BubbleMetadata.
  3. استخدِم setBubbleMetadata() لإضافة بيانات التعريف إلى الإشعار.
  4. إذا كنت تستهدف الإصدار 11 من نظام التشغيل Android (مستوى واجهة برمجة التطبيقات 30) أو الإصدارات الأحدث، تأكَّد من أنّ البيانات الوصفية للفقاعة أو الإشعار يشيران إلى اختصار ميزة المشاركة.
  5. عدِّل تطبيقك كي لا يلغي الإشعارات التي تظهر في شكل فقاعات. يؤدي إلغاء إشعار إلى إزالة الفقاعة من الشاشة. يؤدي فتح فقاعة إلى إخفاء الإشعار المرتبط بها تلقائيًا.

تظهر هذه الخطوات في المثال التالي:

  // Create a bubble intent.
  val target = Intent(context, BubbleActivity::class.java)
  val bubbleIntent = PendingIntent.getActivity(context, 0, target, 0 /* flags */)
  val category = "com.example.category.IMG_SHARE_TARGET"

  val chatPartner = Person.Builder()
      .setName("Chat partner")
      .setImportant(true)
      .build()

  // Create a sharing shortcut.
  val shortcutId = generateShortcutId()
  val shortcut =
     ShortcutInfo.Builder(context, shortcutId)
         .setCategories(setOf(category))
         .setIntent(Intent(Intent.ACTION_DEFAULT))
         .setLongLived(true)
         .setShortLabel(chatPartner.name)
         .build()

  // Create a bubble metadata.
  val bubbleData = Notification.BubbleMetadata.Builder(bubbleIntent,
              Icon.createWithResource(context, R.drawable.icon))
      .setDesiredHeight(600)
      .build()

  // Create a notification, referencing the sharing shortcut.
  val builder = Notification.Builder(context, CHANNEL_ID)
      .setContentIntent(contentIntent)
      .setSmallIcon(smallIcon)
      .setBubbleMetadata(bubbleData)
      .setShortcutId(shortcutId)
      .addPerson(chatPartner)

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

إنشاء فقاعة موسّعة

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

هناك طريقتان يمكنك استخدامهما لضبط العلامات التي تتيح هذه السلوكيات: setAutoExpandBubble() و setSuppressNotification().

يوضّح المثال التالي كيفية ضبط فقاعة لعرضها تلقائيًا في حالة موسّعة:

  val bubbleMetadata = Notification.BubbleMetadata.Builder()
      .setDesiredHeight(600)
      .setIntent(bubbleIntent)
      .setAutoExpandBubble(true)
      .setSuppressNotification(true)
      .build()

مراحل النشاط في فقاعات المحتوى

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

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

حالات ظهور الفقاعات

لتقليل مقاطعة المستخدم، لا تظهر الفقاعات إلا في ظروف معيّنة.

إذا كان التطبيق يستهدف الإصدار 11 من نظام التشغيل Android (المستوى 30 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث، لن يظهر الإشعار على شكل فقاعة إلا إذا استوفى متطلبات المحادثة. إذا كان التطبيق يستهدف الإصدار 10 من نظام التشغيل Android (المستوى 29 لواجهة برمجة التطبيقات) أو الإصدارات الأقدم، لن يظهر الإشعار على شكل فقاعة إلا إذا تم استيفاء شرط واحد أو أكثر من الشروط التالية:

إذا لم يتم استيفاء أي من هذه الشروط، سيظهر الإشعار بدلاً من الفقاعة.

تشغيل الأنشطة من الفقاعات

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

لبدء نشاط جديد في المهمة نفسها التي تتضمّن الفقاعة، اتّبِع الخطوات التالية: 1. استخدِم سياق النشاط عند تشغيل الأهداف، activity.startActivity(intent)، و 1. لا تضبط العلامة FLAG_ACTIVITY_NEW_TASK في الغرض.

في ما عدا ذلك، يتم بدء النشاط الجديد في مهمة جديدة ويتم تصغير الفقاعة.

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

أفضل الممارسات

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

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

نموذج تطبيق

تطبيق SociaLite النموذجي هو تطبيق محادثة يستخدم الفقاعات. لأغراض توضيحية، يستخدم هذا التطبيق روبوتات الدردشة. في التطبيقات التي تستخدم في الحياة الواقعية، استخدِم الفقاعات للرسائل التي يرسلها أشخاص.