استفاده از حبابک‌های اعلان برای مکالمه‌ها

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

شکل ۱. حبابک گپ.

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

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

حبابک‌های اعلان توسط کاربر فعال شده باشد. آن‌ها می‌توانند با تک‌ضرب زدن روی دکمه حبابک در اعلان‌هایی که از حبابک‌ها پشتیبانی می‌کنند، این کار را انجام دهند. این کار باعث می‌شود آن گپ خاص همیشه حباب داشته باشد. در تنظیمات، کاربران می‌توانند تنظیم کنند کدام گپ‌ها به حباب تبدیل شوند یا تنظیمات کلی برنامه را تغییر دهند.

کاربران می‌توانند کارهای زیر را انجام دهند:

  • همه حبابک‌های اعلان برنامه مسدود می‌شود. اعلان‌ها مسدود نمی‌شوند، اما هرگز به‌صورت حبابک نشان داده نمی‌شوند.
  • حبابک‌های اعلان انتخابی را از برنامه‌تان مجاز کنید. اعلان‌هایی که بااستفاده از دکمه حبابک ایجاد می‌شوند «انتخاب‌شده» هستند.
  • همه حبابک‌های اعلان را از برنامه‌تان مجاز کنید. همه اعلان‌های ارسال‌شده با 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، با BubbleMetadata.Builder(PendingIntent, Icon) یا BubbleMetadata.Builder(String) تماس بگیرید.
  3. از setBubbleMetadata() برای افزودن فراداده به اعلان استفاده کنید.
  4. اگر Android 11 (سطح میانای برنامه‌سازی کاربردی ۳۰) یا بالاتر را هدف‌یابی می‌کنید، مطمئن شوید فراداده حباب یا ارجاع اعلان به میان‌بر هم‌رسانی ارجاع می‌دهد.
  5. برنامه‌تان را به‌گونه‌ای اصلاح کنید که اعلان‌هایی را که به‌صورت حبابک ظاهر می‌شوند لغو نکند. لغو کردن اعلان باعث می‌شود حبابک از صفحه برداشته شود. باز کردن حبابک به‌طور خودکار اعلان منسوب به آن را پنهان می‌کند.

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

// Create a bubble intent.
val target = Intent(context, BubbleActivity::class.java)
val bubbleIntent =
    PendingIntent.getActivity(context, 0, target, PendingIntent.FLAG_IMMUTABLE /* 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 =
    ShortcutInfoCompat.Builder(context, shortcutId)
        .setCategories(setOf(category))
        .setIntent(Intent(Intent.ACTION_DEFAULT))
        .setLongLived(true)
        .setShortLabel("Chat partner name")
        .build()
// Publish the shortcut, otherwise the bubble metadata will not apply.
ShortcutManagerCompat.pushDynamicShortcut(context, shortcut)

// Create a bubble metadata.
val bubbleData = NotificationCompat.BubbleMetadata.Builder(bubbleIntent,
    IconCompat.createWithResource(context, R.drawable.ic_logo))
    .setDesiredHeight(600)
    .build()

// Create a notification, referencing the sharing shortcut.
val builder = NotificationCompat.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(R.drawable.chat)
    .setBubbleMetadata(bubbleData)
    .setShortcutId(shortcutId)
    .addPerson(chatPartner)

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

ایجاد حبابک ازهم بازشده

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

روش‌هایی وجود دارد که می‌توانید از آن‌ها برای تنظیم پرچم‌هایی که این رفتارها را فعال می‌کنند استفاده کنید: setAutoExpandBubble() و setSuppressNotification().

مثال زیر نشان می‌دهد چگونه حبابکی را پیکربندی کنید تا به‌طور خودکار در حالت ازهم بازشده ارائه شود:

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

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

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

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

وقتی حبابک‌ها ظاهر می‌شوند

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

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

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

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

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

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

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

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

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

روال‌های مطلوب

  • اعلان را فقط درصورتی به‌صورت حباب ارسال کنید که مهم باشد، مثلاً وقتی بخشی از ارتباطات جاری باشد یا اگر کاربر به‌طور صریح برای محتوا درخواست حباب کند. حباب‌ها از فضای صفحه استفاده می‌کنند و محتوای برنامه‌های دیگر را می‌پوشانند.
  • مطمئن شوید اعلان حبابی شما به‌عنوان اعلان عادی نیز کار می‌کند. وقتی کاربر حبابک را غیرفعال می‌کند، اعلان حبابکی به‌عنوان اعلان عادی نشان داده می‌شود.
  • از عنصر ترکیبی BackHandler استفاده کنید و پارامتر enabled آن را به وضعیت واسط کاربر خود متصل کنید تا فقط درصورت لزوم فشار دادن دکمه بازگشت را رهگیری کند. وقتی گرداننده خودش را غیرفعال می‌کند، حبابک جمع می‌شود.

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

برنامه نمونه

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