از حباب ها استفاده کنید تا کاربران در گفتگوها شرکت کنند

حباب ها دیدن و شرکت در مکالمات را برای کاربران آسان تر می کند.

شکل 1. یک حباب چت.

حباب ها در سیستم اطلاع رسانی تعبیه شده اند. آنها بر روی سایر محتوای برنامه شناور می شوند و کاربر را هر کجا که می روند دنبال می کنند. کاربران می‌توانند حباب‌ها را گسترش دهند تا محتوای برنامه را آشکار کنند و با آن تعامل داشته باشند، و وقتی از آنها استفاده نمی‌کنند می‌توانند آن‌ها را جمع کنند.

هنگامی که دستگاه قفل است، یا صفحه نمایش همیشه روشن فعال است، حباب ها مانند اعلان ها ظاهر می شوند.

حباب ها یک ویژگی انصراف هستند. هنگامی که یک برنامه اولین حباب خود را ارائه می دهد، گفتگوی مجوز دو گزینه را ارائه می دهد:

  • همه حباب ها را از برنامه خود مسدود کنید. اعلان ها مسدود نمی شوند، اما هرگز به صورت حباب ظاهر نمی شوند.
  • به همه حباب ها از برنامه خود اجازه دهید. تمام اعلان‌های ارسال شده با BubbleMetaData به صورت حباب ظاهر می‌شوند.

Bubble API

حباب ها با استفاده از 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" تنظیم می کند.

برای ارسال حباب، مراحل زیر را دنبال کنید:

  1. همانطور که معمولاً انجام می دهید یک اعلان ایجاد کنید .
  2. برای ایجاد یک شی BubbleMetadata BubbleMetadata.Builder(PendingIntent, Icon) یا BubbleMetadata.Builder(String) را فراخوانی کنید.
  3. از setBubbleMetadata() برای افزودن متادیتا به اعلان استفاده کنید.
  4. اگر Android 11 یا بالاتر را هدف قرار می‌دهید، مطمئن شوید که ابرداده یا اعلان حباب به یک میانبر اشتراک‌گذاری اشاره دارد.
  5. برنامه خود را طوری تغییر دهید که اعلان هایی که به صورت حباب ظاهر می شوند لغو نشود . برای بررسی اینکه آیا فعالیت اعلان به صورت حباب راه اندازی شده است یا خیر، Activity#isLaunchedFromBubble() را فراخوانی کنید. لغو یک اعلان حباب را از روی صفحه حذف می کند. باز کردن یک حباب به طور خودکار اعلان مربوط به آن را پنهان می کند.

این مراحل در مثال زیر نشان داده شده است:

کاتلین

// 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)

جاوا

// 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() .

مثال زیر نحوه پیکربندی یک حباب را برای نمایش خودکار در حالت گسترش یافته نشان می دهد:

کاتلین

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

جاوا

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

چرخه حیات محتوای حباب

هنگامی که یک حباب گسترش می‌یابد، فعالیت محتوا از چرخه عمر فرآیند عادی عبور می‌کند و در نتیجه برنامه به یک فرآیند پیش‌زمینه تبدیل می‌شود، در صورتی که قبلاً نبوده است.

هنگامی که حباب فرو می ریزد یا از بین می رود، فعالیت از بین می رود. این ممکن است منجر به ذخیره شدن فرآیند در حافظه پنهان و بعداً از بین رفتن آن شود، بسته به اینکه آیا برنامه سایر اجزای پیش زمینه در حال اجرا باشد یا خیر.

هنگامی که حباب ظاهر می شود

برای کاهش وقفه برای کاربر، حباب ها فقط در شرایط خاصی ظاهر می شوند.

اگر برنامه‌ای اندروید 11 یا بالاتر را هدف قرار دهد، اعلان به صورت حباب ظاهر نمی‌شود مگر اینکه شرایط مکالمه را برآورده کند. اگر برنامه‌ای اندروید 10 یا پایین‌تر را هدف قرار دهد، اعلان فقط در صورت رعایت یک یا چند مورد از شرایط زیر به صورت حباب ظاهر می‌شود:

  • این اعلان از MessagingStyle استفاده می کند و یک Person به آن اضافه شده است.
  • این اعلان از تماس با Service.startForeground است، دارای category از CATEGORY_CALL است و یک Person اضافه شده است.
  • هنگام ارسال اعلان، برنامه در پیش زمینه است.

اگر هیچ یک از این شرایط برآورده نشد، اعلان به جای حباب نشان داده می شود.

راه اندازی فعالیت ها از حباب ها

هنگامی که یک حباب یک فعالیت جدید را راه اندازی می کند، فعالیت جدید یا در همان کار و همان پنجره حباب دار راه اندازی می شود، یا در یک کار جدید در تمام صفحه، حبابی که آن را راه اندازی کرده است فرو می ریزد.

برای راه‌اندازی یک فعالیت جدید در همان کار حباب: 1. هنگام راه‌اندازی intent از زمینه فعالیت استفاده کنید، activity.startActivity(intent) ، و 1. پرچم FLAG_ACTIVITY_NEW_TASK را روی intent تنظیم نکنید.

در غیر این صورت، فعالیت جدید در یک کار جدید شروع می شود و حباب فرو می ریزد.

به خاطر داشته باشید که یک حباب یک مکالمه خاص را نشان می دهد، بنابراین فعالیت هایی که در حباب راه اندازی می شوند باید با آن مکالمه مرتبط باشند. علاوه بر این، راه‌اندازی یک فعالیت در حباب، پشته وظایف حباب را افزایش می‌دهد و به طور بالقوه می‌تواند تجربه کاربر، به‌ویژه در مورد ناوبری را پیچیده کند.

بهترین شیوه ها

  • فقط در صورت مهم بودن اعلان به صورت حباب ارسال کنید، مانند زمانی که بخشی از یک ارتباط در حال انجام است یا اگر کاربر صریحاً یک حباب برای محتوا درخواست کند. حباب ها از صفحه نمایش املاک استفاده می کنند و سایر محتوای برنامه را پوشش می دهند.
  • اطمینان حاصل کنید که اعلان حباب شما نیز به عنوان یک اعلان معمولی کار می کند. هنگامی که کاربر حباب را غیرفعال می کند، یک اعلان حباب به عنوان یک اعلان عادی نشان داده می شود.
  • هنگام نادیده گرفتن onBackPressed در فعالیت حباب، super.onBackPressed فراخوانی کنید. در غیر این صورت، حباب شما ممکن است درست عمل نکند.

هنگامی که یک حباب جمع شده یک پیام به روز دریافت می کند، حباب یک نماد نشان می دهد تا پیام خوانده نشده را نشان دهد. هنگامی که کاربر پیام را در برنامه مرتبط باز می کند، این مراحل را دنبال کنید:

نمونه برنامه

برنامه نمونه SociaLite یک برنامه مکالمه است که از حباب ها استفاده می کند. برای اهداف نمایشی، این برنامه از چت بات ها استفاده می کند. در برنامه های دنیای واقعی، از حباب ها برای پیام های انسان استفاده کنید.