حبابکهای اعلان دیدن مکالمهها و مشارکت در آنها را برای کاربران آسانتر میکند.
این حبابها روی محتوای برنامههای دیگر شناور هستند و کاربران میتوانند حبابها را ازهم باز کنند تا محتوای برنامه را ببینند و با آن تعامل داشته باشند، و وقتی از آنها استفاده نمیکنند میتوانند آنها را جمع کنند.
وقتی دستگاه قفل است یا نمایشگر همیشه روشن فعال است، حبابکها بهصورت اعلانهای معمولی ظاهر میشوند.
حبابکهای اعلان توسط کاربر فعال شده است. میتوانند این کار را با تکضرب زدن روی دکمه حبابک در اعلانهایی که از حبابک پشتیبانی میکنند انجام دهند. این کار به آن گپ خاص اجازه میدهد همیشه حبابک شود. در تنظیمات، کاربران میتوانند گپهایی را که حبابدار کردهاند تنظیم کنند یا تنظیمات کلی برنامه را تغییر دهند.
کاربران میتوانند کارهای زیر را انجام دهند:
- همه حبابکهای اعلان را از برنامهتان مسدود کنید. اعلانها مسدود نمیشوند، اما هرگز بهصورت حبابک نشان داده نمیشوند.
- حبابکهای اعلان انتخابشده از برنامهتان را مجاز کنید. اعلانهایی که بااستفاده از دکمه حبابک بهصورت حبابک درآمدهاند «انتخابشده» هستند.
- همه حبابکهای اعلان را از برنامهتان مجاز کنید. همه اعلانهای ارسالشده با
BubbleMetadataبهصورت حبابک نشان داده میشوند.
The Notification Bubble API
حبابکهای اعلان بااستفاده از میانای برنامهسازی کاربردی اعلان ایجاد میشوند. اگر میخواهید اعلان بهصورت حباب نمایش داده شود، دادههای اضافی به آن پیوست کنید.
نمای ازهم بازشده حباب از فعالیتی که انتخاب میکنید ایجاد میشود. فعالیت را پیکربندی کنید تا بهدرستی بهصورت حباب نمایش داده شود. فعالیت باید قابلتغییر اندازه و جاسازیشده باشد. اگر یکی از این الزامات را نداشته باشد، سیستم آن را بهجای اعلان نشان میدهد.
کد زیر نحوه پیادهسازی حباب را نشان میدهد:
<activity
android:name=".bubbles.BubbleActivity"
android:theme="@style/AppTheme.NoActionBar"
android:label="@string/title_activity_bubble"
android:allowEmbedded="true"
android:resizeableActivity="true"
/>
اگر برنامهتان چند حباب از یک نوع را نشان میدهد، مثلاً چند مکالمه گپی با مخاطبین مختلف، فعالیت باید بتواند چند نمونه را راهاندازی کند. در دستگاههای دارای Android نسخه ۱۰ و پایینتر،
اعلانها بهصورت حباب نشان داده نمیشوند، مگراینکه صریحاً
documentLaunchMode را روی
"always" تنظیم کنید. از Android 11، لازم نیست این مقدار را بهطور صریح تنظیم کنید، زیرا سیستم بهطور خودکار documentLaunchMode همه مکالمهها را روی "always" تنظیم میکند.
برای ارسال حبابک اعلان، این مراحل را دنبال کنید:
- اعلان را طبق روال معمول ایجاد کنید.
- برای ایجاد شیء
BubbleMetadata،BubbleMetadata.Builder(PendingIntent, Icon)یاBubbleMetadata.Builder(String)را فراخوانی کنید. - از
setBubbleMetadata()برای افزودن فراداده به اعلان استفاده کنید. - اگر Android نسخه ۱۱ (سطح میانای برنامهسازی کاربردی ۳۰) یا بالاتر را هدف قرار میدهید، مطمئن شوید فراداده حباب یا اعلان به میانبر همرسانی ارجاع میدهد.
- برنامهتان را اصلاح کنید تا اعلانهایی را که بهصورت حبابک نشان داده میشوند لغو نکند. لغو کردن اعلان، حبابک را از صفحه برمیدارد. با باز کردن حبابک، اعلان مربوط به آن بهطور خودکار پنهان میشود.
این مراحل در مثال زیر نشان داده شده است:
// 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 ۳۰) یا بالاتر را هدف قرار دهد، اعلان بهصورت حباب ظاهر نمیشود، مگراینکه الزامات مکالمه را برآورده کند. اگر برنامهای Android 10 (سطح API ۲۹) یا پایینتر را هدف قرار دهد، اعلان فقط درصورتی بهصورت حباب ظاهر میشود که یک یا چند مورد از شرایط زیر برآورده شود:
- اعلان از
MessagingStyleاستفاده میکند وPersonبه آن اضافه شده است. - اعلان از تماس با
Service.startForegroundاست،categoryCATEGORY_CALLدارد، وPersonبه آن اضافه شده است. - برنامه هنگام ارسال اعلان در پیشزمینه باشد.
اگر هیچکدام از این شرایط برآورده نشود، اعلان بهجای حباب نشان داده میشود.
راهاندازی فعالیتها از حبابکها
وقتی حباب فعالیت جدیدی را راهاندازی میکند، فعالیت جدید یا در همان تکلیف و همان پنجره حبابدار راهاندازی میشود یا در تکلیف جدیدی در حالت تمامصفحه راهاندازی میشود و حبابی را که آن را راهاندازی کرده است جمع میکند.
برای راهاندازی فعالیت جدید در همان تکلیف حباب:
۱. هنگام راهاندازی قصدها، از بافت فعالیت استفاده کنید،
activity.startActivity(intent)، و
۱. پرچم FLAG_ACTIVITY_NEW_TASK را روی هدف تنظیم نکنید.
درغیراینصورت، فعالیت جدید در تکلیف جدیدی شروع میشود و حبابک جمع میشود.
بهخاطر داشته باشید که حباب نشاندهنده مکالمه خاصی است، بنابراین فعالیتهایی که در حباب راهاندازی میشود باید به آن مکالمه مربوط باشد. علاوهبراین، راهاندازی فعالیت در حباب، پشته تکلیف حباب را افزایش میدهد و میتواند بهطور بالقوه تجربه کاربری را، بهویژه درزمینه پیمایش، پیچیده کند.
روالهای مطلوب
- اعلان را فقط درصورتی بهصورت حباب ارسال کنید که مهم باشد، مثلاً وقتی که بخشی از ارتباطی درحال انجام باشد یا اگر کاربر صریحاً برای محتوا حباب درخواست کند. حبابها از فضای صفحه استفاده میکنند و محتوای برنامههای دیگر را میپوشانند.
- مطمئن شوید اعلان حبابی شما بهعنوان اعلان عادی نیز کار میکند. وقتی کاربر حبابک را غیرفعال میکند، اعلان حبابک بهصورت اعلان معمولی نشان داده میشود.
- از ترکیبپذیر
BackHandlerاستفاده کنید و پارامترenabledآن را به وضعیت واسط کاربر خود متصل کنید تا فقط درصورت لزوم، فشردن دکمه برگشت را رهگیری کند. وقتی گرداننده خودش را غیرفعال کند، حباب بسته میشود.
وقتی حبابک جمعشده پیام بهروزشدهای دریافت میکند، حبابک نماد نِشان را برای نشان دادن پیام خواندهنشده نمایش میدهد. وقتی کاربر پیام را در برنامه مرتبط باز میکند، این مراحل را دنبال کنید:
- برای متوقف کردن اعلان،
BubbleMetadataرا بهروز کنید. تماس باBubbleMetadata.Builder.setSuppressNotification(). این کار نماد نشان را برمیدارد تا نشان دهد کاربر با پیام تعامل داشته است. Notification.Builder.setOnlyAlertOnce()را رویtrueتنظیم کنید تا صدا یا لرزشی را که همراه با بهروزرسانیBubbleMetadataاست متوقف کنید.
برنامه نمونه
برنامه نمونه SociaLite یک برنامه مکالمه است که از حبابکها استفاده میکند. این برنامه برای اهداف نمایشی از روباتهای گپ استفاده میکند. در برنامههای کاربردی دنیای واقعی، از حبابکها برای پیامهای انسانها استفاده کنید.