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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

نموذج تطبيق

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