حبابهای اعلان، مشاهده و مشارکت در مکالمات را برای کاربران آسانتر میکنند.
آنها روی محتوای سایر برنامهها شناور میشوند و کاربران میتوانند حبابها را برای آشکار کردن و تعامل با محتوای برنامه گسترش دهند و وقتی از آنها استفاده نمیکنند، میتوانند آنها را جمع کنند.
وقتی دستگاه قفل است یا قابلیت نمایشگر همیشه روشن فعال است، حبابهایی مانند اعلانها ظاهر میشوند.
حبابهای اعلان توسط کاربر فعال میشوند. آنها میتوانند این کار را با ضربه زدن روی دکمه حباب روی اعلانهایی که از حباب پشتیبانی میکنند، انجام دهند. این کار به آن چت خاص اجازه میدهد همیشه حباب داشته باشد. در تنظیمات، کاربران میتوانند تنظیم کنند که کدام چتها را حباب کردهاند یا تنظیمات کل برنامه را تغییر دهند.
کاربران میتوانند موارد زیر را انجام دهند:
- تمام اعلانهای برنامهتان را مسدود کنید. اعلانها مسدود نمیشوند، اما هرگز به صورت حباب نمایش داده نمیشوند.
- حبابهای اعلان انتخابشده از برنامهتان را مجاز کنید. حباب اعلانهایی که از دکمه حباب استفاده میکنند، «انتخابشده» هستند.
- به همه اعلانهای برنامه خود اجازه نمایش دهید. همه اعلانهای ارسال شده با
BubbleMetadataبه صورت حباب نمایش داده میشوند.
API حباب اعلانها
حبابهای اعلان با استفاده از API اعلان ایجاد میشوند. اگر میخواهید اعلان شما به صورت حباب ظاهر شود، دادههای اضافی را به آن پیوست کنید.
نمای گسترده حباب از فعالیتی که شما انتخاب میکنید ایجاد میشود. فعالیت را طوری پیکربندی کنید که به درستی به عنوان یک حباب ظاهر شود. فعالیت باید قابل تغییر اندازه و جاسازی باشد. اگر فاقد هر یک از این الزامات باشد، سیستم آن را به عنوان یک اعلان نمایش میدهد.
کد زیر نحوه پیادهسازی یک حباب را نشان میدهد:
<activity
android:name=".bubbles.BubbleActivity"
android:theme="@style/AppTheme.NoActionBar"
android:label="@string/title_activity_bubble"
android:allowEmbedded="true"
android:resizeableActivity="true"
/>
اگر برنامه شما چندین حباب از یک نوع را نشان میدهد، مانند چندین مکالمه چت با مخاطبین مختلف، فعالیت باید بتواند چندین نمونه را راهاندازی کند. در دستگاههایی که اندروید ۱۰ و پایینتر را اجرا میکنند، اعلانها به صورت حباب نشان داده نمیشوند، مگر اینکه صریحاً documentLaunchMode روی "always" تنظیم کنید. از اندروید ۱۱ به بعد، نیازی به تنظیم صریح این مقدار نیست، زیرا سیستم به طور خودکار documentLaunchMode همه مکالمات را روی "always" تنظیم میکند.
برای ارسال حباب اعلان، این مراحل را دنبال کنید:
- طبق معمول یک اعلان ایجاد کنید .
- برای ایجاد یک شیء
BubbleMetadataBubbleMetadata.Builder(PendingIntent, Icon)یاBubbleMetadata.Builder(String)را فراخوانی کنید. - برای اضافه کردن متادیتا به اعلان، از
setBubbleMetadata()استفاده کنید. - اگر اندروید ۱۱ (سطح API 30) یا بالاتر را هدف قرار میدهید، مطمئن شوید که ابرداده حبابی یا اعلان به یک میانبر اشتراکگذاری اشاره دارد.
- برنامه خود را طوری تغییر دهید که اعلانهایی که به صورت حباب ظاهر میشوند را لغو نکند . لغو یک اعلان، حباب را از صفحه حذف میکند. باز کردن یک حباب، اعلان مرتبط با آن را به طور خودکار پنهان میکند.
این مراحل در مثال زیر نشان داده شده است:
// 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(context, 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)
اگر برنامه شما هنگام ارسال حباب در پیشزمینه باشد، اهمیت آن نادیده گرفته میشود و حباب شما همیشه نمایش داده میشود، مگر اینکه کاربر حبابها یا اعلانهای برنامه شما را مسدود کند.
ایجاد یک حباب منبسط شده
میتوانید حباب خود را طوری پیکربندی کنید که به طور خودکار در حالت باز نمایش داده شود. توصیه میکنیم فقط در صورتی از این ویژگی استفاده کنید که کاربر عملی انجام دهد که منجر به ایجاد حباب شود، مانند ضربه زدن روی یک دکمه برای شروع یک چت جدید. در این حالت، منطقی است که اعلان اولیه ارسال شده هنگام ایجاد حباب را نیز غیرفعال کنید.
روشهایی وجود دارد که میتوانید برای تنظیم پرچمهایی که این رفتارها را فعال میکنند، استفاده کنید: setAutoExpandBubble() و setSuppressNotification() .
مثال زیر نحوه پیکربندی یک حباب را برای نمایش خودکار در حالت باز نشان میدهد:
val bubbleMetadata = Notification.BubbleMetadata.Builder()
.setDesiredHeight(600)
.setIntent(bubbleIntent)
.setAutoExpandBubble(true)
.setSuppressNotification(true)
.build()
چرخه حیات محتوای حبابی
وقتی یک حباب بزرگ میشود، فعالیت محتوا چرخه حیات فرآیند عادی را طی میکند و در نتیجه، اگر برنامه از قبل به یک فرآیند پیشزمینه تبدیل نشده باشد، به آن تبدیل میشود.
وقتی حباب بسته یا حذف میشود، اکتیویتی از بین میرود. این ممکن است منجر به ذخیره شدن فرآیند و بعداً از بین رفتن آن شود، بسته به اینکه آیا برنامه اجزای پیشزمینه دیگری را در حال اجرا دارد یا خیر.
وقتی حبابها ظاهر میشوند
برای کاهش وقفه برای کاربر، حبابها فقط تحت شرایط خاصی ظاهر میشوند.
اگر برنامهای اندروید ۱۱ (سطح API 30) یا بالاتر را هدف قرار دهد، اعلان به صورت حباب ظاهر نمیشود مگر اینکه الزامات مکالمه را برآورده کند. اگر برنامهای اندروید ۱۰ (سطح API 29) یا پایینتر را هدف قرار دهد، اعلان فقط در صورتی به صورت حباب ظاهر میشود که یک یا چند مورد از شرایط زیر برآورده شود:
- این اعلان از
MessagingStyleاستفاده میکند و یکPersonبه آن اضافه شده است. - این اعلان از فراخوانی
Service.startForegroundاست، دارایcategoryCATEGORY_CALLاست و یکPersonنیز به آن اضافه شده است. - وقتی اعلان ارسال میشود، برنامه در پیشزمینه است.
اگر هیچ یک از این شرایط برآورده نشود، اعلان به جای حباب نشان داده میشود.
شروع فعالیتها از حبابها
وقتی یک حباب، فعالیت جدیدی را راهاندازی میکند، فعالیت جدید یا در همان وظیفه و در همان پنجره حبابی، یا در یک وظیفه جدید در حالت تمام صفحه، اجرا میشود و حبابی که آن را راهاندازی کرده است، از بین میرود.
برای راهاندازی یک اکتیویتی جدید در همان وظیفهای که حباب اجرا میشود: ۱. هنگام راهاندازی intentها، از context اکتیویتی، activity.startActivity(intent) استفاده کنید، و ۱. پرچم FLAG_ACTIVITY_NEW_TASK را روی intent تنظیم نکنید.
در غیر این صورت، فعالیت جدید در یک وظیفه جدید آغاز میشود و حباب از بین میرود.
به خاطر داشته باشید که یک حباب نشاندهنده یک مکالمه خاص است، بنابراین فعالیتهایی که درون حباب اجرا میشوند باید به آن مکالمه مرتبط باشند. علاوه بر این، اجرای یک فعالیت درون حباب، حجم وظایف حباب را افزایش میدهد و میتواند به طور بالقوه تجربه کاربری را، به ویژه در مورد ناوبری، پیچیده کند.
بهترین شیوهها
- فقط در صورتی که اعلانی مهم باشد، مانند زمانی که بخشی از یک ارتباط مداوم است یا اگر کاربر صریحاً درخواست نمایش یک حباب برای محتوا را دارد، آن را به صورت حباب ارسال کنید. حبابها از فضای صفحه نمایش استفاده میکنند و سایر محتوای برنامه را میپوشانند.
- مطمئن شوید که اعلان حبابی شما به عنوان یک اعلان معمولی نیز کار میکند. وقتی کاربر حباب را غیرفعال میکند، یک اعلان حبابی به عنوان یک اعلان معمولی نمایش داده میشود.
- از
BackHandlercomposable استفاده کنید و پارامترenabledآن را به وضعیت رابط کاربری خود گره بزنید تا فقط در صورت لزوم، کلیدهای برگشتی را متوقف کند. به محض اینکه handler شما خودش را غیرفعال کند، حباب از بین میرود.
وقتی یک حباب جمعشده، پیام بهروزرسانیشدهای دریافت میکند، حباب یک نماد نشان را برای نشان دادن پیام خواندهنشده نشان میدهد. وقتی کاربر پیام را در برنامه مرتبط باز میکند، این مراحل را دنبال کنید:
-
BubbleMetadataرا بهروزرسانی کنید تا اعلان را سرکوب کنید.BubbleMetadata.Builder.setSuppressNotification()را فراخوانی کنید. این کار آیکون نشان را حذف میکند تا نشان دهد که کاربر با پیام تعامل داشته است. - برای جلوگیری از صدا یا لرزشی که همراه با بهروزرسانی
BubbleMetadataرخ میدهد، مقدارNotification.Builder.setOnlyAlertOnce()را رویtrueتنظیم کنید.
نمونه برنامه
برنامه نمونه SociaLite یک برنامه مکالمه است که از حبابها استفاده میکند. برای اهداف نمایشی، این برنامه از چتباتها استفاده میکند. در برنامههای دنیای واقعی، از حبابها برای پیامهای ارسالی توسط انسانها استفاده کنید.