تسهّل الإشعارات المنبثقة على المستخدمين الاطّلاع على المحادثات والمشاركة فيها.
وتظهر هذه الفقاعات فوق محتوى التطبيقات الأخرى، ويمكن للمستخدمين توسيعها لعرض محتوى التطبيق والتفاعل معه، كما يمكنهم تصغيرها عندما لا يستخدمونها.
عندما يكون الجهاز مقفلاً أو عندما تكون ميزة "تشغيل الشاشة دائمًا" مفعَّلة، تظهر الفقاعات كإشعارات كالمعتاد.
يفعّل المستخدم الإشعارات المنبثقة. ويمكنهم إجراء ذلك من خلال النقر على زر الفقاعة في الإشعارات التي تتيح استخدام الفقاعات. يسمح هذا لتلك المحادثة المحددة بالظهور دائمًا. في الإعدادات، يمكن للمستخدمين تعديل المحادثات التي تم عرضها في فقاعات أو تعديل إعدادات التطبيق بشكل عام.
يمكن للمستخدمين إجراء ما يلي:
- يمكنك حظر جميع الإشعارات المنبثقة من تطبيقك. لا يتم حظر الإشعارات، ولكنها لا تظهر أبدًا كإشعارات منبثقة.
- يمكنك السماح بالإشعارات المنبثقة المحدّدة من تطبيقك. الإشعارات المنبثقة باستخدام زر الفقاعة هي "محددة".
- يمكنك السماح بجميع الإشعارات المنبثقة من تطبيقك. تظهر جميع الإشعارات المُرسَلة باستخدام
BubbleMetadataكإشعارات منبثقة.
واجهة 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"
/>
إذا كان تطبيقك يعرض فقاعات متعددة من النوع نفسه، مثل محادثات متعددة مع جهات اتصال مختلفة، يجب أن يكون النشاط قادرًا على تشغيل أحداث متعددة. على الأجهزة التي تعمل بنظام التشغيل Android 10 والإصدارات الأقدم،
لا تظهر الإشعارات على شكل فقاعات ما لم يتم ضبط
documentLaunchMode بشكل صريح على
"always". بدءًا من الإصدار Android 11، ليس عليك ضبط هذه القيمة بشكل صريح، لأنّ النظام يضبط تلقائيًا قيمة documentLaunchMode لجميع المحادثات على "always".
لإرسال إشعار منبثق، اتّبِع الخطوات التالية:
- أنشئ إشعارًا كالمعتاد.
- استخدِم الدالة
BubbleMetadata.Builder(PendingIntent, Icon)أوBubbleMetadata.Builder(String)لإنشاء عنصرBubbleMetadata. - استخدِم
setBubbleMetadata()لإضافة البيانات الوصفية إلى الإشعار. - إذا كان تطبيقك يستهدف الإصدار 11 من نظام التشغيل Android (مستوى واجهة برمجة التطبيقات 30) أو الإصدارات الأحدث، تأكَّد من أنّ البيانات الوصفية للفقاعة أو الإشعار تشير إلى اختصار مشاركة.
- يُرجى تعديل تطبيقك لعدم إلغاء الإشعارات التي تظهر على شكل فقاعات. يؤدي إلغاء إشعار إلى إزالة الفقاعة من الشاشة. يؤدي فتح فقاعة إلى إخفاء الإشعار المرتبط بها تلقائيًا.
تظهر هذه الخطوات في المثال التالي:
// Create a bubble intent. val target = Intent(context, BubbleActivity::class.java) val bubbleIntent = PendingIntent.getActivity(context, 0, target, PendingIntent.FLAG_IMMUTABLE /* 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 = ShortcutInfoCompat.Builder(context, shortcutId) .setCategories(setOf(category)) .setIntent(Intent(Intent.ACTION_DEFAULT)) .setLongLived(true) .setShortLabel("Chat partner name") .build() // Publish the shortcut, otherwise the bubble metadata will not apply. ShortcutManagerCompat.pushDynamicShortcut(context, shortcut) // Create a bubble metadata. val bubbleData = NotificationCompat.BubbleMetadata.Builder(bubbleIntent, IconCompat.createWithResource(context, R.drawable.ic_logo)) .setDesiredHeight(600) .build() // Create a notification, referencing the sharing shortcut. val builder = NotificationCompat.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(R.drawable.chat) .setBubbleMetadata(bubbleData) .setShortcutId(shortcutId) .addPerson(chatPartner)
إذا كان تطبيقك في المقدّمة عند إرسال فقاعة، يتم تجاهل الأهمية ويتم عرض الفقاعة دائمًا، ما لم يحظر المستخدم الفقاعات أو الإشعارات من تطبيقك.
إنشاء فقاعة موسّعة
يمكنك ضبط الفقاعة لعرضها في الحالة الموسّعة تلقائيًا. ننصح باستخدام هذه الميزة فقط إذا نفّذ المستخدم إجراءً يؤدي إلى ظهور فقاعة، مثل النقر على زر لبدء محادثة جديدة. في هذه الحالة، من المنطقي أيضًا منع الإشعار الأولي الذي يتم إرساله عند إنشاء فقاعة.
هناك طرق يمكنك استخدامها لضبط العلامات التي تفعّل هذه السلوكيات:
setAutoExpandBubble()
و
setSuppressNotification().
يوضّح المثال التالي كيفية ضبط فقاعة لتظهر تلقائيًا في حالة موسّعة:
val bubbleMetadata = NotificationCompat.BubbleMetadata.Builder() .setDesiredHeight(600) .setIntent(bubbleIntent) .setAutoExpandBubble(true) .setSuppressNotification(true) .build()
مراحل نشاط محتوى الفقاعة
عند توسيع فقاعة، يمر نشاط المحتوى بدورة حياة العملية العادية، ما يؤدي إلى أن يصبح التطبيق عملية تعمل في المقدّمة، إذا لم يكن كذلك.
عند تصغير الفقاعة أو إغلاقها، يتم إنهاء النشاط. وقد يؤدي ذلك إلى تخزين العملية مؤقتًا وإيقافها لاحقًا، وذلك حسب ما إذا كان التطبيق يتضمّن مكوّنات أخرى تعمل في المقدّمة.
حالات ظهور الفقاعات
لتقليل المقاطعات للمستخدم، تظهر الفقاعات فقط في ظل ظروف معينة.
إذا كان التطبيق يستهدف الإصدار 11 من نظام التشغيل Android (المستوى 30 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث، لن يظهر الإشعار على شكل فقاعة ما لم يستوفِ متطلبات المحادثة. إذا كان التطبيق يستهدف الإصدار 10 من نظام التشغيل Android (المستوى 29 لواجهة برمجة التطبيقات) أو الإصدارات الأقدم، سيظهر الإشعار كفقاعة فقط في حال استيفاء شرط واحد أو أكثر من الشروط التالية:
- يستخدم الإشعار
MessagingStyleويتضمّنPerson. - الإشعار من مكالمة إلى
Service.startForeground، ويحتوي علىcategoryمنCATEGORY_CALL، وتمت إضافةPerson. - يكون التطبيق قيد الاستخدام في المقدّمة عند إرسال الإشعار.
في حال عدم استيفاء أي من هذه الشروط، سيتم عرض الإشعار بدلاً من فقاعة.
بدء الأنشطة من الفقاعات
عندما تبدأ فقاعة نشاطًا جديدًا، سيتم تشغيل النشاط الجديد إما ضمن المهمة نفسها ونافذة الفقاعة نفسها، أو في مهمة جديدة في وضع ملء الشاشة، مع تصغير الفقاعة التي بدأته.
لبدء نشاط جديد في المهمة نفسها مثل الفقاعة:
1. استخدِم سياق النشاط عند تشغيل الأهداف،
activity.startActivity(intent)، و
1. لا تضبط علامة FLAG_ACTIVITY_NEW_TASK على الغرض.
وإلا، يتم بدء النشاط الجديد في مهمة جديدة ويتم تصغير الفقاعة.
يُرجى العِلم أنّ الفقاعة تمثّل محادثة معيّنة، لذا يجب أن تكون الأنشطة التي يتم إطلاقها داخل الفقاعة مرتبطة بتلك المحادثة. بالإضافة إلى ذلك، يؤدي بدء نشاط داخل الفقاعة إلى زيادة حزمة المهام في الفقاعة وقد يؤدي إلى تعقيد تجربة المستخدم، خاصةً في ما يتعلق بالتنقّل.
أفضل الممارسات
- لا ترسِل إشعارًا على شكل فقاعة إلا إذا كان مهمًا، مثلاً إذا كان جزءًا من محادثة جارية أو إذا طلب المستخدم صراحةً عرض المحتوى في فقاعة. تستخدم الفقاعات مساحة الشاشة وتغطي محتوى التطبيقات الأخرى.
- تأكَّد من أنّ إشعار الفقاعة يعمل أيضًا كإشعار عادي. عندما يوقف المستخدم الفقاعة، يظهر إشعار الفقاعة كإشعار عادي.
- استخدِم الدالة المركّبة
BackHandlerواربط مَعلمةenabledبحالة واجهة المستخدم لكي تعترض فقط عمليات الضغط على زر الرجوع عند الضرورة. بعد أن يوقف المعالج نفسه، تنهار الفقاعة.
عندما تتلقّى فقاعة محادثة مصغّرة رسالة جديدة، تعرض الفقاعة رمز شارة للإشارة إلى رسالة غير مقروءة. عندما يفتح المستخدم الرسالة في التطبيق المرتبط، اتّبِع الخطوات التالية:
- تعديل
BubbleMetadataلإيقاف الإشعار الاتصال بـBubbleMetadata.Builder.setSuppressNotification()يؤدي ذلك إلى إزالة رمز الشارة للإشارة إلى أنّ المستخدم تفاعل مع الرسالة. - اضبط
Notification.Builder.setOnlyAlertOnce()علىtrueلإيقاف الصوت أو الاهتزاز المصاحب لتحديثBubbleMetadata.
نموذج تطبيق
نموذج تطبيق SociaLite هو تطبيق محادثات يستخدم الفقاعات. لأغراض توضيحية، يستخدم هذا التطبيق روبوتات الدردشة. في التطبيقات الواقعية، استخدِم الفقاعات للرسائل التي يكتبها المستخدمون.