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

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

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

  • يستخدم الإشعار MessagingStyle ولديها تمت إضافة Person.
  • مصدر الإشعار هو مكالمة إلى Service.startForeground، ويحتوي على category CATEGORY_CALL، ويحتوي على Person تمت إضافته.
  • يكون التطبيق في المقدّمة عند إرسال الإشعار.

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

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

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

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

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

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

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

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

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

نموذج تطبيق

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