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

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

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

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

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

يمكنك إيقاف ميزة "فقاعات الدردشة". عندما يعرض أحد التطبيقات فقاعة العرض الأولى، يقدّم مربع حوار الأذونات خيارَين:

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

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

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

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

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

<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 أو إصدارًا أحدث، تأكَّد من أنّ البيانات الوصفية للفقاعات التفسيرية أو الإشعارات تشير إلى اختصار للمشاركة.
  5. عدِّل تطبيقك لعدم إلغاء الإشعارات التي تظهر كفقاعات. للتحقّق مما إذا كان نشاط الإشعار يتم تشغيله كفقاعة، اتصل بالرقم Activity#isLaunchedFromBubble(). يؤدي إلغاء إشعار إلى إزالة الفقاعة من الشاشة. يؤدي فتح فقاعة إلى إخفاء الإشعار المرتبط بها تلقائيًا.

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

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 أو إصدارًا أقدم، لا يظهر الإشعار في شكل فقاعة إلا في حال استيفاء شرط واحد أو أكثر من الشروط التالية:

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

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

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

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

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

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

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

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

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

نموذج تطبيق

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