استخدام فقاعات المحادثات للسماح للمستخدمين بالمشاركة في المحادثات

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

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

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

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

فقاعات المحادثات هي ميزة للإيقاف. عندما يعرض التطبيق أول فقاعة، يقدم مربع حوار الإذن خيارين:

  • يمكنك حظر كل فقاعات المحادثات من تطبيقك. ولا يتم حظر الإشعارات ولكنها لا تظهر أبدًا كفقاعات.
  • السماح بجميع فقاعات المحادثات من تطبيقك. ستظهر جميع الإشعارات المُرسَلة باستخدام BubbleMetaData على شكل فقاعات.

واجهة برمجة تطبيقات الفقاعة

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

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

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

<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". بدايةً من الإصدار 11 من نظام Android، لا تحتاج إلى ضبط هذه القيمة بشكل صريح، لأنّ النظام يضبط تلقائيًا كل المحادثات documentLaunchMode على "always".

لإرسال فقاعة، اتبع الخطوات التالية:

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

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

Kotlin

// 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(mContext, 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)

Java

// Create a bubble intent.
Intent target = new Intent(mContext, BubbleActivity.class);
PendingIntent bubbleIntent =
    PendingIntent.getActivity(mContext, 0, target, 0 /* flags */);

private val CATEGORY_TEXT_SHARE_TARGET =
    "com.example.category.IMG_SHARE_TARGET"

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

// Create a sharing shortcut.
private String shortcutId = generateShortcutId();
ShortcutInfo shortcut =
   new ShortcutInfo.Builder(mContext, shortcutId)
       .setCategories(Collections.singleton(CATEGORY_TEXT_SHARE_TARGET))
       .setIntent(Intent(Intent.ACTION_DEFAULT))
       .setLongLived(true)
       .setShortLabel(chatPartner.getName())
       .build();

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

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

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

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

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

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

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

Kotlin

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

Java

Notification.BubbleMetadata bubbleData =
    new Notification.BubbleMetadata.Builder()
        .setDesiredHeight(600)
        .setIntent(bubbleIntent)
        .setAutoExpandBubble(true)
        .setSuppressNotification(true)
        .build();

مراحل محتوى الفقاعات التفسيرية

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

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

وقت ظهور الفقاعات التفسيرية

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

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

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

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

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

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

نموذج تطبيق

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